summaryrefslogtreecommitdiff
path: root/src/simulation/elements/PSNS.cpp
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2013-05-05 00:28:28 (GMT)
committer jacob1 <jfu614@gmail.com>2013-05-05 00:28:28 (GMT)
commitcb5ca55fc2c7160688bb1ded49dfec2db829fe37 (patch)
treed1246e26243f73165b6a18cbed0cb1fec66b7e4d /src/simulation/elements/PSNS.cpp
parent08f05d69c139caed898877f853973e16a8cc2b7a (diff)
downloadpowder-cb5ca55fc2c7160688bb1ded49dfec2db829fe37.zip
powder-cb5ca55fc2c7160688bb1ded49dfec2db829fe37.tar.gz
New Element: Pressure sensor
Diffstat (limited to 'src/simulation/elements/PSNS.cpp')
-rw-r--r--src/simulation/elements/PSNS.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/simulation/elements/PSNS.cpp b/src/simulation/elements/PSNS.cpp
new file mode 100644
index 0000000..3dffd16
--- /dev/null
+++ b/src/simulation/elements/PSNS.cpp
@@ -0,0 +1,80 @@
+#include "simulation/Elements.h"
+//#TPT-Directive ElementClass Element_PSNS PT_TSNS 172
+Element_PSNS::Element_PSNS()
+{
+ Identifier = "DEFAULT_PT_PSNS";
+ Name = "PSNS";
+ Colour = PIXPACK(0xDB2020);
+ MenuVisible = 1;
+ MenuSection = SC_SENSOR;
+ Enabled = 1;
+
+ Advection = 0.0f;
+ AirDrag = 0.00f * CFDS;
+ AirLoss = 0.96f;
+ Loss = 0.00f;
+ Collision = 0.0f;
+ Gravity = 0.0f;
+ Diffusion = 0.00f;
+ HotAir = 0.000f * CFDS;
+ Falldown = 0;
+
+ Flammable = 0;
+ Explosive = 0;
+ Meltable = 0;
+ Hardness = 1;
+
+ Weight = 100;
+
+ Temperature = 277.15f;
+ HeatConduct = 0;
+ Description = "Pressure sensor, creates spark when the pressure is greater than its temperature.";
+
+ State = ST_SOLID;
+ Properties = TYPE_SOLID;
+
+ LowPressure = IPL;
+ LowPressureTransition = NT;
+ HighPressure = IPH;
+ HighPressureTransition = NT;
+ LowTemperature = ITL;
+ LowTemperatureTransition = NT;
+ HighTemperature = ITH;
+ HighTemperatureTransition = NT;
+
+ Update = &Element_PSNS::update;
+
+}
+
+//#TPT-Directive ElementHeader Element_PSNS static int update(UPDATE_FUNC_ARGS)
+int Element_PSNS::update(UPDATE_FUNC_ARGS)
+{
+ int r, rx, ry, rt;
+ if (sim->pv[y/CELL][x/CELL] > parts[i].temp-273.15f)
+ {
+ parts[i].life = 0;
+ for (rx=-2; rx<3; rx++)
+ for (ry=-2; ry<3; ry++)
+ if (BOUNDS_CHECK && (rx || ry))
+ {
+ r = pmap[y+ry][x+rx];
+ if (!r)
+ continue;
+ rt = r&0xFF;
+ if (sim->parts_avg(i,r>>8,PT_INSL) != PT_INSL)
+ {
+ if ((sim->elements[rt].Properties&PROP_CONDUCTS) && !(rt==PT_WATR||rt==PT_SLTW||rt==PT_NTCT||rt==PT_PTCT||rt==PT_INWR) && parts[r>>8].life==0)
+ {
+ parts[r>>8].life = 4;
+ parts[r>>8].ctype = rt;
+ sim->part_change_type(r>>8,x+rx,y+ry,PT_SPRK);
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+
+
+Element_PSNS::~Element_PSNS() {}