summaryrefslogtreecommitdiff
path: root/src/simulation
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-08-18 16:08:24 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-08-18 16:08:24 (GMT)
commit7018e46fac29ba41398dc49b069aa9aeaa37b04d (patch)
tree45c0b98be36e7f1a1accb03b423a34837b2cbf03 /src/simulation
parent69b788ba7d7c0910369cbff0f708c949195683bc (diff)
downloadpowder-7018e46fac29ba41398dc49b069aa9aeaa37b04d.zip
powder-7018e46fac29ba41398dc49b069aa9aeaa37b04d.tar.gz
Remove disabled elements when simulating. Fix crash when kill_part is run on elements with invalid types
Diffstat (limited to 'src/simulation')
-rw-r--r--src/simulation/Simulation.cpp13
-rw-r--r--src/simulation/Simulation.h5
2 files changed, 11 insertions, 7 deletions
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp
index 1eb7ed9..ebc0fed 100644
--- a/src/simulation/Simulation.cpp
+++ b/src/simulation/Simulation.cpp
@@ -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++)
{
- elements[i] = elementList[i];
+ if(i < elementList.size())
+ elements[i] = elementList[i];
+ else
+ elements[i] = Element_NONE();
}
tools = GetTools();
diff --git a/src/simulation/Simulation.h b/src/simulation/Simulation.h
index 48e06d9..dad9e3e 100644
--- a/src/simulation/Simulation.h
+++ b/src/simulation/Simulation.h
@@ -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];