2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-08 13:44:56 +00:00

Fix doors and various area streaming bugs

This commit is contained in:
2018-05-01 17:43:31 -07:00
parent 711c3e0d2c
commit 734b25cad3
35 changed files with 189 additions and 284 deletions

View File

@@ -551,7 +551,7 @@ zeus::CVector3f CBallCamera::ConstrainYawAngle(const CPlayer& player, float dist
{
lookDir = player.GetMoveDir();
TCastToConstPtr<CScriptDoor> door = mgr.GetObjectById(x3dc_tooCloseActorId);
if ((!door || !door->x2a8_26_useConservativeCameraDistance) &&
if ((!door || !door->x2a8_26_isOpen) &&
(x400_state == EBallCameraState::Boost || x400_state == EBallCameraState::Chase))
lookDir = player.GetLeaveMorphDir();
}
@@ -1294,7 +1294,7 @@ void CBallCamera::UpdateUsingColliders(float dt, CStateManager& mgr)
if (TCastToConstPtr<CScriptDoor> door = mgr.GetObjectById(x3dc_tooCloseActorId))
{
if (!door->x2a8_26_useConservativeCameraDistance)
if (!door->x2a8_26_isOpen)
{
if (x400_state == EBallCameraState::Boost)
{
@@ -1454,7 +1454,7 @@ void CBallCamera::UpdateUsingColliders(float dt, CStateManager& mgr)
finalPos = ClampElevationToWater(finalPos, mgr);
if (ballToCam2.magnitude() < 2.f && x3dc_tooCloseActorId != kInvalidUniqueId && x3e0_tooCloseActorDist < 5.f)
if (TCastToConstPtr<CScriptDoor> door = mgr.GetObjectById(x3dc_tooCloseActorId))
if (!door->x2a8_26_useConservativeCameraDistance)
if (!door->x2a8_26_isOpen)
finalPos = GetTranslation();
float backupZ = finalPos.z;
@@ -1770,7 +1770,7 @@ bool CBallCamera::IsBallNearDoor(const zeus::CVector3f& pos, CStateManager& mgr)
{
TCastToConstPtr<CScriptDoor> door =
mgr.GetObjectById(mgr.GetCameraManager()->GetBallCamera()->x3dc_tooCloseActorId);
if (!door || door->x2a8_26_useConservativeCameraDistance)
if (!door || door->x2a8_26_isOpen)
return false;
auto tb = door->GetTouchBounds();
@@ -1820,14 +1820,14 @@ bool CBallCamera::ConstrainElevationAndDistance(float& elevation, float& distanc
stretchFac = zeus::clamp(-1.f, std::fabs(x3e0_tooCloseActorDist / (3.f * distance)), 1.f);
if (x3e0_tooCloseActorDist < 3.f * distance)
doorClose = true;
if (door->x2a8_26_useConservativeCameraDistance)
if (door->x2a8_26_isOpen)
newDistance = stretchFac * (distance - x468_conservativeDoorCamDistance) +
x468_conservativeDoorCamDistance;
else
newDistance = stretchFac * (distance - 5.f) + 5.f;
if (x18d_28_obtuseDirection)
newDistance *= 1.f + x308_speedFactor;
baseElevation = door->x2a8_26_useConservativeCameraDistance ? 0.75f : 1.5f;
baseElevation = door->x2a8_26_isOpen ? 0.75f : 1.5f;
springSpeed = 4.f;
}
}