From 7018e46fac29ba41398dc49b069aa9aeaa37b04d Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Sat, 18 Aug 2012 17:08:24 +0100 Subject: Remove disabled elements when simulating. Fix crash when kill_part is run on elements with invalid types 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 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 signs; - Element * elements; + Element elements[PT_NUM]; + //Element * elements; std::vector tools; unsigned int * platent; wall_type wtypes[UI_WALLCOUNT]; -- cgit v0.9.2-21-gd62e