Pulver trash maze sequence
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
using System.Collections;
|
||||
using Core;
|
||||
using Input;
|
||||
using Items;
|
||||
using Minigames.TrashMaze.Core;
|
||||
using Minigames.TrashMaze.Data;
|
||||
using Unity.Cinemachine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Minigames.TrashMaze.Objects
|
||||
{
|
||||
/// <summary>
|
||||
/// Trash Maze specific controller switch that transitions TO Pulver (maze entrance).
|
||||
/// Handles camera blend with midway teleportation to create the illusion of entering the maze.
|
||||
/// </summary>
|
||||
public class TrashMazeSwitchToPulver : ControllerSwitchItem
|
||||
{
|
||||
[Header("Trash Maze - To Pulver Settings")]
|
||||
[Tooltip("Transform where Pulver should be teleported to (maze entrance)")]
|
||||
[SerializeField] private Transform teleportTarget;
|
||||
|
||||
[Tooltip("Camera state to blend to (Maze camera)")]
|
||||
[SerializeField] private TrashMazeCameraState targetCameraState = TrashMazeCameraState.Maze;
|
||||
|
||||
protected override IEnumerator SwitchControllerSequence()
|
||||
{
|
||||
_isSwitching = true;
|
||||
|
||||
// Step 1: Get controllers
|
||||
var currentController = InputManager.Instance.GetActiveController();
|
||||
var targetController = InputManager.Instance.GetController("pulver");
|
||||
|
||||
if (currentController == null || targetController == null)
|
||||
{
|
||||
Debug.LogError($"[TrashMazeSwitchToPulver] Failed to get controllers!");
|
||||
_isSwitching = false;
|
||||
yield break;
|
||||
}
|
||||
|
||||
GameObject currentGameObject = (currentController as MonoBehaviour)?.gameObject;
|
||||
GameObject targetGameObject = (targetController as MonoBehaviour)?.gameObject;
|
||||
|
||||
Logging.Debug($"[TrashMazeSwitchToPulver] Switching from {currentGameObject?.name} to Pulver");
|
||||
|
||||
// Step 2: Deactivate current controller (Trafalgar)
|
||||
DeactivateCurrentController(currentController, currentGameObject);
|
||||
|
||||
// Step 3: Deactivate Pulver's follower controller (will be teleported)
|
||||
if (targetGameObject != null)
|
||||
{
|
||||
var pulverFollower = targetGameObject.GetComponent<FollowerController>();
|
||||
if (pulverFollower != null)
|
||||
{
|
||||
pulverFollower.DeactivateFollower();
|
||||
}
|
||||
}
|
||||
|
||||
// Step 4: Start camera blend to maze
|
||||
TeleportationHelper.StartCameraBlend(targetCameraState);
|
||||
|
||||
// Step 5: Wait for halfway through the blend, teleport Pulver, and set tracking target
|
||||
yield return TeleportationHelper.TeleportMidBlendAndSetTracking(targetGameObject, teleportTarget, targetCameraState);
|
||||
|
||||
// Step 6: Wait for camera blend to complete
|
||||
yield return TeleportationHelper.WaitForCameraBlend();
|
||||
|
||||
// Step 7: Activate Pulver controller
|
||||
if (targetController is BasePlayerMovementController targetPlayerController)
|
||||
{
|
||||
targetPlayerController.ActivateController();
|
||||
}
|
||||
|
||||
// Step 8: Switch InputManager to Pulver controller
|
||||
bool switchSuccess = InputManager.Instance.SwitchToController("pulver");
|
||||
|
||||
if (switchSuccess)
|
||||
{
|
||||
Logging.Debug($"[TrashMazeSwitchToPulver] Successfully switched to Pulver controller");
|
||||
OnCharacterSwitch.Invoke();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"[TrashMazeSwitchToPulver] Failed to switch to Pulver controller");
|
||||
}
|
||||
|
||||
// Step 9: Mark as used if one-time use
|
||||
if (isOneTime)
|
||||
{
|
||||
DisableVisual();
|
||||
}
|
||||
|
||||
_isSwitching = false;
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
private void OnValidate()
|
||||
{
|
||||
name = "TrashMazeSwitch_ToPulver";
|
||||
|
||||
// Default to Maze camera
|
||||
if (targetCameraState != TrashMazeCameraState.Maze)
|
||||
{
|
||||
targetCameraState = TrashMazeCameraState.Maze;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user