mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 16:34:06 +00:00
LegoWorld::Add to 100% (#1328)
This commit is contained in:
@@ -184,7 +184,8 @@ protected:
|
|||||||
// TEMPLATE: LEGO1 0x10020b20
|
// TEMPLATE: LEGO1 0x10020b20
|
||||||
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::iterator::_Dec
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::iterator::_Dec
|
||||||
|
|
||||||
// XTEMPLATE LEGO1 0x10020b70
|
// TEMPLATE: LEGO1 0x10020b70
|
||||||
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::lower_bound
|
||||||
|
|
||||||
// TEMPLATE: LEGO1 0x10020bb0
|
// TEMPLATE: LEGO1 0x10020bb0
|
||||||
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Buynode
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Buynode
|
||||||
|
@@ -402,68 +402,88 @@ MxResult LegoWorld::GetCurrPathInfo(LegoPathBoundary** p_boundaries, MxS32& p_nu
|
|||||||
// FUNCTION: BETA10 0x100da90b
|
// FUNCTION: BETA10 0x100da90b
|
||||||
void LegoWorld::Add(MxCore* p_object)
|
void LegoWorld::Add(MxCore* p_object)
|
||||||
{
|
{
|
||||||
if (p_object && !p_object->IsA("LegoWorld") && !p_object->IsA("LegoWorldPresenter")) {
|
if (p_object == NULL || p_object->IsA("LegoWorld") || p_object->IsA("LegoWorldPresenter")) {
|
||||||
if (p_object->IsA("LegoAnimPresenter")) {
|
return;
|
||||||
LegoAnimPresenter* animPresenter = (LegoAnimPresenter*) p_object;
|
}
|
||||||
|
|
||||||
if (!strcmpi(animPresenter->GetAction()->GetObjectName(), "ConfigAnimation")) {
|
#ifndef BETA10
|
||||||
FUN_1003e050(animPresenter);
|
if (p_object->IsA("LegoAnimPresenter")) {
|
||||||
animPresenter->GetAction()->SetDuration(animPresenter->GetAnimation()->GetDuration());
|
if (!strcmpi(((LegoAnimPresenter*) p_object)->GetAction()->GetObjectName(), "ConfigAnimation")) {
|
||||||
}
|
FUN_1003e050((LegoAnimPresenter*) p_object);
|
||||||
|
((LegoAnimPresenter*) p_object)
|
||||||
|
->GetAction()
|
||||||
|
->SetDuration(((LegoAnimPresenter*) p_object)->GetAnimation()->GetDuration());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (p_object->IsA("MxControlPresenter")) {
|
||||||
|
MxPresenterListCursor cursor(&m_controlPresenters);
|
||||||
|
|
||||||
|
if (cursor.Find((MxPresenter*) p_object)) {
|
||||||
|
assert(0);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_object->IsA("MxControlPresenter")) {
|
m_controlPresenters.Append((MxPresenter*) p_object);
|
||||||
MxPresenterListCursor cursor(&m_controlPresenters);
|
}
|
||||||
|
else if (p_object->IsA("MxEntity")) {
|
||||||
|
LegoEntityListCursor cursor(m_entityList);
|
||||||
|
|
||||||
if (cursor.Find((MxPresenter*) p_object)) {
|
if (cursor.Find((LegoEntity*) p_object)) {
|
||||||
return;
|
assert(0);
|
||||||
}
|
return;
|
||||||
|
|
||||||
m_controlPresenters.Append((MxPresenter*) p_object);
|
|
||||||
}
|
}
|
||||||
else if (p_object->IsA("MxEntity")) {
|
|
||||||
LegoEntityListCursor cursor(m_entityList);
|
|
||||||
|
|
||||||
if (cursor.Find((LegoEntity*) p_object)) {
|
m_entityList->Append((LegoEntity*) p_object);
|
||||||
return;
|
}
|
||||||
}
|
else if (p_object->IsA("LegoLocomotionAnimPresenter") || p_object->IsA("LegoHideAnimPresenter") || p_object->IsA("LegoLoopingAnimPresenter")) {
|
||||||
|
MxPresenterListCursor cursor(&m_animPresenters);
|
||||||
|
|
||||||
m_entityList->Append((LegoEntity*) p_object);
|
if (cursor.Find((MxPresenter*) p_object)) {
|
||||||
|
assert(0);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (p_object->IsA("LegoLocomotionAnimPresenter") || p_object->IsA("LegoHideAnimPresenter") || p_object->IsA("LegoLoopingAnimPresenter")) {
|
|
||||||
MxPresenterListCursor cursor(&m_animPresenters);
|
|
||||||
|
|
||||||
if (cursor.Find((MxPresenter*) p_object)) {
|
((MxPresenter*) p_object)->SendToCompositePresenter(Lego());
|
||||||
return;
|
m_animPresenters.Append(((MxPresenter*) p_object));
|
||||||
}
|
|
||||||
|
|
||||||
((MxPresenter*) p_object)->SendToCompositePresenter(Lego());
|
if (p_object->IsA("LegoHideAnimPresenter")) {
|
||||||
m_animPresenters.Append(((MxPresenter*) p_object));
|
m_hideAnim = (LegoHideAnimPresenter*) p_object;
|
||||||
|
|
||||||
if (p_object->IsA("LegoHideAnimPresenter")) {
|
|
||||||
m_hideAnim = (LegoHideAnimPresenter*) p_object;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (p_object->IsA("LegoCacheSound")) {
|
}
|
||||||
LegoCacheSoundListCursor cursor(m_cacheSoundList);
|
#ifndef BETA10
|
||||||
|
else if (p_object->IsA("LegoCacheSound")) {
|
||||||
|
LegoCacheSoundListCursor cursor(m_cacheSoundList);
|
||||||
|
|
||||||
if (cursor.Find((LegoCacheSound*) p_object)) {
|
if (cursor.Find((LegoCacheSound*) p_object)) {
|
||||||
return;
|
assert(0); // ?
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_cacheSoundList->Append((LegoCacheSound*) p_object);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else {
|
||||||
|
MxCoreSet::iterator it = m_set0xa8.find(p_object);
|
||||||
|
if (it == m_set0xa8.end()) {
|
||||||
|
#ifdef BETA10
|
||||||
|
if (p_object->IsA("MxPresenter")) {
|
||||||
|
assert(static_cast<MxPresenter*>(p_object)->GetAction());
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
m_cacheSoundList->Append((LegoCacheSound*) p_object);
|
m_set0xa8.insert(p_object);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (m_set0xa8.find(p_object) == m_set0xa8.end()) {
|
assert(0);
|
||||||
m_set0xa8.insert(p_object);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_set0xd0.empty() && p_object->IsA("MxPresenter")) {
|
if (m_set0xd0.size() != 0 && p_object->IsA("MxPresenter")) {
|
||||||
if (((MxPresenter*) p_object)->IsEnabled()) {
|
if (((MxPresenter*) p_object)->IsEnabled()) {
|
||||||
((MxPresenter*) p_object)->Enable(FALSE);
|
((MxPresenter*) p_object)->Enable(FALSE);
|
||||||
m_set0xd0.insert(p_object);
|
m_set0xd0.insert(p_object);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -472,61 +492,65 @@ void LegoWorld::Add(MxCore* p_object)
|
|||||||
// FUNCTION: BETA10 0x100dad2a
|
// FUNCTION: BETA10 0x100dad2a
|
||||||
void LegoWorld::Remove(MxCore* p_object)
|
void LegoWorld::Remove(MxCore* p_object)
|
||||||
{
|
{
|
||||||
if (p_object) {
|
MxCoreSet::iterator it;
|
||||||
MxCoreSet::iterator it;
|
|
||||||
|
|
||||||
if (p_object->IsA("MxControlPresenter")) {
|
if (p_object == NULL) {
|
||||||
MxPresenterListCursor cursor(&m_controlPresenters);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (cursor.Find((MxControlPresenter*) p_object)) {
|
if (p_object->IsA("MxControlPresenter")) {
|
||||||
cursor.Detach();
|
MxPresenterListCursor cursor(&m_controlPresenters);
|
||||||
((MxControlPresenter*) p_object)->GetAction()->SetOrigin(Lego());
|
|
||||||
((MxControlPresenter*) p_object)->VTable0x68(TRUE);
|
if (cursor.Find((MxControlPresenter*) p_object)) {
|
||||||
}
|
cursor.Detach();
|
||||||
|
((MxControlPresenter*) p_object)->GetAction()->SetOrigin(Lego());
|
||||||
|
((MxControlPresenter*) p_object)->VTable0x68(TRUE);
|
||||||
}
|
}
|
||||||
else if (p_object->IsA("LegoLocomotionAnimPresenter") || p_object->IsA("LegoHideAnimPresenter") || p_object->IsA("LegoLoopingAnimPresenter")) {
|
}
|
||||||
MxPresenterListCursor cursor(&m_animPresenters);
|
else if (p_object->IsA("LegoLocomotionAnimPresenter") || p_object->IsA("LegoHideAnimPresenter") || p_object->IsA("LegoLoopingAnimPresenter")) {
|
||||||
|
MxPresenterListCursor cursor(&m_animPresenters);
|
||||||
|
|
||||||
if (cursor.Find((MxPresenter*) p_object)) {
|
if (cursor.Find((MxPresenter*) p_object)) {
|
||||||
cursor.Detach();
|
cursor.Detach();
|
||||||
}
|
|
||||||
|
|
||||||
if (p_object->IsA("LegoHideAnimPresenter")) {
|
|
||||||
m_hideAnim = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (p_object->IsA("MxEntity")) {
|
|
||||||
if (p_object->IsA("LegoPathActor")) {
|
|
||||||
RemoveActor((LegoPathActor*) p_object);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_entityList) {
|
if (p_object->IsA("LegoHideAnimPresenter")) {
|
||||||
LegoEntityListCursor cursor(m_entityList);
|
m_hideAnim = NULL;
|
||||||
|
}
|
||||||
if (cursor.Find((LegoEntity*) p_object)) {
|
}
|
||||||
cursor.Detach();
|
else if (p_object->IsA("MxEntity")) {
|
||||||
}
|
if (p_object->IsA("LegoPathActor")) {
|
||||||
}
|
RemoveActor((LegoPathActor*) p_object);
|
||||||
}
|
}
|
||||||
else if (p_object->IsA("LegoCacheSound")) {
|
|
||||||
LegoCacheSoundListCursor cursor(m_cacheSoundList);
|
|
||||||
|
|
||||||
if (cursor.Find((LegoCacheSound*) p_object)) {
|
if (m_entityList) {
|
||||||
|
LegoEntityListCursor cursor(m_entityList);
|
||||||
|
|
||||||
|
if (cursor.Find((LegoEntity*) p_object)) {
|
||||||
cursor.Detach();
|
cursor.Detach();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
it = m_set0xa8.find(p_object);
|
#ifndef BETA10
|
||||||
if (it != m_set0xa8.end()) {
|
else if (p_object->IsA("LegoCacheSound")) {
|
||||||
m_set0xa8.erase(it);
|
LegoCacheSoundListCursor cursor(m_cacheSoundList);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
it = m_set0xd0.find(p_object);
|
if (cursor.Find((LegoCacheSound*) p_object)) {
|
||||||
if (it != m_set0xd0.end()) {
|
cursor.Detach();
|
||||||
m_set0xd0.erase(it);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
else {
|
||||||
|
it = m_set0xa8.find(p_object);
|
||||||
|
if (it != m_set0xa8.end()) {
|
||||||
|
m_set0xa8.erase(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
it = m_set0xd0.find(p_object);
|
||||||
|
if (it != m_set0xd0.end()) {
|
||||||
|
m_set0xd0.erase(it);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100213a0
|
// FUNCTION: LEGO1 0x100213a0
|
||||||
@@ -643,57 +667,66 @@ MxCore* LegoWorld::Find(const MxAtomId& p_atom, MxS32 p_entityId)
|
|||||||
// FUNCTION: BETA10 0x100db758
|
// FUNCTION: BETA10 0x100db758
|
||||||
void LegoWorld::Enable(MxBool p_enable)
|
void LegoWorld::Enable(MxBool p_enable)
|
||||||
{
|
{
|
||||||
if (p_enable && !m_set0xd0.empty()) {
|
MxCoreSet::iterator it;
|
||||||
if (CurrentWorld() != this) {
|
|
||||||
if (CurrentWorld()) {
|
|
||||||
AnimationManager()->FUN_10061010(FALSE);
|
|
||||||
CurrentWorld()->Enable(FALSE);
|
|
||||||
|
|
||||||
LegoEntityListCursor cursor(m_entityList);
|
if (p_enable && m_set0xd0.size() != 0) {
|
||||||
LegoEntity* entity;
|
if (CurrentWorld() == this) {
|
||||||
|
return;
|
||||||
while (cursor.Next(entity)) {
|
|
||||||
if (entity->GetROI()) {
|
|
||||||
entity->GetROI()->SetEntity(entity);
|
|
||||||
GetViewManager()->Add(entity->GetROI());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!m_set0xd0.empty()) {
|
|
||||||
MxCoreSet::iterator it = m_set0xd0.begin();
|
|
||||||
|
|
||||||
if ((*it)->IsA("MxPresenter")) {
|
|
||||||
((MxPresenter*) *it)->Enable(TRUE);
|
|
||||||
}
|
|
||||||
else if ((*it)->IsA("LegoPathController")) {
|
|
||||||
((LegoPathController*) *it)->Enable(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_set0xd0.erase(it);
|
|
||||||
}
|
|
||||||
|
|
||||||
SetCurrentWorld(this);
|
|
||||||
ControlManager()->FUN_10028df0(&m_controlPresenters);
|
|
||||||
InputManager()->SetCamera(m_cameraController);
|
|
||||||
|
|
||||||
if (m_cameraController) {
|
|
||||||
InputManager()->Register(m_cameraController->GetNavController());
|
|
||||||
Lego()->SetNavController(m_cameraController->GetNavController());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_worldId != LegoOmni::e_undefined) {
|
|
||||||
PlantManager()->LoadWorldInfo(m_worldId);
|
|
||||||
AnimationManager()->LoadWorldInfo(m_worldId);
|
|
||||||
BuildingManager()->LoadWorldInfo();
|
|
||||||
AnimationManager()->Resume();
|
|
||||||
}
|
|
||||||
|
|
||||||
GameState()->ResetROI();
|
|
||||||
SetIsWorldActive(TRUE);
|
|
||||||
}
|
}
|
||||||
|
if (CurrentWorld()) {
|
||||||
|
AnimationManager()->FUN_10061010(FALSE);
|
||||||
|
CurrentWorld()->Enable(FALSE);
|
||||||
|
|
||||||
|
LegoEntityListCursor cursor(m_entityList);
|
||||||
|
LegoEntity* entity;
|
||||||
|
|
||||||
|
while (cursor.Next(entity)) {
|
||||||
|
assert(entity->GetROI());
|
||||||
|
|
||||||
|
if (entity->GetROI()) {
|
||||||
|
#ifndef BETA10
|
||||||
|
entity->GetROI()->SetEntity(entity);
|
||||||
|
#endif
|
||||||
|
GetViewManager()->Add(entity->GetROI());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (m_set0xd0.size() != 0) {
|
||||||
|
it = m_set0xd0.begin();
|
||||||
|
|
||||||
|
if ((*it)->IsA("MxPresenter")) {
|
||||||
|
((MxPresenter*) *it)->Enable(TRUE);
|
||||||
|
}
|
||||||
|
else if ((*it)->IsA("LegoPathController")) {
|
||||||
|
((LegoPathController*) *it)->Enable(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_set0xd0.erase(it);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetCurrentWorld(this);
|
||||||
|
ControlManager()->FUN_10028df0(&m_controlPresenters);
|
||||||
|
InputManager()->SetCamera(m_cameraController);
|
||||||
|
|
||||||
|
if (m_cameraController) {
|
||||||
|
InputManager()->Register(m_cameraController->GetNavController());
|
||||||
|
Lego()->SetNavController(m_cameraController->GetNavController());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_worldId != LegoOmni::e_undefined) {
|
||||||
|
PlantManager()->LoadWorldInfo(m_worldId);
|
||||||
|
AnimationManager()->LoadWorldInfo(m_worldId);
|
||||||
|
BuildingManager()->LoadWorldInfo();
|
||||||
|
AnimationManager()->Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
GameState()->ResetROI();
|
||||||
|
#ifndef BETA10
|
||||||
|
SetIsWorldActive(TRUE);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (!p_enable && m_set0xd0.empty()) {
|
else if (!p_enable && m_set0xd0.size() != 0) {
|
||||||
MxPresenter* presenter;
|
MxPresenter* presenter;
|
||||||
LegoPathController* controller;
|
LegoPathController* controller;
|
||||||
LegoPathActor* actor = UserActor();
|
LegoPathActor* actor = UserActor();
|
||||||
@@ -707,7 +740,9 @@ void LegoWorld::Enable(MxBool p_enable)
|
|||||||
|
|
||||||
if (m_worldId != LegoOmni::e_undefined) {
|
if (m_worldId != LegoOmni::e_undefined) {
|
||||||
PlantManager()->Reset(m_worldId);
|
PlantManager()->Reset(m_worldId);
|
||||||
|
#ifndef BETA10
|
||||||
BuildingManager()->Reset();
|
BuildingManager()->Reset();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
MxPresenterListCursor controlPresenterCursor(&m_controlPresenters);
|
MxPresenterListCursor controlPresenterCursor(&m_controlPresenters);
|
||||||
|
Reference in New Issue
Block a user