summaryrefslogtreecommitdiff
path: root/src/simulation
diff options
context:
space:
mode:
authorjacksonmj <mj-pt@jacksonmj.co.uk>2013-09-08 10:30:21 (GMT)
committer jacksonmj <mj-pt@jacksonmj.co.uk>2013-09-08 10:30:21 (GMT)
commit5ad67f7778ede58e9708c43587d694e446a2377b (patch)
treeefc21d96ca54ea27187d877772f0566f244d06bd /src/simulation
parent79edfe9589c4b82ce320e0ae88d043b66b14f570 (diff)
downloadpowder-5ad67f7778ede58e9708c43587d694e446a2377b.zip
powder-5ad67f7778ede58e9708c43587d694e446a2377b.tar.gz
Don't reset decorations when sparking with INWR+CRAY(most things)
INWR+CRAY(SOAP) will reset decorations
Diffstat (limited to 'src/simulation')
-rw-r--r--src/simulation/elements/CRAY.cpp39
1 files changed, 29 insertions, 10 deletions
diff --git a/src/simulation/elements/CRAY.cpp b/src/simulation/elements/CRAY.cpp
index b906c33..e673d33 100644
--- a/src/simulation/elements/CRAY.cpp
+++ b/src/simulation/elements/CRAY.cpp
@@ -80,7 +80,7 @@ int Element_CRAY::update(UPDATE_FUNC_ARGS)
unsigned int colored = 0;
bool destroy = parts[r>>8].ctype==PT_PSCN;
bool nostop = parts[r>>8].ctype==PT_INST;
- bool createSpark = (parts[r>>8].ctype==PT_INWR);
+ bool createOnExisting = (parts[r>>8].ctype==PT_INWR);
int partsRemaining = 255;
if (parts[i].tmp) //how far it shoots
partsRemaining = parts[i].tmp;
@@ -89,17 +89,36 @@ int Element_CRAY::update(UPDATE_FUNC_ARGS)
break;
}
r = pmap[y+nyi+nyy][x+nxi+nxx];
- if (!sim->IsWallBlocking(x+nxi+nxx, y+nyi+nyy, parts[i].ctype) && (!sim->pmap[y+nyi+nyy][x+nxi+nxx] || createSpark)) { // create, also set color if it has passed through FILT
+ if (!sim->IsWallBlocking(x+nxi+nxx, y+nyi+nyy, parts[i].ctype) && (!r || createOnExisting)) { // create, also set color if it has passed through FILT
int nr;
- if (parts[i].ctype == PT_LIFE)
- nr = sim->create_part(-1, x+nxi+nxx, y+nyi+nyy, parts[i].ctype|(parts[i].tmp2<<8));
+ if (createOnExisting)
+ {
+ if (r&0xFF)
+ {
+ if (parts[i].ctype == PT_SOAP)
+ parts[r>>8].dcolour = 0;
+ else if (parts[i].ctype == PT_FILT)
+ parts[r>>8].dcolour = colored;
+ else
+ nr = sim->create_part(-1, x+nxi+nxx, y+nyi+nyy, PT_SPRK);
+ if ((r&0xFF)==PT_FILT)
+ colored = wavelengthToDecoColour(Element_FILT::getWavelengths(&parts[r>>8]));
+ if (!--partsRemaining)
+ docontinue = 0;
+ }
+ }
else
- nr = sim->create_part(-1, x+nxi+nxx, y+nyi+nyy, parts[i].ctype);
- if (nr!=-1) {
- parts[nr].dcolour = colored;
- parts[nr].temp = parts[i].temp;
- if(!--partsRemaining)
- docontinue = 0;
+ {
+ if (parts[i].ctype == PT_LIFE)
+ nr = sim->create_part(-1, x+nxi+nxx, y+nyi+nyy, parts[i].ctype|(parts[i].tmp2<<8));
+ else
+ nr = sim->create_part(-1, x+nxi+nxx, y+nyi+nyy, parts[i].ctype);
+ if (nr!=-1) {
+ parts[nr].dcolour = colored;
+ parts[nr].temp = parts[i].temp;
+ if(!--partsRemaining)
+ docontinue = 0;
+ }
}
} else if ((r&0xFF)==PT_FILT) { // get color if passed through FILT
colored = wavelengthToDecoColour(Element_FILT::getWavelengths(&parts[r>>8]));