using UnityEditor; using UnityEngine; using Minigames.TrashMaze.Objects; namespace Editor { /// /// Custom editor for MazeExit showing teleportation and camera settings /// [CustomEditor(typeof(MazeExit))] public class MazeExitEditor : UnityEditor.Editor { private SerializedProperty _teleportTarget; private SerializedProperty _targetCameraState; // Base class properties private SerializedProperty _isOneTime; private SerializedProperty _cooldown; private SerializedProperty _characterToInteract; private void OnEnable() { _teleportTarget = serializedObject.FindProperty("teleportTarget"); _targetCameraState = serializedObject.FindProperty("targetCameraState"); // Base class properties _isOneTime = serializedObject.FindProperty("isOneTime"); _cooldown = serializedObject.FindProperty("cooldown"); _characterToInteract = serializedObject.FindProperty("characterToInteract"); } public override void OnInspectorGUI() { serializedObject.Update(); // Draw script field (read-only) EditorGUI.BeginDisabledGroup(true); EditorGUILayout.ObjectField("Script", MonoScript.FromMonoBehaviour((MonoBehaviour)target), GetType(), false); EditorGUI.EndDisabledGroup(); EditorGUILayout.Space(); // Interaction Settings (from base class) EditorGUILayout.LabelField("Interaction Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(_isOneTime); EditorGUILayout.PropertyField(_cooldown); EditorGUILayout.PropertyField(_characterToInteract); EditorGUILayout.Space(); // Maze Exit Settings EditorGUILayout.LabelField("Maze Exit Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(_teleportTarget); if (_teleportTarget.objectReferenceValue == null) { EditorGUILayout.HelpBox("Assign a Transform where Pulver should be teleported to (maze exit position). Teleportation happens midway through camera blend.", MessageType.Warning); } else { EditorGUILayout.HelpBox("✓ Pulver will be teleported to this position halfway through the camera blend. Tracking target is set immediately.", MessageType.Info); } EditorGUILayout.Space(); EditorGUILayout.PropertyField(_targetCameraState); EditorGUILayout.HelpBox("Camera state to blend to. Typically 'PulverGameplay' when exiting maze. Requires TrashMazeCameraController in scene.", MessageType.Info); EditorGUILayout.Space(); // Info box about the behavior EditorGUILayout.HelpBox( "Maze Exit Behavior:\n" + "1. Find Pulver (player-controlled in maze)\n" + "2. Start camera blend to target state\n" + "3. ★ Teleport Pulver midway through blend ★\n" + "4. Set Pulver as tracking target immediately\n" + "5. Wait for blend to complete\n" + "6. Stop Pulver movement (clear cached input)\n" + "\n" + "Note: Does NOT switch controllers - Pulver remains player-controlled!", MessageType.None ); serializedObject.ApplyModifiedProperties(); } } }