diff --git a/LEGO1/lego/legoomni/include/gasstation.h b/LEGO1/lego/legoomni/include/gasstation.h index 812ccc00..d2b133b5 100644 --- a/LEGO1/lego/legoomni/include/gasstation.h +++ b/LEGO1/lego/legoomni/include/gasstation.h @@ -3,12 +3,12 @@ #include "decomp.h" #include "gasstationstate.h" +#include "legogamestate.h" #include "legoworld.h" #include "radio.h" // VTABLE: LEGO1 0x100d4650 // SIZE 0x128 -// Radio variable at 0x46, in constructor class GasStation : public LegoWorld { public: GasStation(); @@ -30,28 +30,33 @@ class GasStation : public LegoWorld { return !strcmp(p_name, GasStation::ClassName()) || LegoWorld::IsA(p_name); } - MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 - void ReadyWorld() override; // vtable+0x50 - MxBool VTable0x5c() override; // vtable+0x5c - MxBool VTable0x64() override; // vtable+0x64 - void Enable(MxBool p_enable) override; // vtable+0x68 + MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + void ReadyWorld() override; // vtable+0x50 + MxBool VTable0x5c() override; // vtable+0x5c + MxBool VTable0x64() override; // vtable+0x64 + void Enable(MxBool p_enable) override; // vtable+0x68 + virtual MxLong HandleClick(LegoControlManagerEvent& p_param); // vtable+0x6c // SYNTHETIC: LEGO1 0x100048a0 // GasStation::`scalar deleting destructor' private: - undefined2 m_unk0xf8; // 0xf8 - undefined2 m_unk0xfa; // 0xfa - undefined4 m_unk0xfc; // 0xfc - GasStationState* m_state; // 0x100 - undefined2 m_unk0x104; // 0x104 - undefined2 m_unk0x106; // 0x106 - undefined4 m_unk0x108; // 0x108 - undefined4 m_unk0x10c; // 0x10c - undefined4 m_unk0x110; // 0x110 - undefined m_unk0x114; // 0x114 - undefined m_unk0x115; // 0x115 - Radio m_radio; // 0x118 + MxLong HandleEndAction(MxEndActionNotificationParam& p_param); + MxLong HandleKeyPress(MxS8 p_key); + MxLong HandleButtonDown(LegoControlManagerEvent& p_param); + + undefined2 m_unk0xf8; // 0xf8 + undefined2 m_unk0xfa; // 0xfa + LegoGameState::Area m_transitionDestination; // 0xfc + GasStationState* m_state; // 0x100 + undefined2 m_unk0x104; // 0x104 + undefined2 m_unk0x106; // 0x106 + undefined4 m_unk0x108; // 0x108 + undefined4 m_unk0x10c; // 0x10c + undefined4 m_unk0x110; // 0x110 + undefined m_unk0x114; // 0x114 + undefined m_unk0x115; // 0x115 + Radio m_radio; // 0x118 }; #endif // GASSTATION_H diff --git a/LEGO1/lego/legoomni/src/gasstation/gasstation.cpp b/LEGO1/lego/legoomni/src/gasstation/gasstation.cpp index 6db4bd8b..1b938bcf 100644 --- a/LEGO1/lego/legoomni/src/gasstation/gasstation.cpp +++ b/LEGO1/lego/legoomni/src/gasstation/gasstation.cpp @@ -15,7 +15,7 @@ GasStation::GasStation() { m_unk0xf8 = 0; m_state = NULL; - m_unk0xfc = 0; + m_transitionDestination = LegoGameState::e_noArea; m_unk0x108 = 0; m_unk0x104 = 0; m_unk0x114 = 0; @@ -81,12 +81,33 @@ MxResult GasStation::Create(MxDSAction& p_dsAction) return result; } -// STUB: LEGO1 0x10004a60 +// FUNCTION: LEGO1 0x10004a60 MxLong GasStation::Notify(MxParam& p_param) { - // TODO + MxResult result = 0; + LegoWorld::Notify(p_param); - return 0; + if (m_worldStarted) { + switch (((MxNotificationParam&) p_param).GetNotification()) { + case c_notificationEndAction: + result = HandleEndAction((MxEndActionNotificationParam&) p_param); + break; + case c_notificationKeyPress: + result = HandleKeyPress((((LegoEventNotificationParam&) p_param)).GetKey()); + break; + case c_notificationButtonDown: + result = HandleButtonDown(((LegoControlManagerEvent&) p_param)); + break; + case c_notificationClick: + result = HandleClick((LegoControlManagerEvent&) p_param); + break; + case c_notificationTransitioned: + GameState()->SwitchArea(m_transitionDestination); + break; + } + } + + return result; } // STUB: LEGO1 0x10004b30 @@ -95,6 +116,34 @@ void GasStation::ReadyWorld() // TODO } +// STUB: LEGO1 0x10005660 +MxLong GasStation::HandleEndAction(MxEndActionNotificationParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10005920 +MxLong GasStation::HandleKeyPress(MxS8 p_key) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10005960 +MxLong GasStation::HandleButtonDown(LegoControlManagerEvent& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10005b20 +MxLong GasStation::HandleClick(LegoControlManagerEvent& p_param) +{ + // TODO + return 0; +} + // FUNCTION: LEGO1 0x10005c40 void GasStation::Enable(MxBool p_enable) { @@ -116,7 +165,7 @@ MxResult GasStation::Tickle() { // TODO - return 0; + return SUCCESS; } // STUB: LEGO1 0x10005e70