diff --git a/TombEngine/Objects/TR5/Trap/tr5_zip_line.cpp b/TombEngine/Objects/TR5/Trap/tr5_zip_line.cpp index 8630b90db..3975c405f 100644 --- a/TombEngine/Objects/TR5/Trap/tr5_zip_line.cpp +++ b/TombEngine/Objects/TR5/Trap/tr5_zip_line.cpp @@ -43,15 +43,15 @@ void InitializeZipLine(short itemNumber) void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) { auto& zipLineItem = g_Level.Items[itemNumber]; - auto& lara = *GetLaraInfo(laraItem); + auto& player = GetLaraInfo(*laraItem); if (zipLineItem.Status != ITEM_NOT_ACTIVE) return; - if (!(TrInput & IN_ACTION) || + if (!IsHeld(In::Action) || laraItem->Animation.ActiveState != LS_IDLE || laraItem->Animation.IsAirborne || - lara.Control.HandStatus != HandStatus::Free) + player.Control.HandStatus != HandStatus::Free) { return; } @@ -59,7 +59,7 @@ void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) if (TestLaraPosition(ZipLineMountBasis, &zipLineItem, laraItem)) { AlignLaraPosition(ZipLineMountedOffset, &zipLineItem, laraItem); - lara.Control.HandStatus = HandStatus::Busy; + player.Control.HandStatus = HandStatus::Busy; laraItem->Animation.TargetState = LS_ZIP_LINE; do @@ -72,82 +72,82 @@ void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) zipLineItem.Status = ITEM_ACTIVE; zipLineItem.Flags |= IFLAG_INVISIBLE; - lara.Control.IsMoving = false; - lara.Control.HandStatus = HandStatus::Busy; + player.Control.IsMoving = false; + player.Control.HandStatus = HandStatus::Busy; } } void ControlZipLine(short itemNumber) { - auto* zipLineItem = &g_Level.Items[itemNumber]; - auto* laraItem = LaraItem; + auto& zipLineItem = g_Level.Items[itemNumber]; + auto& laraItem = *LaraItem; - if (zipLineItem->Status != ITEM_ACTIVE) + if (zipLineItem.Status != ITEM_ACTIVE) return; - if (!(zipLineItem->Flags & IFLAG_INVISIBLE)) + if (!(zipLineItem.Flags & IFLAG_INVISIBLE)) { - auto* prevPos = (GameVector*)zipLineItem->Data; + auto& prevPos = *(GameVector*)zipLineItem.Data; - zipLineItem->Pose.Position = prevPos->ToVector3i(); + zipLineItem.Pose.Position = prevPos.ToVector3i(); - if (prevPos->RoomNumber != zipLineItem->RoomNumber) - ItemNewRoom(itemNumber, prevPos->RoomNumber); + if (prevPos.RoomNumber != zipLineItem.RoomNumber) + ItemNewRoom(itemNumber, prevPos.RoomNumber); - zipLineItem->Status = ITEM_NOT_ACTIVE; + zipLineItem.Status = ITEM_NOT_ACTIVE; SetAnimation(zipLineItem, 0); RemoveActiveItem(itemNumber); return; } - if (zipLineItem->Animation.ActiveState == 1) + if (zipLineItem.Animation.ActiveState == 1) { - AnimateItem(zipLineItem); + AnimateItem(&zipLineItem); return; } - AnimateItem(zipLineItem); + AnimateItem(&zipLineItem); // Accelerate. - if (zipLineItem->Animation.Velocity.y < ZIP_LINE_VELOCITY_MAX) - zipLineItem->Animation.Velocity.y += ZIP_LINE_VELOCITY_ACCEL; + if (zipLineItem.Animation.Velocity.y < ZIP_LINE_VELOCITY_MAX) + zipLineItem.Animation.Velocity.y += ZIP_LINE_VELOCITY_ACCEL; // Translate. - auto headingOrient = EulerAngles(ZIP_LINE_STEEPNESS_ANGLE, zipLineItem->Pose.Orientation.y, 0); - TranslateItem(zipLineItem, headingOrient, zipLineItem->Animation.Velocity.y); + auto headingOrient = EulerAngles(ZIP_LINE_STEEPNESS_ANGLE, zipLineItem.Pose.Orientation.y, 0); + TranslateItem(&zipLineItem, headingOrient, zipLineItem.Animation.Velocity.y); - int vPos = zipLineItem->Pose.Position.y + CLICK(0.25f); - auto pointColl = GetCollision(zipLineItem, zipLineItem->Pose.Orientation.y, zipLineItem->Animation.Velocity.y); + int vPos = zipLineItem.Pose.Position.y + CLICK(0.25f); + auto pointColl = GetCollision(&zipLineItem, zipLineItem.Pose.Orientation.y, zipLineItem.Animation.Velocity.y); // Update zip line room number. - if (pointColl.RoomNumber != zipLineItem->RoomNumber) + if (pointColl.RoomNumber != zipLineItem.RoomNumber) ItemNewRoom(itemNumber, pointColl.RoomNumber); if (pointColl.Position.Floor <= (vPos + CLICK(1)) || pointColl.Position.Ceiling >= (vPos - CLICK(1))) { // Dismount. - if (laraItem->Animation.ActiveState == LS_ZIP_LINE) + if (laraItem.Animation.ActiveState == LS_ZIP_LINE) { - laraItem->Animation.TargetState = LS_JUMP_FORWARD; - AnimateItem(laraItem); - laraItem->Animation.IsAirborne = true; - laraItem->Animation.Velocity.y = zipLineItem->Animation.Velocity.y / 4; - laraItem->Animation.Velocity.z = zipLineItem->Animation.Velocity.y; + laraItem.Animation.TargetState = LS_JUMP_FORWARD; + AnimateItem(&laraItem); + laraItem.Animation.IsAirborne = true; + laraItem.Animation.Velocity.y = zipLineItem.Animation.Velocity.y / 4; + laraItem.Animation.Velocity.z = zipLineItem.Animation.Velocity.y; } - SoundEffect(SFX_TR4_VONCROY_KNIFE_SWISH, &zipLineItem->Pose); + SoundEffect(SFX_TR4_VONCROY_KNIFE_SWISH, &zipLineItem.Pose); RemoveActiveItem(itemNumber); - zipLineItem->Status = ITEM_NOT_ACTIVE; - zipLineItem->Flags -= IFLAG_INVISIBLE; + zipLineItem.Status = ITEM_NOT_ACTIVE; + zipLineItem.Flags -= IFLAG_INVISIBLE; } else { // "Parent" player to zip line. - if (laraItem->Animation.ActiveState == LS_ZIP_LINE) - laraItem->Pose.Position = zipLineItem->Pose.Position; + if (laraItem.Animation.ActiveState == LS_ZIP_LINE) + laraItem.Pose.Position = zipLineItem.Pose.Position; // Whizz sound. - SoundEffect(SFX_TR4_TRAIN_DOOR_CLOSE, &zipLineItem->Pose); + SoundEffect(SFX_TR4_TRAIN_DOOR_CLOSE, &zipLineItem.Pose); } }