From 17398dd20146df9a6ccadfa9447ac547fd364014 Mon Sep 17 00:00:00 2001 From: SopaXorzTaker Date: Thu, 30 Jun 2016 19:06:02 +0300 Subject: [PATCH] RPEL's ctype sets the element it repels --- src/simulation/Simulation.cpp | 6 ++++-- src/simulation/elements/RPEL.cpp | 10 ++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 044bad4730..0e3d019326 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -2847,6 +2847,8 @@ int Simulation::create_part(int p, int x, int y, int t, int v) { //If an element has the PROP_DRAWONCTYPE property, and the element being drawn to it does not have PROP_NOCTYPEDRAW (Also some special cases), set the element's ctype int drawOn = pmap[y][x]&0xFF; + if (drawOn == t) + return -1; if (((elements[drawOn].Properties & PROP_DRAWONCTYPE) || (drawOn == PT_STOR && !(elements[t].Properties & TYPE_SOLID)) || (drawOn == PT_PCLN && t != PT_PSCN && t != PT_NSCN) || @@ -2862,7 +2864,7 @@ int Simulation::create_part(int p, int x, int y, int t, int v) parts[pmap[y][x]>>8].tmp = v; } } - else if ((drawOn == PT_DTEC || (drawOn == PT_PSTN && t != PT_FRME) || drawOn == PT_DRAY) && drawOn != t) + else if (drawOn == PT_DTEC || (drawOn == PT_PSTN && t != PT_FRME) || drawOn == PT_DRAY) { parts[pmap[y][x]>>8].ctype = t; if (t == PT_LIFE && v >= 0 && v < NGOL) @@ -2873,7 +2875,7 @@ int Simulation::create_part(int p, int x, int y, int t, int v) parts[pmap[y][x]>>8].ctype |= v<<8; } } - else if (drawOn == PT_CRAY && drawOn != t) + else if (drawOn == PT_CRAY) { parts[pmap[y][x]>>8].ctype = t; if (t == PT_LIFE && v >= 0 && v < NGOL) diff --git a/src/simulation/elements/RPEL.cpp b/src/simulation/elements/RPEL.cpp index 2cd5bb379b..001939f78e 100644 --- a/src/simulation/elements/RPEL.cpp +++ b/src/simulation/elements/RPEL.cpp @@ -30,7 +30,7 @@ Element_RPEL::Element_RPEL() HeatConduct = 0; Description = "Repels or attracts particles based on its temperature."; - Properties = TYPE_SOLID; + Properties = TYPE_SOLID | PROP_DRAWONCTYPE; LowPressure = IPL; LowPressureTransition = NT; @@ -58,9 +58,11 @@ int Element_RPEL::update(UPDATE_FUNC_ARGS) if (!r) r = sim->photons[y+ry][x+rx]; - if (r && !(sim->elements[r&0xFF].Properties & TYPE_SOLID)){ - parts[r>>8].vx += isign(rx)*((parts[i].temp-273.15)/10.0f); - parts[r>>8].vy += isign(ry)*((parts[i].temp-273.15)/10.0f); + if (r && !(sim->elements[r&0xFF].Properties & TYPE_SOLID)) { + if (!parts[i].ctype || parts[i].ctype == parts[r>>8].type) { + parts[r>>8].vx += isign(rx)*((parts[i].temp-273.15)/10.0f); + parts[r>>8].vy += isign(ry)*((parts[i].temp-273.15)/10.0f); + } } } }