using UnityEngine; using AppleHills.Core.Settings; using Core; namespace Input { /// /// Saveable data for PlayerTouchController state /// [System.Serializable] public class PlayerSaveData { public Vector3 worldPosition; public Quaternion worldRotation; } /// /// Handles player movement in response to tap and hold input events. /// Supports both direct and pathfinding movement modes. /// Extends BasePlayerMovementController with save/load functionality. /// Interaction capability (MoveToAndNotify) is provided by base class. /// public class PlayerTouchController : BasePlayerMovementController { // Save system configuration public override bool AutoRegisterForSave => true; // Scene-specific SaveId - each level has its own player state public override string SaveId => $"{gameObject.scene.name}/PlayerController"; protected override void LoadSettings() { var configs = GameManager.GetSettingsObject(); _movementSettings = configs.DefaultPlayerMovement; } internal override void OnManagedStart() { base.OnManagedStart(); // Register with InputManager as default consumer if (InputManager.Instance != null) { InputManager.Instance.RegisterController("trafalgar", this, setAsDefaultConsumer: true); Logging.Debug($"[PlayerTouchController] Registered controller '{gameObject.name}' as default consumer"); } } #region Save/Load Lifecycle Hooks internal override string OnSceneSaveRequested() { var saveData = new PlayerSaveData { worldPosition = transform.position, worldRotation = transform.rotation }; return JsonUtility.ToJson(saveData); } internal override void OnSceneRestoreRequested(string serializedData) { if (string.IsNullOrEmpty(serializedData)) { Logging.Debug("[PlayerTouchController] No saved state to restore"); return; } try { var saveData = JsonUtility.FromJson(serializedData); if (saveData != null) { transform.position = saveData.worldPosition; transform.rotation = saveData.worldRotation; Logging.Debug($"[PlayerTouchController] Restored position: {saveData.worldPosition}"); } } catch (System.Exception ex) { Logging.Warning($"[PlayerTouchController] Failed to restore state: {ex.Message}"); } } #endregion } }