Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ def MatchingFor(*versions):
Object(Equivalent, "SB/Core/x/xstransvc.cpp"),
Object(NonMatching, "SB/Core/x/xString.cpp"),
Object(Matching, "SB/Core/x/xSurface.cpp"),
Object(NonMatching, "SB/Core/x/xTimer.cpp"),
Object(Matching, "SB/Core/x/xTimer.cpp"),
Object(NonMatching, "SB/Core/x/xTRC.cpp"),
Object(Matching, "SB/Core/x/xutil.cpp"),
Object(Matching, "SB/Core/x/xVec3.cpp"),
Expand Down
89 changes: 70 additions & 19 deletions src/SB/Core/x/xTimer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include "xMath.h"

#include <types.h>
#include "zTalkBox.h"
#include "zGlobals.h"

static U32 sPauseTimerHash[] =
{
Expand All @@ -17,7 +19,7 @@ static U32 sPauseTimerHash[] =
0xBC345A9B, 0xBC345AA4,
};

F32 GetRandomizedTime(xTimerAsset* tasset)
static F32 GetRandomizedTime(xTimerAsset* tasset)
{
U32 halfRangeMilli = 1000.0f * tasset->randomRange;
if (halfRangeMilli == 0) {
Expand All @@ -34,23 +36,7 @@ void xTimerInit(void* b, void* tasset)
xTimerInit((xBase*)b, (xTimerAsset*)tasset);
}

void xTimerSave(xTimer* ent, xSerial* s)
{
xBaseSave(ent, s);

s->Write(ent->state);
s->Write(ent->secondsLeft);
}

void xTimerLoad(xTimer* ent, xSerial* s)
{
xBaseLoad(ent, s);

s->Read(&ent->state);
s->Read(&ent->secondsLeft);
}

S32 xTimer_ObjIDIsPauseTimer(U32 id)
static S32 xTimer_ObjIDIsPauseTimer(U32 id)
{
if (id == 0xCB3F6340) return TRUE;
if (id >= 0x016FC9F0 && id <= 0x016FC9F9) return TRUE;
Expand Down Expand Up @@ -95,4 +81,69 @@ void xTimerReset(xTimer* ent)
ent->state = 0;
ent->secondsLeft = GetRandomizedTime(ent->tasset);
ent->flags = 0;
}
}

void xTimerSave(xTimer* ent, xSerial* s)
{
xBaseSave(ent, s);

s->Write(ent->state);
s->Write(ent->secondsLeft);
}

void xTimerLoad(xTimer* ent, xSerial* s)
{
xBaseLoad(ent, s);

s->Read(&ent->state);
s->Read(&ent->secondsLeft);
}

S32 xTimerEventCB(xBase* from, xBase* to, U32 toEvent, const F32* toParam, xBase* toParamWidget)
{
xTimer* t = (xTimer*)to;

switch (toEvent)
{
case eEventRun:
t->state = 1;
break;
case eEventStop:
if (t->state == 1)
{
t->state = 0;
}
break;
case eEventReset:
xTimerReset(t);
break;
case eEventExpired:
t->state = 0;
break;
case eEventTimerSet:
t->secondsLeft = toParam[0];
break;
case eEventTimerAdd:
t->secondsLeft += toParam[0];
break;
}

return 1;
}

void xTimerUpdate(xBase* to, xScene* sc, F32 dt)
{
xTimer* t = (xTimer*)to;

if (t->state != 1)
return;

if ((t->flags & 1) != 0 && globals.player.ControlOff && ztalkbox::get_active() != NULL)
return;

t->secondsLeft -= dt;
if (t->secondsLeft <= 0.0f)
{
zEntEvent(t, t, eEventExpired);
}
}
2 changes: 1 addition & 1 deletion src/SB/Core/x/xTimer.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ void xTimerInit(xBase* b, xTimerAsset* tasset);
void xTimerReset(xTimer* ent);
void xTimerSave(xTimer* ent, xSerial* s);
void xTimerLoad(xTimer* ent, xSerial* s);
S32 xTimerEventCB(xBase*, xBase* to, U32 toEvent, const F32* toParam, xBase*);
S32 xTimerEventCB(xBase* from , xBase* to, U32 toEvent, const F32* toParam, xBase* toParamWidget);
void xTimerUpdate(xBase* to, xScene*, F32 dt);

#endif