isle-portable/LEGO1/lego/legoomni/src/actors/pizzeria.cpp
Christian Semmler 419bc2a44e
Updates from isledecomp/isle (#23)
* Fix remaining vtordisp issues (#1016)

* Fix LegoRaceActor

* Fix LegoRaceMap

* Fix LegoCarRaceActor

* Fix LegoJetskiRaceActor

* Fix LegoJetski

* Fix LegoRaceCar

* Downgrade orig addr unique message to debug

* Implement/match Ambulance::HandleEndAction (#1018)

* Implement/match Ambulance::HandleClick (#1019)

* Implement/match Ambulance::HandleClick

* Remove junk

* Add Ambulance::FUN_10036e60

* Implement/match Ambulance::Tickle (#1021)

* Match LegoMeterPresenter::ParseExtra (#1022)

* Match LegoMeterPresenter::ParseExtra

* Add LegoMeterPresenter to factory

* Add call to parent

* Add missing TODO

* Implement/match Ambulance::ActivateSceneActions (#1023)

* Fix CaveEntity class (#1024)

* Fix CaveEntity class

* Rename function

* Implement/match JailEntity::HandleClick and CaveEntity::HandleClick (#1025)

* Implement/match JailEntity::HandleClick and CaveEntity::HandleClick

* Fix

* Add remaining classes, implement/match LegoObjectFactory (#1026)

* Add missing classes

* Match LegoObjectFactory

* Remove semicolon

* Add symbol

* Fix

* Implement/match Ambulance::VTable0x70 (#1027)

* Implement/match Ambulance::HandleButtonDown (#1028)

* Implement/match Ambulance::HandlePathStruct (#1029)

* Implement/match Ambulance::HandlePathStruct

* Add annotation

* Implement/match remaining Ambulance functions (#1030)

* Fix camera glitch (#1031)

* Implement LegoAnimScene::FUN_1009f490 (#1032)

* Implement LegoAnimScene::FUN_1009f490

* Update legoanim.cpp

* Update legoanim.cpp

* Update legoanim.cpp

* Bugfix for LegoMeterPresenter::DrawMeter (#1033)

* feat: Implement several ::Serialize functions (#1017)

* feat: Implement many ::Serialize functions

* address review comments, part 1 [skip ci]

* address review comments, part 2 [skip ci]

* review comments (final part)

* refactor: Remove Read/Write duplication

* fix merge conflict

* Match PizzeriaState::Serialize again

* Remove unused variable, add LegoVehicleBuildState::Serialize

* Implement AnimState::Serialize

* fix: Conform with naming scheme

* refactor: change names back

* refactor: int to MxS32

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>

---------

Co-authored-by: MS <disinvite@users.noreply.github.com>
Co-authored-by: jonschz <17198703+jonschz@users.noreply.github.com>
Co-authored-by: jonschz <jonschz@users.noreply.github.com>
2024-06-16 15:15:03 +02:00

98 lines
2.2 KiB
C++

#include "pizzeria.h"
#include "isle_actions.h"
#include "islepathactor.h"
#include "legoanimationmanager.h"
#include "legogamestate.h"
#include "legopathactor.h"
#include "legoutils.h"
#include "legoworld.h"
#include "misc.h"
#include "pizza.h"
#include "scripts.h"
DECOMP_SIZE_ASSERT(Pizzeria, 0x84)
DECOMP_SIZE_ASSERT(PizzeriaState, 0x58)
DECOMP_SIZE_ASSERT(PizzeriaState::StateStruct, 0x14)
// FUNCTION: LEGO1 0x100179c0
MxResult Pizzeria::Create(MxDSAction& p_dsAction)
{
MxResult result = IsleActor::Create(p_dsAction);
if (result == SUCCESS) {
CreateState();
}
return result;
}
// FUNCTION: LEGO1 0x100179f0
void Pizzeria::CreateState()
{
LegoGameState* gameState = GameState();
PizzeriaState* pizzeriaState = (PizzeriaState*) gameState->GetState("PizzeriaState");
if (pizzeriaState == NULL) {
pizzeriaState = (PizzeriaState*) gameState->CreateState("PizzeriaState");
}
m_pizzeriaState = pizzeriaState;
gameState = GameState();
PizzaMissionState* pizzaMissionState = (PizzaMissionState*) gameState->GetState("PizzaMissionState");
if (pizzaMissionState == NULL) {
pizzaMissionState = (PizzaMissionState*) gameState->CreateState("PizzaMissionState");
}
m_pizzaMissionState = pizzaMissionState;
}
// FUNCTION: LEGO1 0x10017a50
undefined4 Pizzeria::HandleClick()
{
if (FUN_1003ef60() && m_pizzaMissionState->m_unk0x0c == 0) {
if (UserActor()->GetActorId() != GameState()->GetActorId()) {
if (!UserActor()->IsA("SkateBoard")) {
((IslePathActor*) UserActor())->Exit();
}
}
AnimationManager()->FUN_10061010(FALSE);
Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor);
pizza->FUN_10038220(m_pizzeriaState->FUN_10017d70());
}
return 1;
}
// STUB: LEGO1 0x10017af0
PizzeriaState::PizzeriaState()
{
// TODO
}
// STUB: LEGO1 0x10017d70
MxU32 PizzeriaState::FUN_10017d70()
{
return 0;
}
// FUNCTION: LEGO1 0x10017da0
// FUNCTION: BETA10 0x100efe33
MxResult PizzeriaState::Serialize(LegoFile* p_file)
{
MxResult res = LegoState::Serialize(p_file);
if (p_file->IsReadMode()) {
for (MxS16 i = 0; i < 5; i++) {
m_unk0x08[i].ReadFromFile(p_file);
}
}
else {
for (MxS16 i = 0; i < 5; i++) {
m_unk0x08[i].WriteToFile(p_file);
}
}
return res;
}