1 #include "simulation/ElementCommon.h" 2 3 static int update(UPDATE_FUNC_ARGS); 4 static int graphics(GRAPHICS_FUNC_ARGS); 5 Element_GPMP()6void 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)52static 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)87static 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