Skip to content

Commit

Permalink
PARTICLEDEBUG define which turns on some particle debugging key short…
Browse files Browse the repository at this point in the history
…cuts

Also fix particle updating bug
  • Loading branch information
jacob1 committed Feb 7, 2015
1 parent 1840f4e commit 2c0287b
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 18 deletions.
49 changes: 48 additions & 1 deletion src/gui/game/GameController.cpp
Expand Up @@ -882,7 +882,9 @@ void GameController::Update()
gameView->SetSample(gameModel->GetSimulation()->GetSample(pos.X, pos.Y));

Simulation * sim = gameModel->GetSimulation();
sim->Update();
sim->UpdateSim();
if (!sim->sys_pause || sim->framerender)
sim->UpdateParticles(0, NPART);

//if either STKM or STK2 isn't out, reset it's selected element. Defaults to PT_DUST unless right selected is something else
//This won't run if the stickmen dies in a frame, since it respawns instantly
Expand Down Expand Up @@ -1413,6 +1415,51 @@ void GameController::ReloadSim()
}
}

#ifdef PARTICLEDEBUG
void GameController::ParticleDebug(int mode, int x, int y)
{
Simulation *sim = gameModel->GetSimulation();
int debug_currentParticle = sim->debug_currentParticle;
int i;
std::stringstream logmessage;

if (mode == 0)
{
if (!sim->NUM_PARTS)
return;
i = debug_currentParticle;
while (i < NPART && !sim->parts[i].type)
i++;
if (i == NPART)
logmessage << "End of particles reached, updated sim";
else
logmessage << "Updated particle #" << i;
}
else if (mode == 1)
{
if (x < 0 || x >= XRES || y < 0 || y >= YRES || !(i = (sim->pmap[y][x]>>8)) || i < debug_currentParticle)
{
i = NPART;
logmessage << "Updated particles from #" << debug_currentParticle << " to end, updated sim";
}
else
logmessage << "Updated particles #" << debug_currentParticle << " through #" << i;
}
gameModel->Log(logmessage.str());

sim->UpdateParticles(debug_currentParticle, i);
if (i < NPART-1)
sim->debug_currentParticle = i+1;
else
{
sim->framerender = 1;
sim->UpdateSim();
sim->framerender = 0;
sim->debug_currentParticle = 0;
}
}
#endif

std::string GameController::ElementResolve(int type, int ctype)
{
if(gameModel && gameModel->GetSimulation())
Expand Down
3 changes: 3 additions & 0 deletions src/gui/game/GameController.h
Expand Up @@ -132,6 +132,9 @@ class GameController: public ClientListener
void PlaceSave(ui::Point position);
void ClearSim();
void ReloadSim();
#ifdef PARTICLEDEBUG
void ParticleDebug(int mode, int x, int y);
#endif
void Vote(int direction);
void ChangeBrush();
void ShowConsole();
Expand Down
14 changes: 14 additions & 0 deletions src/gui/game/GameView.cpp
Expand Up @@ -1412,7 +1412,21 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
c->OpenElementSearch();
break;
case 'f':
#ifdef PARTICLEDEBUG
if (ctrl)
{
c->ParticleDebug(0, 0, 0);
}
else if (shift)
{
ui::Point mouse = c->PointTranslate(currentMouse);
c->ParticleDebug(1, mouse.X, mouse.Y);
}
else
c->FrameStep();
#else
c->FrameStep();
#endif
break;
case 'g':
if (ctrl)
Expand Down
38 changes: 22 additions & 16 deletions src/simulation/Simulation.cpp
Expand Up @@ -3234,7 +3234,7 @@ void Simulation::UpdateParticles(int start, int end)
bool transitionOccurred;

//the main particle loop function, goes over all particles.
for (i = start; i <= end; i++)
for (i = start; i <= end && i <= parts_lastActiveIndex; i++)
if (parts[i].type)
{
t = parts[i].type;
Expand Down Expand Up @@ -4393,6 +4393,10 @@ void Simulation::UpdateParticles(int start, int end)
movedone:
continue;
}

//'f' was pressed (single frame)
if (framerender)
framerender--;
}

int Simulation::GetParticleType(std::string type)
Expand Down Expand Up @@ -4580,8 +4584,8 @@ void Simulation::CheckStacking()
}
}

//updates pmap, gol, and some other simulation stuff (then calls UpdateParticles)
void Simulation::Update()
//updates pmap, gol, and some other simulation stuff (but not particles)
void Simulation::UpdateSim()
{
int i, x, y, t;
int lastPartUsed = 0;
Expand Down Expand Up @@ -4706,8 +4710,9 @@ void Simulation::Update()
else parts[lastPartUnused].life = parts_lastActiveIndex+1;
}
parts_lastActiveIndex = lastPartUsed;
if (!sys_pause||framerender)
if (!sys_pause || framerender)
{
// decrease wall conduction, make walls block air and ambient heat
for (y=0; y<YRES/CELL; y++)
{
for (x=0; x<XRES/CELL; x++)
Expand All @@ -4718,16 +4723,15 @@ void Simulation::Update()
air->bmap_blockairh[y][x] = (bmap[y][x]==WL_WALL || bmap[y][x]==WL_WALLELEC || bmap[y][x]==WL_BLOCKAIR || bmap[y][x]==WL_GRAV || (bmap[y][x]==WL_EWALL && !emap[y][x])) ? 0x8:0;
}
}
}

if (!sys_pause||framerender)
{
// check for stacking and create BHOL if found
if (force_stacking_check || (rand()%10)==0)
{
CheckStacking();
}

if (elementCount[PT_LOVE] > 0 || elementCount[PT_LOLZ] > 0) //LOVE and LOLZ element handling
// LOVE and LOLZ element handling
if (elementCount[PT_LOVE] > 0 || elementCount[PT_LOLZ] > 0)
{
int nx, nnx, ny, nny, r, rt;
for (ny=0; ny<YRES-4; ny++)
Expand Down Expand Up @@ -4796,7 +4800,7 @@ void Simulation::Update()
}
}

//wire!
// make WIRE work
if(elementCount[PT_WIRE] > 0)
{
for (int nx = 0; nx < XRES; nx++)
Expand All @@ -4812,6 +4816,7 @@ void Simulation::Update()
}
}

// update PPIP tmp?
if (Element_PPIP::ppip_changed)
{
for (i=0; i<=parts_lastActiveIndex; i++)
Expand All @@ -4825,13 +4830,15 @@ void Simulation::Update()
Element_PPIP::ppip_changed = 0;
}

//game of life!
if (elementCount[PT_LIFE]>0 && ++CGOL>=GSPEED)//GSPEED is frames per generation
// Simulate GoL
// GSPEED is frames per generation
if (elementCount[PT_LIFE]>0 && ++CGOL>=GSPEED)
{
SimulateGoL();
}

if (ISWIRE>0)//wifi channel reseting
// wifi channel reseting
if (ISWIRE>0)
{
for (int q = 0; q < (int)(MAX_TEMP-73.15f)/100+2; q++)
{
Expand All @@ -4841,16 +4848,14 @@ void Simulation::Update()
ISWIRE--;
}

// spawn STKM and STK2
if (!player.spwn && player.spawnID >= 0)
create_part(-1, (int)parts[player.spawnID].x, (int)parts[player.spawnID].y, PT_STKM);
else if (!player2.spwn && player2.spawnID >= 0)
create_part(-1, (int)parts[player2.spawnID].x, (int)parts[player2.spawnID].y, PT_STKM2);

UpdateParticles(0, parts_lastActiveIndex);
// particle update happens right after this function (called separately)
}

if(framerender)
framerender--;
}

Simulation::~Simulation()
Expand All @@ -4865,6 +4870,7 @@ Simulation::~Simulation()
Simulation::Simulation():
replaceModeSelected(0),
replaceModeFlags(0),
debug_currentParticle(0),
ISWIRE(0),
force_stacking_check(0),
emp_decor(0),
Expand Down
3 changes: 2 additions & 1 deletion src/simulation/Simulation.h
Expand Up @@ -53,6 +53,7 @@ class Simulation
int replaceModeFlags;

char can_move[PT_NUM][PT_NUM];
int debug_currentParticle;
int parts_lastActiveIndex;
int pfree;
int NUM_PARTS;
Expand Down Expand Up @@ -154,7 +155,7 @@ class Simulation
void UpdateParticles(int start, int end);
void SimulateGoL();
void CheckStacking();
void Update();
void UpdateSim();
void rotate_area(int area_x, int area_y, int area_w, int area_h, int invert);
void clear_area(int area_x, int area_y, int area_w, int area_h);

Expand Down

0 comments on commit 2c0287b

Please sign in to comment.