mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-26 17:46:38 -05:00
implement RemoveFromCurrentWorld (#700)
* implement RemoveFromCurrentWorld * Replace magic values --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
parent
2477b89e32
commit
556c7698d8
4 changed files with 44 additions and 20 deletions
|
@ -20,7 +20,7 @@ Extra::ActionType MatchActionString(const char*);
|
||||||
void InvokeAction(Extra::ActionType p_actionId, MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender);
|
void InvokeAction(Extra::ActionType p_actionId, MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender);
|
||||||
void SetCameraControllerFromIsle();
|
void SetCameraControllerFromIsle();
|
||||||
void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut);
|
void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut);
|
||||||
MxBool FUN_1003ee00(MxAtomId& p_atomId, MxS32 p_id);
|
MxBool RemoveFromCurrentWorld(MxAtomId& p_atomId, MxS32 p_id);
|
||||||
void FUN_1003ef00(MxBool);
|
void FUN_1003ef00(MxBool);
|
||||||
void SetAppCursor(WPARAM p_wparam);
|
void SetAppCursor(WPARAM p_wparam);
|
||||||
MxBool FUN_1003ef60();
|
MxBool FUN_1003ef60();
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "bike.h"
|
#include "bike.h"
|
||||||
|
|
||||||
|
#include "isle_actions.h"
|
||||||
#include "legocontrolmanager.h"
|
#include "legocontrolmanager.h"
|
||||||
#include "legogamestate.h"
|
#include "legogamestate.h"
|
||||||
#include "legoomni.h"
|
#include "legoomni.h"
|
||||||
|
@ -35,11 +36,11 @@ void Bike::VTable0xe4()
|
||||||
{
|
{
|
||||||
IslePathActor::VTable0xe4();
|
IslePathActor::VTable0xe4();
|
||||||
GameState()->SetCurrentArea(LegoGameState::Area::e_bike);
|
GameState()->SetCurrentArea(LegoGameState::Area::e_bike);
|
||||||
FUN_1003ee00(*g_isleScript, 11);
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_BikeDashboard_Bitmap);
|
||||||
FUN_1003ee00(*g_isleScript, 12);
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_BikeArms_Ctl);
|
||||||
FUN_1003ee00(*g_isleScript, 15);
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_BikeHorn_Ctl);
|
||||||
FUN_1003ee00(*g_isleScript, 14);
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_BikeHorn_Sound);
|
||||||
FUN_1003ee00(*g_isleScript, 13);
|
RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_BikeInfo_Ctl);
|
||||||
ControlManager()->Unregister(this);
|
ControlManager()->Unregister(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,16 +79,16 @@ void Helicopter::VTable0xe4()
|
||||||
}
|
}
|
||||||
|
|
||||||
m_state->SetUnknown8(0);
|
m_state->SetUnknown8(0);
|
||||||
FUN_1003ee00(m_script, 0x16);
|
RemoveFromCurrentWorld(m_script, IsleScript::c_HelicopterDashboard_Bitmap);
|
||||||
FUN_1003ee00(m_script, 0x17);
|
RemoveFromCurrentWorld(m_script, IsleScript::c_HelicopterArms_Ctl);
|
||||||
FUN_1003ee00(m_script, 0x18);
|
RemoveFromCurrentWorld(m_script, IsleScript::c_Helicopter_TakeOff_Ctl);
|
||||||
FUN_1003ee00(m_script, 0x19);
|
RemoveFromCurrentWorld(m_script, IsleScript::c_Helicopter_Land_Ctl);
|
||||||
FUN_1003ee00(m_script, 0x1a);
|
RemoveFromCurrentWorld(m_script, Act3Script::c_Helicopter_Pizza_Ctl);
|
||||||
FUN_1003ee00(m_script, 0x1b);
|
RemoveFromCurrentWorld(m_script, Act3Script::c_Helicopter_Donut_Ctl);
|
||||||
FUN_1003ee00(m_script, 0x1c);
|
RemoveFromCurrentWorld(m_script, Act3Script::c_Helicopter_Info_Ctl);
|
||||||
FUN_1003ee00(m_script, 0x1d);
|
RemoveFromCurrentWorld(m_script, 0x1d);
|
||||||
FUN_1003ee00(m_script, 0x1e);
|
RemoveFromCurrentWorld(m_script, 0x1e);
|
||||||
FUN_1003ee00(m_script, 0x1f);
|
RemoveFromCurrentWorld(m_script, 0x1f);
|
||||||
AnimationManager()->FUN_1005f6d0(TRUE);
|
AnimationManager()->FUN_1005f6d0(TRUE);
|
||||||
ControlManager()->Unregister(this);
|
ControlManager()->Unregister(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ void InvokeAction(Extra::ActionType p_actionId, MxAtomId& p_pAtom, MxS32 p_targe
|
||||||
break;
|
break;
|
||||||
case Extra::ActionType::e_stop:
|
case Extra::ActionType::e_stop:
|
||||||
action.SetUnknown24(-2);
|
action.SetUnknown24(-2);
|
||||||
if (!FUN_1003ee00(p_pAtom, p_targetEntityId)) {
|
if (!RemoveFromCurrentWorld(p_pAtom, p_targetEntityId)) {
|
||||||
DeleteObject(action);
|
DeleteObject(action);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -238,11 +238,34 @@ void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1003ee00
|
// FUNCTION: LEGO1 0x1003ee00
|
||||||
MxBool FUN_1003ee00(MxAtomId& p_atomId, MxS32 p_id)
|
MxBool RemoveFromCurrentWorld(MxAtomId& p_atomId, MxS32 p_id)
|
||||||
{
|
{
|
||||||
|
LegoWorld* world = CurrentWorld();
|
||||||
|
|
||||||
|
if (world) {
|
||||||
|
MxCore* object = world->Find(p_atomId, p_id);
|
||||||
|
|
||||||
|
if (object) {
|
||||||
|
world->Remove(object);
|
||||||
|
|
||||||
|
if (!object->IsA("MxPresenter")) {
|
||||||
|
delete object;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (((MxPresenter*) object)->GetAction()) {
|
||||||
|
FUN_100b7220(((MxPresenter*) object)->GetAction(), MxDSAction::c_world, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
((MxPresenter*) object)->EndAction();
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1003ee80
|
// FUNCTION: LEGO1 0x1003ee80
|
||||||
MxBool RemoveFromWorld(MxAtomId& p_entityAtom, MxS32 p_entityId, MxAtomId& p_worldAtom, MxS32 p_worldEntityId)
|
MxBool RemoveFromWorld(MxAtomId& p_entityAtom, MxS32 p_entityId, MxAtomId& p_worldAtom, MxS32 p_worldEntityId)
|
||||||
|
|
Loading…
Reference in a new issue