Move every-tick logic from propsTick into backgroundable logic in propsTickPlayer where possible

This commit is contained in:
Ryan Dwyer 2022-11-16 19:31:58 +10:00
parent c588072b28
commit bd009f7290
8 changed files with 102 additions and 81 deletions

View File

@ -780,6 +780,14 @@ s32 botTick(struct prop *prop)
updateable = (prop->flags & PROPFLAG_NOTYETTICKED) && g_Vars.lvupdate240;
if (aibot) {
if (updateable && aibot->unk058 > 0) {
if (aibot->unk058 > g_Vars.lvupdate60) {
aibot->unk058 -= g_Vars.lvupdate60;
} else {
aibot->unk058 = 0;
}
}
if (updateable && g_Vars.lvframe60 >= 145) {
botTickUnpaused(chr);

View File

@ -2071,14 +2071,6 @@ bool chrTickBeams(struct prop *prop)
beamTick(&g_Fireslots[chr->fireslots[1]].beam);
}
if (chr->aibot && chr->aibot->unk058 > 0) {
if (chr->aibot->unk058 > g_Vars.lvupdate60) {
chr->aibot->unk058 -= g_Vars.lvupdate60;
} else {
chr->aibot->unk058 = 0;
}
}
return false;
}

View File

@ -1189,17 +1189,31 @@ u32 explosionTick(struct prop *prop)
u32 explosionTickPlayer(struct prop *prop)
{
Mtxf *matrix = camGetWorldToScreenMtxf();
s32 tickop;
prop->z = -(matrix->m[0][2] * prop->pos.x + matrix->m[1][2] * prop->pos.y + matrix->m[2][2] * prop->pos.z + matrix->m[3][2]);
if (prop->flags & PROPFLAG_NOTYETTICKED) {
prop->flags &= ~PROPFLAG_NOTYETTICKED;
if (prop->z < 100) {
prop->z *= 0.5f;
} else {
prop->z -= 100;
tickop = explosionTick(prop);
if (tickop == TICKOP_FREE) {
return tickop;
}
}
prop->flags |= PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONTHISSCREENTHISTICK;
{
Mtxf *matrix = camGetWorldToScreenMtxf();
prop->z = -(matrix->m[0][2] * prop->pos.x + matrix->m[1][2] * prop->pos.y + matrix->m[2][2] * prop->pos.z + matrix->m[3][2]);
if (prop->z < 100) {
prop->z *= 0.5f;
} else {
prop->z -= 100;
}
prop->flags |= PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONTHISSCREENTHISTICK;
}
return TICKOP_NONE;
}

View File

@ -1775,6 +1775,10 @@ void propsTickPlayer(bool islastplayer)
splatTickChr(prop);
if (prop->flags & PROPFLAG_NOTYETTICKED) {
chrTickBeams(prop);
}
if (chr1 && chr1->aibot) {
op = botTick(prop);
} else {
@ -1792,6 +1796,10 @@ void propsTickPlayer(bool islastplayer)
} else if (prop->type == PROPTYPE_SMOKE) {
op = smokeTickPlayer(prop);
} else if (prop->type == PROPTYPE_PLAYER) {
if (prop->flags & PROPFLAG_NOTYETTICKED) {
playerTickBeams(prop);
}
splatTickChr(prop);
op = playerTickThirdPerson(prop);
}
@ -1837,6 +1845,10 @@ void propsTickPlayer(bool islastplayer)
splatTickChr(prop);
if (prop->flags & PROPFLAG_NOTYETTICKED) {
chrTickBeams(prop);
}
if (chr2 && chr2->aibot) {
op = botTick(prop);
} else {
@ -1863,6 +1875,10 @@ void propsTickPlayer(bool islastplayer)
} else if (prop->type == PROPTYPE_SMOKE) {
op = smokeTickPlayer(prop);
} else if (prop->type == PROPTYPE_PLAYER) {
if (prop->flags & PROPFLAG_NOTYETTICKED) {
playerTickBeams(prop);
}
splatTickChr(prop);
op = playerTickThirdPerson(prop);
}

View File

@ -10017,7 +10017,7 @@ void objInitMatrices(struct prop *prop)
}
}
u32 objTick(struct prop *prop)
void objTick(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
bool silent = false;
@ -10093,23 +10093,6 @@ u32 objTick(struct prop *prop)
}
}
}
if (obj->type == OBJTYPE_AUTOGUN) {
struct autogunobj *autogun = (struct autogunobj *)prop->obj;
if (autogun->beam) {
beamTick(autogun->beam);
}
} else if (obj->type == OBJTYPE_CHOPPER) {
struct chopperobj *chopper = (struct chopperobj *)prop->obj;
beamTick(chopper->fireslotthing->beam);
} else if (obj->type == OBJTYPE_LIFT) {
liftTick(prop);
} else if (obj->type == OBJTYPE_ESCASTEP) {
escastepTick(prop);
}
return TICKOP_NONE;
}
/**
@ -10176,6 +10159,19 @@ s32 objTickPlayer(struct prop *prop)
prop->flags &= ~PROPFLAG_NOTYETTICKED;
}
if (fulltick) {
if (obj->type == OBJTYPE_AUTOGUN) {
struct autogunobj *autogun = (struct autogunobj *)prop->obj;
if (autogun->beam) {
beamTick(autogun->beam);
}
} else if (obj->type == OBJTYPE_CHOPPER) {
struct chopperobj *chopper = (struct chopperobj *)prop->obj;
beamTick(chopper->fireslotthing->beam);
}
}
if (obj->hidden & OBJHFLAG_PROJECTILE) {
struct projectile *projectile = obj->projectile;

View File

@ -49,10 +49,6 @@ void propsTick(void)
{
s32 i;
struct prop *prop;
struct prop *next;
struct prop *next2;
s32 done;
s32 tickop;
for (i = 0; i < PLAYERCOUNT(); i++) {
g_Vars.players[i]->bondextrapos.x = 0;
@ -63,44 +59,29 @@ void propsTick(void)
shieldhitsTick();
chraTickBg();
prop = g_Vars.activeprops;
for (i = 0; g_Lifts[i] != NULL; i++) {
liftTick(g_Lifts[i]);
}
do {
next = prop->next;
done = next == g_Vars.pausedprops;
tickop = TICKOP_NONE;
if (g_Vars.stagenum == STAGE_AIRBASE) {
prop = g_Vars.activeprops;
if (prop->type == PROPTYPE_CHR) {
tickop = chrTickBeams(prop);
} else if (prop->type & (PROPTYPE_OBJ | PROPTYPE_WEAPON | PROPTYPE_DOOR)) {
tickop = objTick(prop);
} else if (prop->type == PROPTYPE_EXPLOSION) {
tickop = explosionTick(prop);
} else if (prop->type == PROPTYPE_SMOKE) {
tickop = smokeTick(prop);
} else if (prop->type == PROPTYPE_PLAYER) {
tickop = playerTickBeams(prop);
}
if (tickop == TICKOP_CHANGEDLIST) {
next2 = next;
} else {
next2 = prop->next;
done = next2 == g_Vars.pausedprops;
if (tickop == TICKOP_RETICK) {
propDelist(prop);
propActivateThisFrame(prop);
if (done) {
next2 = prop;
done = false;
}
} else {
propExecuteTickOperation(prop, tickop);
do {
if (prop->type == PROPTYPE_OBJ && prop->obj->type == OBJTYPE_ESCASTEP) {
escastepTick(prop);
}
}
prop = next2;
} while (!done);
prop = prop->next;
} while (prop != g_Vars.pausedprops);
} else if (g_Vars.normmplayerisrunning) {
prop = g_Vars.activeprops;
do {
if (prop->type & (PROPTYPE_OBJ | PROPTYPE_WEAPON)) {
objTick(prop);
}
prop = prop->next;
} while (prop != g_Vars.pausedprops);
}
}

View File

@ -580,17 +580,31 @@ u32 smokeTick(struct prop *prop)
u32 smokeTickPlayer(struct prop *prop)
{
Mtxf *matrix = camGetWorldToScreenMtxf();
s32 tickop;
prop->z = -(matrix->m[0][2] * prop->pos.x + matrix->m[1][2] * prop->pos.y + matrix->m[2][2] * prop->pos.z + matrix->m[3][2]);
if (prop->flags & PROPFLAG_NOTYETTICKED) {
prop->flags &= ~PROPFLAG_NOTYETTICKED;
if (prop->z < 100) {
prop->z *= 0.5f;
} else {
prop->z -= 100;
tickop = smokeTick(prop);
if (tickop == TICKOP_FREE) {
return tickop;
}
}
prop->flags |= PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONTHISSCREENTHISTICK;
{
Mtxf *matrix = camGetWorldToScreenMtxf();
prop->z = -(matrix->m[0][2] * prop->pos.x + matrix->m[1][2] * prop->pos.y + matrix->m[2][2] * prop->pos.z + matrix->m[3][2]);
if (prop->z < 100) {
prop->z *= 0.5f;
} else {
prop->z -= 100;
}
prop->flags |= PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONTHISSCREENTHISTICK;
}
return TICKOP_NONE;
}

View File

@ -197,7 +197,7 @@ void weaponInitMatrices(struct prop *weapon);
void hangingmonitorInitMatrices(struct prop *hangingmonitors);
void objInitMatrices(struct prop *prop);
bool propCanRegen(struct prop *prop);
u32 objTick(struct prop *prop);
void objTick(struct prop *prop);
s32 objTickPlayer(struct prop *prop);
Gfx *propsRenderBeams(Gfx *gdl);
void tvscreenSetCmdlist(struct tvscreen *screen, u32 *cmdlist);