#include "simulation/Element.h" int update_GEL(UPDATE_FUNC_ARGS) { int r, rx, ry; for (rx=-2; rx<3; rx++) for (ry=-2; ry<3; ry++) if (x+rx>=0 && y+ry>0 && x+rxkill_part(r>>8); } char gel = 0; if ((r&0xFF)==PT_GEL) gel = 1; //Concentration diffusion if (gel && (parts[r>>8].tmp+1)>8].tmp++; parts[i].tmp--; } if ((r&0xFF)==PT_SPNG && (parts[r>>8].life+1)>8].life++; parts[i].tmp--; } float dx, dy; dx = parts[i].x - parts[r>>8].x; dy = parts[i].y - parts[r>>8].y; //Stickness if ((dx*dx + dy*dy)>1.5 && (gel || !sim->ptypes[r&0xFF].falldown || (fabs(rx)<2 && fabs(ry)<2))) { float per, nd; nd = dx*dx + dy*dy - 0.5; per = 5*(1 - parts[i].tmp/100)*(nd/(dx*dx + dy*dy + nd) - 0.5); if (sim->ptypes[r&0xFF].state==ST_LIQUID) per *= 0.1; dx *= per; dy *= per; parts[i].vx += dx; parts[r>>8].vx -= dx; parts[i].vy += dy; parts[r>>8].vy -= dy; } } return 0; } int graphics_GEL(GRAPHICS_FUNC_ARGS) { int q = cpart->tmp; *colr = q*(32-255)/120+255; *colg = q*(48-186)/120+186; *colb = q*208/120; return 0; }