This repository has been archived on 2025-03-20. You can view files and clone it, but cannot push or open issues or pull requests.
The-Powder-Toy/src/debug/ParticleDebug.cpp

111 lines
2.3 KiB
C++

#include "ParticleDebug.h"
#include "gui/game/GameModel.h"
#include "simulation/Simulation.h"
ParticleDebug::ParticleDebug(unsigned int id, Simulation * sim, GameModel * model):
DebugInfo(id),
sim(sim),
model(model)
{
}
void ParticleDebug::Debug(int mode, int x, int y)
{
int debug_currentParticle = sim->debug_currentParticle;
int i = 0;
String logmessage;
if (mode == 0)
{
if (!sim->NUM_PARTS)
return;
i = debug_currentParticle;
while (i < NPART - 1 && !sim->parts[i].type)
i++;
if (i == NPART - 1)
logmessage = "End of particles reached, updated sim";
else
logmessage = String::Build("Updated particle #", i);
}
else if (mode == 1)
{
if (x < 0 || x >= XRES || y < 0 || y >= YRES || !sim->pmap[y][x] || (i = ID(sim->pmap[y][x])) < debug_currentParticle)
{
i = NPART - 1;
logmessage = String::Build("Updated particles from #", debug_currentParticle, " to end, updated sim");
}
else
logmessage = String::Build("Updated particles #", debug_currentParticle, " through #", i);
}
model->Log(logmessage, false);
if (sim->debug_currentParticle == 0)
{
sim->framerender = 1;
sim->BeforeSim();
sim->framerender = 0;
}
sim->UpdateParticles(debug_currentParticle, i);
if (i < NPART-1)
sim->debug_currentParticle = i+1;
else
{
sim->AfterSim();
sim->debug_currentParticle = 0;
}
}
bool ParticleDebug::KeyPress(int key, int scan, bool shift, bool ctrl, bool alt, ui::Point currentMouse)
{
if (key == 'f')
{
model->SetPaused(1);
if (alt)
{
Debug(0, 0, 0);
}
else if (shift)
{
ui::Point mouse = currentMouse;
if (mouse.X >= XRES)
mouse.X = XRES-1;
else if (mouse.X < 0)
mouse.X = 0;
if (mouse.Y >= YRES)
mouse.Y = YRES-1;
else if (mouse.Y < 0)
mouse.Y = 0;
mouse = model->AdjustZoomCoords(mouse);
Debug(1, mouse.X, mouse.Y);
}
else
{
if (ctrl)
return true;
if (sim->debug_currentParticle > 0)
{
sim->UpdateParticles(sim->debug_currentParticle, NPART - 1);
sim->AfterSim();
String logmessage = String::Build("Updated particles from #", sim->debug_currentParticle, " to end, updated sim");
model->Log(logmessage, false);
sim->debug_currentParticle = 0;
}
else
{
model->FrameStep(1);
}
}
return false;
}
return true;
}
ParticleDebug::~ParticleDebug()
{
}