using Core; using UnityEngine; namespace AppleHills { /// /// Unified access to settings in both editor and play mode /// public static class SettingsAccess { // Delegate type for editor-only settings providers public delegate float GetSettingsValueDelegate(); // Static delegates that will be set by editor code private static GetSettingsValueDelegate getPlayerStopDistanceProvider; private static GetSettingsValueDelegate getPlayerStopDistanceDirectInteractionProvider; private static GetSettingsValueDelegate getPuzzlePromptRangeProvider; // Editor-only method to set up providers - will be called from editor code public static void SetupEditorProviders( GetSettingsValueDelegate playerStopDistanceProvider, GetSettingsValueDelegate playerStopDistanceDirectInteractionProvider, GetSettingsValueDelegate puzzlePromptRangeProvider) { #if UNITY_EDITOR if (!Application.isPlaying) { getPlayerStopDistanceProvider = playerStopDistanceProvider; getPlayerStopDistanceDirectInteractionProvider = playerStopDistanceDirectInteractionProvider; getPuzzlePromptRangeProvider = puzzlePromptRangeProvider; } #endif } public static float GetPlayerStopDistance() { #if UNITY_EDITOR if (getPlayerStopDistanceProvider == null) { return 0.0f; } if (!Application.isPlaying && getPlayerStopDistanceProvider != null) { return getPlayerStopDistanceProvider(); } #endif return GameManager.Instance.PlayerStopDistance; } public static float GetPlayerStopDistanceDirectInteraction() { #if UNITY_EDITOR if (!Application.isPlaying && getPlayerStopDistanceDirectInteractionProvider != null) { return getPlayerStopDistanceDirectInteractionProvider(); } #endif return GameManager.Instance.PlayerStopDistanceDirectInteraction; } public static float GetPuzzlePromptRange() { #if UNITY_EDITOR if (!Application.isPlaying && getPuzzlePromptRangeProvider != null) { return getPuzzlePromptRangeProvider(); } #endif return GameManager.Instance.DefaultPuzzlePromptRange; } // Add more methods as needed for other settings } }