PoliceState: Create script enum + implement FUN_1005ea40 (#564)

* PoliceState: Create script enum + implement FUN_1005ea40

* Clean up code

* Match

* Match

* Fix type

* Fix error

* Remove return

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
Joshua Peisach
2024-02-15 11:22:58 -05:00
committed by GitHub
parent 8aa9d9a8b3
commit 91643d59ba
5 changed files with 59 additions and 10 deletions

View File

@@ -1,5 +1,11 @@
#include "policestate.h"
#include "islepathactor.h"
#include "legoomni.h"
#include "mxdsaction.h"
#include "mxomni.h"
#include "police.h"
#include <stdlib.h>
DECOMP_SIZE_ASSERT(PoliceState, 0x10)
@@ -8,7 +14,7 @@ DECOMP_SIZE_ASSERT(PoliceState, 0x10)
PoliceState::PoliceState()
{
m_unk0x0c = 0;
m_unk0x08 = (rand() % 2 == 0) ? 501 : 500;
m_policeScript = (rand() % 2 == 0) ? Police::PoliceScript::c_lauraAnim : Police::PoliceScript::c_nickAnim;
}
// FUNCTION: LEGO1 0x1005e990
@@ -19,12 +25,46 @@ MxResult PoliceState::VTable0x1c(LegoFile* p_legoFile)
}
if (p_legoFile->IsReadMode()) {
p_legoFile->Read(&m_unk0x08, sizeof(m_unk0x08));
p_legoFile->Read(&m_policeScript, sizeof(m_policeScript));
}
else {
undefined4 unk0x08 = m_unk0x08;
p_legoFile->Write(&unk0x08, sizeof(m_unk0x08));
Police::PoliceScript policeScript = m_policeScript;
p_legoFile->Write(&policeScript, sizeof(m_policeScript));
}
return SUCCESS;
}
// FUNCTION: LEGO1 0x1005ea40
void PoliceState::FUN_1005ea40()
{
Police::PoliceScript policeScript;
if (m_unk0x0c == 1) {
return;
}
switch (CurrentVehicle()->VTable0x60()) {
case 4:
policeScript = Police::PoliceScript::c_lauraAnim;
m_policeScript = policeScript;
break;
case 5:
policeScript = Police::PoliceScript::c_nickAnim;
m_policeScript = policeScript;
break;
default:
policeScript = m_policeScript;
m_policeScript = policeScript == Police::PoliceScript::c_lauraAnim ? Police::PoliceScript::c_nickAnim
: Police::PoliceScript::c_lauraAnim;
}
{
MxDSAction action;
action.SetObjectId(policeScript);
action.SetAtomId(*g_policeScript);
Start(&action);
}
m_unk0x0c = 1;
}