Remove disabled elements when simulating. Fix crash when kill_part is run on elements with invalid types
This commit is contained in:
parent
69b788ba7d
commit
7018e46fac
@ -2477,7 +2477,7 @@ void Simulation::kill_part(int i)//kills particle number i
|
||||
if (parts[i].type == PT_NONE)
|
||||
return;
|
||||
|
||||
if(elementCount[parts[i].type] && parts[i].type)
|
||||
if(parts[i].type > 0 && parts[i].type < PT_NUM && elementCount[parts[i].type] && parts[i].type)
|
||||
elementCount[parts[i].type]--;
|
||||
if (parts[i].type == PT_STKM)
|
||||
{
|
||||
@ -3352,7 +3352,7 @@ void Simulation::update_particles_i(int start, int inc)
|
||||
if (parts[i].type)
|
||||
{
|
||||
t = parts[i].type;
|
||||
if (t<0 || t>=PT_NUM)
|
||||
if (t<0 || t>=PT_NUM || !elements[i].Enabled)
|
||||
{
|
||||
kill_part(i);
|
||||
continue;
|
||||
@ -4588,11 +4588,14 @@ Simulation::Simulation():
|
||||
memcpy(platent, platentT, latentCount * sizeof(unsigned int));
|
||||
free(platentT);
|
||||
|
||||
elements = new Element[PT_NUM];
|
||||
//elements = new Element[PT_NUM];
|
||||
std::vector<Element> elementList = GetElements();
|
||||
for(int i = 0; i < elementList.size(); i++)
|
||||
for(int i = 0; i < PT_NUM; i++)
|
||||
{
|
||||
if(i < elementList.size())
|
||||
elements[i] = elementList[i];
|
||||
else
|
||||
elements[i] = Element_NONE();
|
||||
}
|
||||
|
||||
tools = GetTools();
|
||||
|
@ -20,11 +20,11 @@
|
||||
#include "WallType.h"
|
||||
#include "GOLMenu.h"
|
||||
#include "MenuSection.h"
|
||||
#include "elements/Element.h"
|
||||
|
||||
#define CHANNELS ((int)(MAX_TEMP-73)/100+2)
|
||||
|
||||
class Snapshot;
|
||||
class Element;
|
||||
class SimTool;
|
||||
class Brush;
|
||||
struct SimulationSample;
|
||||
@ -47,7 +47,8 @@ public:
|
||||
Air * air;
|
||||
|
||||
std::vector<sign> signs;
|
||||
Element * elements;
|
||||
Element elements[PT_NUM];
|
||||
//Element * elements;
|
||||
std::vector<SimTool*> tools;
|
||||
unsigned int * platent;
|
||||
wall_type wtypes[UI_WALLCOUNT];
|
||||
|
Loading…
Reference in New Issue
Block a user