Isle
Loading...
Searching...
No Matches
elevatorbottom.cpp
Go to the documentation of this file.
1#include "elevatorbottom.h"
2
3#include "elevbott_actions.h"
4#include "isle.h"
5#include "jukebox.h"
6#include "jukebox_actions.h"
8#include "legogamestate.h"
9#include "legoinputmanager.h"
10#include "legomain.h"
11#include "legovariables.h"
12#include "misc.h"
13#include "mxmisc.h"
15#include "mxtransitionmanager.h"
16#include "mxvariabletable.h"
17
19
20// FUNCTION: LEGO1 0x10017e90
22{
24 m_destLocation = LegoGameState::e_undefined;
25}
26
27// FUNCTION: LEGO1 0x10018060
29{
30 if (InputManager()->GetWorld() == this) {
32 }
35}
36
37// FUNCTION: LEGO1 0x100180f0
39{
40 MxResult result = LegoWorld::Create(p_dsAction);
41 if (result == SUCCESS) {
42 InputManager()->SetWorld(this);
43 ControlManager()->Register(this);
44 }
45
47
50
51 return result;
52}
53
54// FUNCTION: LEGO1 0x10018150
55// FUNCTION: BETA10 0x10027d60
57{
58 MxNotificationParam& param = (MxNotificationParam&) p_param;
59 MxLong ret = 0;
60 LegoWorld::Notify(p_param);
61
62 if (m_worldStarted) {
63 switch (param.GetNotification()) {
65 ret = HandleControl((LegoControlManagerNotificationParam&) p_param);
66 break;
68 assert(m_destLocation != LegoGameState::e_undefined);
69 GameState()->SwitchArea(m_destLocation);
70 break;
71 }
72 }
73
74 return ret;
75}
76
77// FUNCTION: LEGO1 0x100181b0
79{
83}
84
85// FUNCTION: LEGO1 0x100181d0
86MxLong ElevatorBottom::HandleControl(LegoControlManagerNotificationParam& p_param)
87{
88 MxLong result = 0;
89
90 if (p_param.m_unk0x28 == 1) {
91 switch (p_param.m_clickedObjectId) {
93 m_destLocation = LegoGameState::e_infodoor;
95 result = 1;
96 break;
98 m_destLocation = LegoGameState::e_infomain;
100 result = 1;
101 break;
103 LegoGameState* gs = GameState();
104 Act1State* state = (Act1State*) gs->GetState("Act1State");
105
106 if (state == NULL) {
107 state = (Act1State*) gs->CreateState("Act1State");
108 }
109
111 m_destLocation = LegoGameState::e_elevride;
114 result = 1;
115 break;
116 }
117 }
118
119 return result;
120}
121
122// FUNCTION: LEGO1 0x100182c0
124{
125 LegoWorld::Enable(p_enable);
126
127 if (p_enable) {
128 InputManager()->SetWorld(this);
130 }
131 else {
132 if (InputManager()->GetWorld() == this) {
134 }
135 }
136}
137
138// FUNCTION: LEGO1 0x10018310
140{
142 m_destLocation = LegoGameState::e_infomain;
143 return TRUE;
144}
[AI] Holds state and transient gameplay data for the first act on Lego Island.
Definition: isle.h:29
void SetElevatorFloor(ElevatorFloor p_elevFloor)
[AI] Sets the current elevator floor the player is on.
Definition: isle.h:80
@ c_floor1
[AI] 1st floor
Definition: isle.h:33
[AI] This class represents the "Elevator Bottom" area in the LEGO Island game.
MxLong Notify(MxParam &p_param) override
[AI] Handles notifications received while this world is active, such as control interactions and tran...
void Enable(MxBool p_enable) override
[AI] Enables or disables the world, updating input manager links and world activation state.
~ElevatorBottom() override
[AI] Destroys the ElevatorBottom object, unregistering it from input, control, and notification manag...
MxBool Escape() override
[AI] Handles the user's "escape" action (such as pressing ESC), transitioning out of this area,...
void ReadyWorld() override
[AI] Prepares the world for activation (e.g., starts music, disables input/3D as needed)....
MxResult Create(MxDSAction &p_dsAction) override
[AI] Initializes the world with a given action, registers input/world, and sets initial area state.
[AI] Notification parameter for the LegoControlManager, used to propagate information about control e...
MxS32 m_clickedObjectId
[AI] Object ID of the clicked control/presenter (or -1 if not set). [AI]
MxS16 m_unk0x28
[AI] Undetermined; settable via SetUnknown0x28. [AI]
void Register(MxCore *p_listener)
[AI] Adds a listener to be notified of control events.
void Unregister(MxCore *p_listener)
[AI] Removes a listener so it no longer receives control events.
Comprehensive persistent game state manager: handles save/load, player selection, area switching,...
Definition: legogamestate.h:78
void SwitchArea(Area p_area)
Switches the whole game state into a new area/world; manages transitions/scene loads.
Area m_currentArea
Area/world the player is presently in. [AI].
LegoState * CreateState(const char *p_stateName)
Creates an instance of given state, registers it, and returns pointer.
void StopArea(Area p_area)
Calls cleanup logic for the specified area (removes actors, VMs, closes handles, etc....
LegoState * GetState(const char *p_stateName)
Find an existing state (LegoState-derived) object by its registered script/class name.
@ e_infomain
Information Center, main screen. [AI].
Definition: legogamestate.h:96
@ e_previousArea
Alias: go to previous area. [AI].
Definition: legogamestate.h:94
@ e_undefined
Undefined or unset area. [AI].
Definition: legogamestate.h:93
@ e_elevride
Elevator ride/cab up (animated). [AI].
@ e_elevbott
Elevator bottom. [AI].
Definition: legogamestate.h:99
@ e_infodoor
Info Center door/title view. [AI].
Definition: legogamestate.h:97
void ClearWorld()
[AI] Remove any world assignment (used to clear targeting/scene changes). [AI]
void SetWorld(LegoWorld *p_world)
[AI] Assigns the current world to receive mouse/click/pick notifications.
@ c_clearScreen
[AI] When set, clears the display surface. [AI]
Definition: legomain.h:49
@ c_disable3d
[AI] When set, disables 3D rendering. [AI]
Definition: legomain.h:48
@ c_disableInput
[AI] When set, disables input processing. [AI]
Definition: legomain.h:47
virtual void ReadyWorld()
Called when the world is ready to be used—typically for custom scene setup after startup.
Definition: legoworld.cpp:874
virtual void Enable(MxBool p_enable)
Enables or disables (pauses) the world and its main components.
Definition: legoworld.cpp:684
MxBool m_worldStarted
Indicates if the world has successfully started and is considered active.
Definition: legoworld.h:388
MxLong Notify(MxParam &p_param) override
Notification callback responding to registered events such as EndAction and NewPresenter.
Definition: legoworld.cpp:212
MxResult Create(MxDSAction &p_dsAction) override
Initializes the world using an action, creating entity and sound lists, and camera controller.
Definition: legoworld.cpp:58
[AI] Represents an action deserialized from SI chunks, holding key animation or script parameters suc...
Definition: mxdsaction.h:17
MxAtomId m_atomId
The AtomId associated with this entity, used for resource and script identification.
Definition: mxentity.h:124
void Unregister(MxCore *p_listener)
[AI] Removes a previously registered listener and flushes any pending notifications for it.
void Register(MxCore *p_listener)
[AI] Registers a listener object to receive notifications.
[AI] Parameter object representing a single notification or event, carrying an identifier and sender ...
NotificationId GetNotification() const
[AI] Retrieves the current notification type of this parameter.
[AI] MxParam serves as a polymorphic base class for parameter passing in event and notification syste...
Definition: mxparam.h:7
MxResult StartTransition(TransitionType p_animationType, MxS32 p_speed, MxBool p_doCopy, MxBool p_playMusicInAnim)
[AI] Begins a new transition animation of type p_animationType at the specified speed,...
@ e_mosaic
[AI] Complex mosaic block-out effect.
void SetVariable(const char *p_key, const char *p_value)
Sets a variable by key and value, replacing or updating if it exists.
#define TRUE
Definition: d3drmdef.h:28
#define FALSE
Definition: d3drmdef.h:27
#define DECOMP_SIZE_ASSERT(T, S)
Definition: decomp.h:19
[AI] Contains enumeration of script actions for ElevbottScript.
#define NULL
[AI] Null pointer value (C/C++ semantics).
Definition: legotypes.h:26
#define SUCCESS
[AI] Used to indicate a successful operation in result codes.
Definition: legotypes.h:30
const char * g_varCAMERALOCATION
[AI] Global variable key for the camera location.
LegoGameState * GameState()
[AI] Accessor for the game's central game state controller. [AI]
Definition: misc.cpp:61
void DeleteObjects(MxAtomId *p_id, MxS32 p_first, MxS32 p_last)
[AI] Batch deletes objects, given by atom id, and within the entity id range [p_first,...
Definition: misc.cpp:237
MxTransitionManager * TransitionManager()
[AI] Accessor for the MxTransitionManager, handling level transitions, fades, and world changes....
Definition: misc.cpp:208
LegoControlManager * ControlManager()
[AI] Accessor for the control manager through the input manager; manages higher-level user/game contr...
Definition: misc.cpp:53
void FUN_10015820(MxBool p_disable, MxU16 p_flags)
[AI] Utility for enabling or disabling functionality in LegoOmni based on certain flags.
Definition: misc.cpp:143
void PlayMusic(JukeboxScript::Script p_objectId)
[AI] Starts music playback by scripting the background audio manager to play the music piece referenc...
Definition: misc.cpp:216
void SetIsWorldActive(MxBool p_isWorldActive)
[AI] Toggles whether the world should be considered active (enables/disables camera/user control etc)...
Definition: misc.cpp:228
LegoInputManager * InputManager()
[AI] Accessor for the input manager, which handles keyboard, mouse, and controller input....
Definition: misc.cpp:45
MxVariableTable * VariableTable()
[AI] Returns the variable table used for script variables and global key/value state.
Definition: mxmisc.cpp:73
MxNotificationManager * NotificationManager()
[AI] Returns the notification manager for system-wide state/update notifications.
Definition: mxmisc.cpp:17
@ c_notificationControl
[AI] UI control event [AI]
@ c_notificationTransitioned
[AI] Object has transitioned states or locations [AI]
MxU8 MxBool
[AI]
Definition: mxtypes.h:124
MxLong MxResult
[AI]
Definition: mxtypes.h:106
int MxLong
[AI]
Definition: mxtypes.h:83
@ c_ElevBott_Elevator_Ctl
[AI] Elevator control interaction in Elevbott script logic.
@ c_LeftArrow_Ctl
[AI] Left arrow control input event.
@ c_iica31in_PlayWav
[AI] Command for playing a specific wav sound ("iica31in"), possibly the elevator entrance sound effe...
@ c_RightArrow_Ctl
[AI] Right arrow control input event.
@ c_InformationCenter_Music
[AI] Background music for the information center.