mirror of https://github.com/PrimeDecomp/prime.git
Improve CScriptActorRotate
This commit is contained in:
parent
c61ff4b714
commit
f2fa19ab38
|
@ -218,7 +218,7 @@ lbl_80153CB4:
|
||||||
/* 80153CDC 00150C3C 90 A1 00 30 */ stw r5, 0x30(r1)
|
/* 80153CDC 00150C3C 90 A1 00 30 */ stw r5, 0x30(r1)
|
||||||
/* 80153CE0 00150C40 90 01 00 34 */ stw r0, 0x34(r1)
|
/* 80153CE0 00150C40 90 01 00 34 */ stw r0, 0x34(r1)
|
||||||
/* 80153CE4 00150C44 83 77 00 4C */ lwz r27, 0x4c(r23)
|
/* 80153CE4 00150C44 83 77 00 4C */ lwz r27, 0x4c(r23)
|
||||||
/* 80153CE8 00150C48 48 00 08 B9 */ bl "distance<Q34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32"
|
/* 80153CE8 00150C48 48 00 08 B9 */ bl "distance<Q34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator"
|
||||||
/* 80153CEC 00150C4C 7C 60 1B 78 */ mr r0, r3
|
/* 80153CEC 00150C4C 7C 60 1B 78 */ mr r0, r3
|
||||||
/* 80153CF0 00150C50 38 77 00 48 */ addi r3, r23, 0x48
|
/* 80153CF0 00150C50 38 77 00 48 */ addi r3, r23, 0x48
|
||||||
/* 80153CF4 00150C54 7C 9B 02 14 */ add r4, r27, r0
|
/* 80153CF4 00150C54 7C 9B 02 14 */ add r4, r27, r0
|
||||||
|
@ -825,8 +825,8 @@ lbl_80154480:
|
||||||
/* 80154598 001514F8 38 21 00 30 */ addi r1, r1, 0x30
|
/* 80154598 001514F8 38 21 00 30 */ addi r1, r1, 0x30
|
||||||
/* 8015459C 001514FC 4E 80 00 20 */ blr
|
/* 8015459C 001514FC 4E 80 00 20 */ blr
|
||||||
|
|
||||||
.global "distance<Q34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32"
|
.global "distance<Q34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator"
|
||||||
"distance<Q34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32":
|
"distance<Q34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator":
|
||||||
/* 801545A0 00151500 94 21 FF E0 */ stwu r1, -0x20(r1)
|
/* 801545A0 00151500 94 21 FF E0 */ stwu r1, -0x20(r1)
|
||||||
/* 801545A4 00151504 7C 08 02 A6 */ mflr r0
|
/* 801545A4 00151504 7C 08 02 A6 */ mflr r0
|
||||||
/* 801545A8 00151508 90 01 00 24 */ stw r0, 0x24(r1)
|
/* 801545A8 00151508 90 01 00 24 */ stw r0, 0x24(r1)
|
||||||
|
@ -843,14 +843,14 @@ lbl_80154480:
|
||||||
/* 801545D4 00151534 90 E1 00 14 */ stw r7, 0x14(r1)
|
/* 801545D4 00151534 90 E1 00 14 */ stw r7, 0x14(r1)
|
||||||
/* 801545D8 00151538 90 C1 00 18 */ stw r6, 0x18(r1)
|
/* 801545D8 00151538 90 C1 00 18 */ stw r6, 0x18(r1)
|
||||||
/* 801545DC 0015153C 90 01 00 1C */ stw r0, 0x1c(r1)
|
/* 801545DC 0015153C 90 01 00 1C */ stw r0, 0x1c(r1)
|
||||||
/* 801545E0 00151540 48 00 00 15 */ bl "__distance<Q34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl195red_black_tree<13TGameScriptId,Q24rstl"
|
/* 801545E0 00151540 48 00 00 15 */ bl "__distance<Q34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ24rstl20forward_iterator_tag"
|
||||||
/* 801545E4 00151544 80 01 00 24 */ lwz r0, 0x24(r1)
|
/* 801545E4 00151544 80 01 00 24 */ lwz r0, 0x24(r1)
|
||||||
/* 801545E8 00151548 7C 08 03 A6 */ mtlr r0
|
/* 801545E8 00151548 7C 08 03 A6 */ mtlr r0
|
||||||
/* 801545EC 0015154C 38 21 00 20 */ addi r1, r1, 0x20
|
/* 801545EC 0015154C 38 21 00 20 */ addi r1, r1, 0x20
|
||||||
/* 801545F0 00151550 4E 80 00 20 */ blr
|
/* 801545F0 00151550 4E 80 00 20 */ blr
|
||||||
|
|
||||||
.global "__distance<Q34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl195red_black_tree<13TGameScriptId,Q24rstl"
|
.global "__distance<Q34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ24rstl20forward_iterator_tag"
|
||||||
"__distance<Q34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl195red_black_tree<13TGameScriptId,Q24rstl32pair<13TGameScriptId,9TUniqueId>,1,Q24rstl52select1st<Q24rstl32pair<13TGameScriptId,9TUniqueId>>,Q24rstl21less<13TGameScriptId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl195red_black_tree<13TGameScriptId,Q24rstl":
|
"__distance<Q34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iterator>__4rstlFQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ34rstl175red_black_tree<9TEditorId,Q24rstl27pair<9TEditorId,9TUniqueId>,0,Q24rstl47select1st<Q24rstl27pair<9TEditorId,9TUniqueId>>,Q24rstl16less<9TEditorId>,Q24rstl17rmemory_allocator>14const_iteratorQ24rstl20forward_iterator_tag":
|
||||||
/* 801545F4 00151554 94 21 FF E0 */ stwu r1, -0x20(r1)
|
/* 801545F4 00151554 94 21 FF E0 */ stwu r1, -0x20(r1)
|
||||||
/* 801545F8 00151558 7C 08 02 A6 */ mflr r0
|
/* 801545F8 00151558 7C 08 02 A6 */ mflr r0
|
||||||
/* 801545FC 0015155C 90 01 00 24 */ stw r0, 0x24(r1)
|
/* 801545FC 0015155C 90 01 00 24 */ stw r0, 0x24(r1)
|
||||||
|
|
|
@ -29,13 +29,13 @@ void CScriptActorRotate::UpdatePlatformRiders(rstl::vector< SRiders >& riders,
|
||||||
|
|
||||||
for (rstl::vector< SRiders >::iterator rider = riders.begin(); rider != riders.end(); ++rider) {
|
for (rstl::vector< SRiders >::iterator rider = riders.begin(); rider != riders.end(); ++rider) {
|
||||||
if (CActor* act = TCastToPtr< CActor >(mgr.ObjectById(rider->x0_uid))) {
|
if (CActor* act = TCastToPtr< CActor >(mgr.ObjectById(rider->x0_uid))) {
|
||||||
CTransform4f& riderXf = rider->x8_transform;
|
act->SetTransform(rider->x8_transform);
|
||||||
act->SetTransform(xf * rider->x8_transform);
|
act->SetTransform(xf * rider->x8_transform);
|
||||||
act->SetTranslation(act->GetTranslation() + plat.GetTranslation());
|
act->SetTranslation(act->GetTranslation() + plat.GetTranslation());
|
||||||
if (!x58_24_updateRotation) {
|
if (!x58_24_updateRotation) {
|
||||||
riderXf = CTransform4f(act->GetTransform().BuildMatrix3f(),
|
CTransform4f riderXf(act->GetTransform());
|
||||||
act->GetTranslation() - plat.GetTranslation());
|
riderXf.SetTranslation(act->GetTranslation() - plat.GetTranslation());
|
||||||
|
rider->x8_transform = riderXf;
|
||||||
if (TCastToConstPtr< CScriptSpiderBallWaypoint >(act)) {
|
if (TCastToConstPtr< CScriptSpiderBallWaypoint >(act)) {
|
||||||
x58_25_updateSpiderBallWaypoints = true;
|
x58_25_updateSpiderBallWaypoints = true;
|
||||||
}
|
}
|
||||||
|
@ -129,16 +129,14 @@ void CScriptActorRotate::UpdateActors(bool next, CStateManager& mgr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
CStateManager::TIdListResult search = mgr.GetIdListForScript(conn->x8_objId);
|
CStateManager::TIdListResult search = mgr.GetIdListForScript(conn->x8_objId);
|
||||||
for (CStateManager::TIdList::const_iterator it = search.first; it != search.second; ++it) {
|
if (!(search.first == search.second)) {
|
||||||
// TODO is this for loop real?
|
x48_actors.reserve(x48_actors.size() + rstl::distance(search.first, search.second));
|
||||||
for (int i = 0; i < x48_actors.size(); ++i) {
|
for (CStateManager::TIdList::const_iterator it = search.first; it != search.second; ++it) {
|
||||||
if (x48_actors[i].first == it->second) {
|
if (const CActor* act = TCastToConstPtr< CActor >(mgr.ObjectById(it->second))) {
|
||||||
|
x48_actors.push_back(
|
||||||
|
rstl::pair< TUniqueId, CTransform4f >(it->second, act->GetTransform().GetRotation()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (const CActor* act = TCastToConstPtr< CActor >(mgr.ObjectById(it->second))) {
|
|
||||||
x48_actors.push_back(
|
|
||||||
rstl::pair< TUniqueId, CTransform4f >(it->second, act->GetTransform().GetRotation()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,10 +154,11 @@ void CScriptActorRotate::UpdateActors(bool next, CStateManager& mgr) {
|
||||||
|
|
||||||
void CScriptActorRotate::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid,
|
void CScriptActorRotate::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid,
|
||||||
CStateManager& mgr) {
|
CStateManager& mgr) {
|
||||||
|
bool didAccept = false;
|
||||||
switch (msg) {
|
switch (msg) {
|
||||||
case kSM_Activate:
|
case kSM_Activate:
|
||||||
CEntity::AcceptScriptMsg(msg, uid, mgr);
|
CEntity::AcceptScriptMsg(msg, uid, mgr);
|
||||||
break;
|
didAccept = true;
|
||||||
|
|
||||||
case kSM_Registered:
|
case kSM_Registered:
|
||||||
if (!x58_27_updateOnCreation) {
|
if (!x58_27_updateOnCreation) {
|
||||||
|
@ -167,11 +166,14 @@ void CScriptActorRotate::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid
|
||||||
}
|
}
|
||||||
case kSM_Action:
|
case kSM_Action:
|
||||||
case kSM_Next:
|
case kSM_Next:
|
||||||
UpdateActors(msg == kSM_Next, mgr);
|
if (GetActive()) {
|
||||||
|
UpdateActors(msg == kSM_Next, mgr);
|
||||||
CEntity::AcceptScriptMsg(msg, uid, mgr);
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (!didAccept) {
|
||||||
|
CEntity::AcceptScriptMsg(msg, uid, mgr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScriptActorRotate::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|
void CScriptActorRotate::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|
||||||
|
|
Loading…
Reference in New Issue