Minor CScriptActorRotate fixes

This commit is contained in:
Phillip Stephens 2022-12-23 22:22:44 -08:00
parent a51897041e
commit f24314aa02
1 changed files with 35 additions and 29 deletions

View File

@ -68,7 +68,7 @@ void CScriptActorRotate::RebuildSpiderBallWaypoints(CStateManager& mgr) {
CScriptSpiderBallWaypoint* wp = static_cast< CScriptSpiderBallWaypoint* >(mgr.ObjectById(*it));
if (wp) {
wp->BuildWaypointListAndBounds(mgr);
wp->SetTransformDirty(false);
wp->SetTransformDirty(true);
}
}
@ -76,40 +76,42 @@ void CScriptActorRotate::RebuildSpiderBallWaypoints(CStateManager& mgr) {
}
void CScriptActorRotate::Think(float dt, CStateManager& mgr) {
if (x58_24_updateRotation && GetActive()) {
x44_currentTime += dt;
if (x44_currentTime >= x40_maxTime) {
x58_24_updateRotation = false;
x44_currentTime = x40_maxTime;
}
if (!x58_24_updateRotation || !GetActive()) {
return;
}
const float timeOffset = x44_currentTime / x40_maxTime;
x44_currentTime += dt;
if (x44_currentTime >= x40_maxTime) {
x58_24_updateRotation = false;
x44_currentTime = x40_maxTime;
}
rstl::vector< rstl::pair< TUniqueId, CTransform4f > >::const_iterator it = x48_actors.begin();
for (; it != x48_actors.end(); ++it) {
if (CActor* act = TCastToPtr< CActor >(mgr.ObjectById(it->first))) {
const CTransform4f xf =
CTransform4f::RotateX(CRelAngle::FromDegrees(timeOffset * x34_rotation.GetX())) *
CTransform4f::RotateY(CRelAngle::FromDegrees(timeOffset * x34_rotation.GetY())) *
CTransform4f::RotateZ(CRelAngle::FromDegrees(timeOffset * x34_rotation.GetZ()));
CTransform4f localRot = it->second * xf;
localRot.SetTranslation(localRot.GetTranslation() + act->GetTranslation());
act->SetTransform(localRot);
const float timeOffset = x44_currentTime / x40_maxTime;
if (CScriptPlatform* plat = TCastToPtr< CScriptPlatform >(mgr.ObjectById(it->first))) {
UpdatePlatformRiders(*plat, xf, mgr);
}
rstl::vector< rstl::pair< TUniqueId, CTransform4f > >::const_iterator it = x48_actors.begin();
for (; it != x48_actors.end(); ++it) {
if (CActor* act = TCastToPtr< CActor >(mgr.ObjectById(it->first))) {
const CTransform4f xf =
CTransform4f::RotateX(CRelAngle::FromDegrees(timeOffset * x34_rotation.GetX())) *
CTransform4f::RotateY(CRelAngle::FromDegrees(timeOffset * x34_rotation.GetY())) *
CTransform4f::RotateZ(CRelAngle::FromDegrees(timeOffset * x34_rotation.GetZ()));
CTransform4f localRot = it->second * xf;
localRot.SetTranslation(localRot.GetTranslation() + act->GetTranslation());
act->SetTransform(localRot);
if (CScriptPlatform* plat = TCastToPtr< CScriptPlatform >(mgr.ObjectById(it->first))) {
UpdatePlatformRiders(*plat, xf, mgr);
}
}
}
if (!x58_24_updateRotation) {
if (x58_25_updateSpiderBallWaypoints) {
RebuildSpiderBallWaypoints(mgr);
}
if (!x58_24_updateRotation) {
if (x58_25_updateSpiderBallWaypoints) {
RebuildSpiderBallWaypoints(mgr);
}
if (x58_26_updateActors) {
UpdateActors(false, mgr);
}
if (x58_26_updateActors) {
UpdateActors(false, mgr);
}
}
}
@ -144,7 +146,11 @@ void CScriptActorRotate::UpdateActors(bool next, CStateManager& mgr) {
if (!x48_actors.empty()) {
x58_24_updateRotation = true;
x44_currentTime = (next ? x40_maxTime : 0.f);
if (next) {
x44_currentTime = x40_maxTime;
} else {
x44_currentTime = 0.f;
}
}
}