Revamp the settings system (#7)
- A Settings Provider system to utilize addressables for loading settings at runtime - An editor UI for easy modifications of the settings objects - A split out developer settings functionality to keep gameplay and nitty-gritty details separately - Most settings migrated out of game objects and into the new system - An additional Editor utility for fetching the settings at editor runtime, for gizmos, visualization etc Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com> Co-authored-by: AlexanderT <alexander@foolhardyhorizons.com> Reviewed-on: #7
This commit is contained in:
57
Assets/Scripts/Core/SettingsAccess.cs
Normal file
57
Assets/Scripts/Core/SettingsAccess.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace AppleHills
|
||||
{
|
||||
/// <summary>
|
||||
/// Unified access to settings in both editor and play mode
|
||||
/// </summary>
|
||||
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;
|
||||
|
||||
// Editor-only method to set up providers - will be called from editor code
|
||||
public static void SetupEditorProviders(
|
||||
GetSettingsValueDelegate playerStopDistanceProvider,
|
||||
GetSettingsValueDelegate playerStopDistanceDirectInteractionProvider)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
getPlayerStopDistanceProvider = playerStopDistanceProvider;
|
||||
getPlayerStopDistanceDirectInteractionProvider = playerStopDistanceDirectInteractionProvider;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public static float GetPlayerStopDistance()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
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;
|
||||
}
|
||||
|
||||
// Add more methods as needed for other settings
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user