summaryrefslogtreecommitdiff
path: root/src/simulation/elements/FIGH.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/simulation/elements/FIGH.cpp')
-rw-r--r--src/simulation/elements/FIGH.cpp162
1 files changed, 162 insertions, 0 deletions
diff --git a/src/simulation/elements/FIGH.cpp b/src/simulation/elements/FIGH.cpp
new file mode 100644
index 0000000..a28060e
--- /dev/null
+++ b/src/simulation/elements/FIGH.cpp
@@ -0,0 +1,162 @@
+#include "simulation/Elements.h"
+//#TPT-Directive ElementClass Element_FIGH PT_FIGH 158
+Element_FIGH::Element_FIGH()
+{
+ Identifier = "DEFAULT_PT_FIGH";
+ Name = "FIGH";
+ Colour = PIXPACK(0x000000);
+ MenuVisible = 1;
+ MenuSection = SC_SPECIAL;
+ Enabled = 1;
+
+ Advection = 0.5f;
+ AirDrag = 0.00f * CFDS;
+ AirLoss = 0.2f;
+ Loss = 1.0f;
+ Collision = 0.0f;
+ Gravity = 0.0f;
+ Diffusion = 0.0f;
+ HotAir = 0.00f * CFDS;
+ Falldown = 0;
+
+ Flammable = 0;
+ Explosive = 0;
+ Meltable = 0;
+ Hardness = 0;
+
+ Weight = 50;
+
+ Temperature = R_TEMP+14.6f+273.15f;
+ HeatConduct = 0;
+ Description = "Fighter. Tries to kill stickmen.";
+
+ State = ST_NONE;
+ Properties = 0;
+
+ LowPressure = IPL;
+ LowPressureTransition = NT;
+ HighPressure = IPH;
+ HighPressureTransition = NT;
+ LowTemperature = ITL;
+ LowTemperatureTransition = NT;
+ HighTemperature = 620.0f;
+ HighTemperatureTransition = PT_FIRE;
+
+ Update = &Element_FIGH::update;
+ Graphics = &Element_FIGH::graphics;
+}
+
+//#TPT-Directive ElementHeader Element_FIGH static int update(UPDATE_FUNC_ARGS)
+int Element_FIGH::update(UPDATE_FUNC_ARGS)
+
+{
+ playerst* figh = &sim->fighters[(unsigned char)parts[i].tmp];
+
+ unsigned int tarx, tary;
+
+ parts[i].tmp2 = 0; //0 - stay in place, 1 - seek a stick man
+
+ //Set target cords
+ if (sim->player.spwn && sim->player2.spwn)
+ {
+ if ((pow((float)sim->player.legs[2]-x, 2) + pow((float)sim->player.legs[3]-y, 2))<=
+ (pow((float)sim->player2.legs[2]-x, 2) + pow((float)sim->player2.legs[3]-y, 2)))
+ {
+ tarx = (unsigned int)sim->player.legs[2];
+ tary = (unsigned int)sim->player.legs[3];
+ }
+ else
+ {
+ tarx = (unsigned int)sim->player2.legs[2];
+ tary = (unsigned int)sim->player2.legs[3];
+ }
+ parts[i].tmp2 = 1;
+ }
+ else
+ {
+ if (sim->player.spwn)
+ {
+ tarx = (unsigned int)sim->player.legs[2];
+ tary = (unsigned int)sim->player.legs[3];
+ parts[i].tmp2 = 1;
+ }
+ if (sim->player2.spwn)
+ {
+ tarx = (unsigned int)sim->player2.legs[2];
+ tary = (unsigned int)sim->player2.legs[3];
+ parts[i].tmp2 = 1;
+ }
+ }
+
+ switch (parts[i].tmp2)
+ {
+ case 1:
+ if ((pow(float(tarx-x), 2) + pow(float(tary-y), 2))<600)
+ {
+ if (figh->elem == PT_LIGH || figh->elem == PT_NEUT
+ || sim->elements[figh->elem].Properties&(PROP_DEADLY|PROP_RADIOACTIVE)
+ || sim->elements[figh->elem].Temperature>=323 || sim->elements[figh->elem].Temperature<=243)
+ figh->comm = (int)figh->comm | 0x08;
+ }
+ else
+ if (tarx<x)
+ {
+ if(!(sim->eval_move(PT_DUST, figh->legs[4]-10, figh->legs[5]+6, NULL)
+ && sim->eval_move(PT_DUST, figh->legs[4]-10, figh->legs[5]+3, NULL)))
+ figh->comm = 0x01;
+ else
+ figh->comm = 0x02;
+
+ if (!sim->eval_move(PT_DUST, figh->legs[4]-4, figh->legs[5]-1, NULL)
+ || !sim->eval_move(PT_DUST, figh->legs[12]-4, figh->legs[13]-1, NULL)
+ || sim->eval_move(PT_DUST, 2*figh->legs[4]-figh->legs[6], figh->legs[5]+5, NULL))
+ figh->comm = (int)figh->comm | 0x04;
+ }
+ else
+ {
+ if (!(sim->eval_move(PT_DUST, figh->legs[12]+10, figh->legs[13]+6, NULL)
+ && sim->eval_move(PT_DUST, figh->legs[12]+10, figh->legs[13]+3, NULL)))
+ figh->comm = 0x02;
+ else
+ figh->comm = 0x01;
+
+ if (!sim->eval_move(PT_DUST, figh->legs[4]+4, figh->legs[5]-1, NULL)
+ || !sim->eval_move(PT_DUST, figh->legs[4]+4, figh->legs[5]-1, NULL)
+ || sim->eval_move(PT_DUST, 2*figh->legs[12]-figh->legs[14], figh->legs[13]+5, NULL))
+ figh->comm = (int)figh->comm | 0x04;
+ }
+ break;
+ default:
+ figh->comm = 0;
+ break;
+ }
+
+ figh->pcomm = figh->comm;
+
+ Element_STKM::run_stickman(figh, UPDATE_FUNC_SUBCALL_ARGS);
+ return 0;
+}
+
+
+
+//#TPT-Directive ElementHeader Element_FIGH static int graphics(GRAPHICS_FUNC_ARGS)
+int Element_FIGH::graphics(GRAPHICS_FUNC_ARGS)
+
+{
+ playerst * cplayer;// = &sim->fighters[(unsigned char)cpart->tmp];
+ *pixel_mode = PSPEC_STICKMAN;
+ /*if (cplayer->elem<PT_NUM)
+ {
+ *colr = PIXR(sim->elements[cplayer->elem].pcolors);
+ *colg = PIXG(sim->elements[cplayer->elem].pcolors);
+ *colb = PIXB(sim->elements[cplayer->elem].pcolors);
+ }
+ else*/
+ {
+ *colr = *colg = *colb = 255;
+ }
+ return 1;
+}
+
+
+Element_FIGH::~Element_FIGH() {} \ No newline at end of file