PARTICLEDEBUG define which turns on some particle debugging key shortcuts
Also fix particle updating bug
This commit is contained in:
parent
1840f4e39c
commit
2c0287b71d
@ -882,7 +882,9 @@ void GameController::Update()
|
|||||||
gameView->SetSample(gameModel->GetSimulation()->GetSample(pos.X, pos.Y));
|
gameView->SetSample(gameModel->GetSimulation()->GetSample(pos.X, pos.Y));
|
||||||
|
|
||||||
Simulation * sim = gameModel->GetSimulation();
|
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
|
//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
|
//This won't run if the stickmen dies in a frame, since it respawns instantly
|
||||||
@ -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)
|
std::string GameController::ElementResolve(int type, int ctype)
|
||||||
{
|
{
|
||||||
if(gameModel && gameModel->GetSimulation())
|
if(gameModel && gameModel->GetSimulation())
|
||||||
|
@ -132,6 +132,9 @@ public:
|
|||||||
void PlaceSave(ui::Point position);
|
void PlaceSave(ui::Point position);
|
||||||
void ClearSim();
|
void ClearSim();
|
||||||
void ReloadSim();
|
void ReloadSim();
|
||||||
|
#ifdef PARTICLEDEBUG
|
||||||
|
void ParticleDebug(int mode, int x, int y);
|
||||||
|
#endif
|
||||||
void Vote(int direction);
|
void Vote(int direction);
|
||||||
void ChangeBrush();
|
void ChangeBrush();
|
||||||
void ShowConsole();
|
void ShowConsole();
|
||||||
|
@ -1412,7 +1412,21 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
|
|||||||
c->OpenElementSearch();
|
c->OpenElementSearch();
|
||||||
break;
|
break;
|
||||||
case 'f':
|
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();
|
c->FrameStep();
|
||||||
|
#else
|
||||||
|
c->FrameStep();
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
if (ctrl)
|
if (ctrl)
|
||||||
|
@ -3234,7 +3234,7 @@ void Simulation::UpdateParticles(int start, int end)
|
|||||||
bool transitionOccurred;
|
bool transitionOccurred;
|
||||||
|
|
||||||
//the main particle loop function, goes over all particles.
|
//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)
|
if (parts[i].type)
|
||||||
{
|
{
|
||||||
t = parts[i].type;
|
t = parts[i].type;
|
||||||
@ -4393,6 +4393,10 @@ killed:
|
|||||||
movedone:
|
movedone:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//'f' was pressed (single frame)
|
||||||
|
if (framerender)
|
||||||
|
framerender--;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Simulation::GetParticleType(std::string type)
|
int Simulation::GetParticleType(std::string type)
|
||||||
@ -4580,8 +4584,8 @@ void Simulation::CheckStacking()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//updates pmap, gol, and some other simulation stuff (then calls UpdateParticles)
|
//updates pmap, gol, and some other simulation stuff (but not particles)
|
||||||
void Simulation::Update()
|
void Simulation::UpdateSim()
|
||||||
{
|
{
|
||||||
int i, x, y, t;
|
int i, x, y, t;
|
||||||
int lastPartUsed = 0;
|
int lastPartUsed = 0;
|
||||||
@ -4706,8 +4710,9 @@ void Simulation::Update()
|
|||||||
else parts[lastPartUnused].life = parts_lastActiveIndex+1;
|
else parts[lastPartUnused].life = parts_lastActiveIndex+1;
|
||||||
}
|
}
|
||||||
parts_lastActiveIndex = lastPartUsed;
|
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 (y=0; y<YRES/CELL; y++)
|
||||||
{
|
{
|
||||||
for (x=0; x<XRES/CELL; x++)
|
for (x=0; x<XRES/CELL; x++)
|
||||||
@ -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;
|
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)
|
if (force_stacking_check || (rand()%10)==0)
|
||||||
{
|
{
|
||||||
CheckStacking();
|
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;
|
int nx, nnx, ny, nny, r, rt;
|
||||||
for (ny=0; ny<YRES-4; ny++)
|
for (ny=0; ny<YRES-4; ny++)
|
||||||
@ -4796,7 +4800,7 @@ void Simulation::Update()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//wire!
|
// make WIRE work
|
||||||
if(elementCount[PT_WIRE] > 0)
|
if(elementCount[PT_WIRE] > 0)
|
||||||
{
|
{
|
||||||
for (int nx = 0; nx < XRES; nx++)
|
for (int nx = 0; nx < XRES; nx++)
|
||||||
@ -4812,6 +4816,7 @@ void Simulation::Update()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update PPIP tmp?
|
||||||
if (Element_PPIP::ppip_changed)
|
if (Element_PPIP::ppip_changed)
|
||||||
{
|
{
|
||||||
for (i=0; i<=parts_lastActiveIndex; i++)
|
for (i=0; i<=parts_lastActiveIndex; i++)
|
||||||
@ -4825,13 +4830,15 @@ void Simulation::Update()
|
|||||||
Element_PPIP::ppip_changed = 0;
|
Element_PPIP::ppip_changed = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//game of life!
|
// Simulate GoL
|
||||||
if (elementCount[PT_LIFE]>0 && ++CGOL>=GSPEED)//GSPEED is frames per generation
|
// GSPEED is frames per generation
|
||||||
|
if (elementCount[PT_LIFE]>0 && ++CGOL>=GSPEED)
|
||||||
{
|
{
|
||||||
SimulateGoL();
|
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++)
|
for (int q = 0; q < (int)(MAX_TEMP-73.15f)/100+2; q++)
|
||||||
{
|
{
|
||||||
@ -4841,16 +4848,14 @@ void Simulation::Update()
|
|||||||
ISWIRE--;
|
ISWIRE--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// spawn STKM and STK2
|
||||||
if (!player.spwn && player.spawnID >= 0)
|
if (!player.spwn && player.spawnID >= 0)
|
||||||
create_part(-1, (int)parts[player.spawnID].x, (int)parts[player.spawnID].y, PT_STKM);
|
create_part(-1, (int)parts[player.spawnID].x, (int)parts[player.spawnID].y, PT_STKM);
|
||||||
else if (!player2.spwn && player2.spawnID >= 0)
|
else if (!player2.spwn && player2.spawnID >= 0)
|
||||||
create_part(-1, (int)parts[player2.spawnID].x, (int)parts[player2.spawnID].y, PT_STKM2);
|
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()
|
Simulation::~Simulation()
|
||||||
@ -4865,6 +4870,7 @@ Simulation::~Simulation()
|
|||||||
Simulation::Simulation():
|
Simulation::Simulation():
|
||||||
replaceModeSelected(0),
|
replaceModeSelected(0),
|
||||||
replaceModeFlags(0),
|
replaceModeFlags(0),
|
||||||
|
debug_currentParticle(0),
|
||||||
ISWIRE(0),
|
ISWIRE(0),
|
||||||
force_stacking_check(0),
|
force_stacking_check(0),
|
||||||
emp_decor(0),
|
emp_decor(0),
|
||||||
|
@ -53,6 +53,7 @@ public:
|
|||||||
int replaceModeFlags;
|
int replaceModeFlags;
|
||||||
|
|
||||||
char can_move[PT_NUM][PT_NUM];
|
char can_move[PT_NUM][PT_NUM];
|
||||||
|
int debug_currentParticle;
|
||||||
int parts_lastActiveIndex;
|
int parts_lastActiveIndex;
|
||||||
int pfree;
|
int pfree;
|
||||||
int NUM_PARTS;
|
int NUM_PARTS;
|
||||||
@ -154,7 +155,7 @@ public:
|
|||||||
void UpdateParticles(int start, int end);
|
void UpdateParticles(int start, int end);
|
||||||
void SimulateGoL();
|
void SimulateGoL();
|
||||||
void CheckStacking();
|
void CheckStacking();
|
||||||
void Update();
|
void UpdateSim();
|
||||||
void rotate_area(int area_x, int area_y, int area_w, int area_h, int invert);
|
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);
|
void clear_area(int area_x, int area_y, int area_w, int area_h);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user