summaryrefslogtreecommitdiff
path: root/src/simulation/elements/LIGH.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/simulation/elements/LIGH.cpp')
-rw-r--r--src/simulation/elements/LIGH.cpp75
1 files changed, 41 insertions, 34 deletions
diff --git a/src/simulation/elements/LIGH.cpp b/src/simulation/elements/LIGH.cpp
index 23f815a..2e64bb2 100644
--- a/src/simulation/elements/LIGH.cpp
+++ b/src/simulation/elements/LIGH.cpp
@@ -99,43 +99,49 @@ int Element_LIGH::update(UPDATE_FUNC_ARGS)
if (sim->elements[rt].Explosive)
sim->pv[y/CELL][x/CELL] += 0.25f * CFDS;
}
- if (rt!=PT_LIGH && rt!=PT_TESC)
+ switch (rt)
{
- if (rt!=PT_CLNE&&rt!=PT_THDR&&rt!=PT_DMND&&rt!=PT_FIRE)
+ case PT_LIGH:
+ case PT_TESC:
+ continue;
+ case PT_CLNE:
+ case PT_THDR:
+ case PT_DMND:
+ case PT_FIRE:
+ parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/10, MIN_TEMP, MAX_TEMP);
+ continue;
+ case PT_DEUT:
+ case PT_PLUT:
+ parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful, MIN_TEMP, MAX_TEMP);
+ sim->pv[y/CELL][x/CELL] +=powderful/35;
+ if (!(rand()%3))
{
- if ((sim->elements[r&0xFF].Properties&PROP_CONDUCTS) && parts[r>>8].life==0)
- {
- sim->create_part(r>>8,x+rx,y+ry,PT_SPRK);
- }
- if (rt==PT_DEUT || rt==PT_PLUT) // start nuclear reactions
- {
- parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful, MIN_TEMP, MAX_TEMP);
- sim->pv[y/CELL][x/CELL] +=powderful/35;
- if (!(rand()%3))
- {
- sim->part_change_type(r>>8,x+rx,y+ry,PT_NEUT);
- parts[r>>8].life = rand()%480+480;
- parts[r>>8].vx=rand()%10-5;
- parts[r>>8].vy=rand()%10-5;
- }
- }
- else if (rt==PT_COAL || rt==PT_BCOL) // ignite coal
- {
- if (parts[r>>8].life>100) {
- parts[r>>8].life = 99;
- }
- }
- else if ((rt==PT_STKM && sim->player.elem!=PT_LIGH) || (rt==PT_STKM2 && sim->player2.elem!=PT_LIGH))
- {
- parts[r>>8].life-=powderful/100;
- }
- sim->pv[y/CELL][x/CELL] += powderful/400;
- if (sim->elements[r&0xFF].HeatConduct) parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/1.3, MIN_TEMP, MAX_TEMP);
+ sim->part_change_type(r>>8,x+rx,y+ry,PT_NEUT);
+ parts[r>>8].life = rand()%480+480;
+ parts[r>>8].vx=rand()%10-5;
+ parts[r>>8].vy=rand()%10-5;
}
- else
- parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/10, MIN_TEMP, MAX_TEMP);
-
+ break;
+ case PT_COAL:
+ case PT_BCOL:
+ if (parts[r>>8].life>100)
+ parts[r>>8].life = 99;
+ break;
+ case PT_STKM:
+ if (sim->player.elem!=PT_LIGH)
+ parts[r>>8].life-=powderful/100;
+ break;
+ case PT_STKM2:
+ if (sim->player2.elem!=PT_LIGH)
+ parts[r>>8].life-=powderful/100;
+ break;
+ default:
+ break;
}
+ if ((sim->elements[r&0xFF].Properties&PROP_CONDUCTS) && parts[r>>8].life==0)
+ sim->create_part(r>>8,x+rx,y+ry,PT_SPRK);
+ sim->pv[y/CELL][x/CELL] += powderful/400;
+ if (sim->elements[r&0xFF].HeatConduct) parts[r>>8].temp = restrict_flt(parts[r>>8].temp+powderful/1.3, MIN_TEMP, MAX_TEMP);
}
if (parts[i].tmp2==3)
{
@@ -155,7 +161,7 @@ int Element_LIGH::update(UPDATE_FUNC_ARGS)
return 1;
}
- //Completely broken and laggy function, possible can be fixed later
+ //Completely broken and laggy function, possibly can be fixed later
/*pNear = LIGH_nearest_part(sim, i, parts[i].life*2.5);
if (pNear!=-1)
{
@@ -278,6 +284,7 @@ bool Element_LIGH::create_LIGH(Simulation * sim, int x, int y, int c, int temp,
if ((((r&0xFF)==PT_VOID || ((r&0xFF)==PT_PVOD && sim->parts[r>>8].life >= 10)) && (!sim->parts[r>>8].ctype || (sim->parts[r>>8].ctype==c)!=(sim->parts[r>>8].tmp&1))) || (r&0xFF)==PT_BHOL || (r&0xFF)==PT_NBHL) // VOID, PVOD, VACU, and BHOL eat LIGH here
return true;
}
+ else return true;
return false;
}