1 #include "simulation/ElementCommon.h"
2 
3 static int update(UPDATE_FUNC_ARGS);
4 static int graphics(GRAPHICS_FUNC_ARGS);
5 
Element_GPMP()6 void Element::Element_GPMP()
7 {
8 	Identifier = "DEFAULT_PT_GPMP";
9 	Name = "GPMP";
10 	Colour = PIXPACK(0x0A3B3B);
11 	MenuVisible = 1;
12 	MenuSection = SC_POWERED;
13 	Enabled = 1;
14 
15 	Advection = 0.0f;
16 	AirDrag = 0.00f * CFDS;
17 	AirLoss = 0.90f;
18 	Loss = 0.00f;
19 	Collision = 0.0f;
20 	Gravity = 0.0f;
21 	Diffusion = 0.00f;
22 	HotAir = 0.000f	* CFDS;
23 	Falldown = 0;
24 
25 	Flammable = 0;
26 	Explosive = 0;
27 	Meltable = 0;
28 	Hardness = 1;
29 
30 	Weight = 100;
31 
32 	HeatConduct = 0;
33 	Description = "Gravity pump. Changes gravity to its temp when activated. (use HEAT/COOL)";
34 
35 	Properties = TYPE_SOLID;
36 
37 	LowPressure = IPL;
38 	LowPressureTransition = NT;
39 	HighPressure = IPH;
40 	HighPressureTransition = NT;
41 	LowTemperature = ITL;
42 	LowTemperatureTransition = NT;
43 	HighTemperature = ITH;
44 	HighTemperatureTransition = NT;
45 
46 	DefaultProperties.life = 10;
47 
48 	Update = &update;
49 	Graphics = &graphics;
50 }
51 
update(UPDATE_FUNC_ARGS)52 static int update(UPDATE_FUNC_ARGS)
53 {
54 	int r, rx, ry;
55 	if (parts[i].life!=10)
56 	{
57 		if (parts[i].life>0)
58 			parts[i].life--;
59 	}
60 	else
61 	{
62 		if (parts[i].temp>=256.0+273.15)
63 			parts[i].temp=256.0+273.15;
64 		if (parts[i].temp<= -256.0+273.15)
65 			parts[i].temp = -256.0+273.15;
66 
67 		sim->gravmap[(y/CELL)*(XRES/CELL)+(x/CELL)] = 0.2f*(parts[i].temp-273.15);
68 		for (rx=-2; rx<3; rx++)
69 			for (ry=-2; ry<3; ry++)
70 				if (BOUNDS_CHECK && (rx || ry))
71 				{
72 					r = pmap[y+ry][x+rx];
73 					if (!r)
74 						continue;
75 					if (TYP(r)==PT_GPMP)
76 					{
77 						if (parts[ID(r)].life<10&&parts[ID(r)].life>0)
78 							parts[i].life = 9;
79 						else if (parts[ID(r)].life==0)
80 							parts[ID(r)].life = 10;
81 					}
82 				}
83 	}
84 	return 0;
85 }
86 
graphics(GRAPHICS_FUNC_ARGS)87 static int graphics(GRAPHICS_FUNC_ARGS)
88 {
89 	int lifemod = ((cpart->life>10?10:cpart->life)*19);
90 	*colg += lifemod;
91 	*colb += lifemod;
92 	return 0;
93 }
94