Simple QuickAccess setting to more easily retrieve common data
This commit is contained in:
185
Assets/Scripts/Core/QuickAccess.cs
Normal file
185
Assets/Scripts/Core/QuickAccess.cs
Normal file
@@ -0,0 +1,185 @@
|
||||
using UnityEngine;
|
||||
using Interactions;
|
||||
using System.Collections.Generic;
|
||||
using AppleHills.Core.Settings;
|
||||
using AppleHills.Data.CardSystem;
|
||||
using CinematicsM;
|
||||
using Core;
|
||||
using Input;
|
||||
using Minigames.DivingForPictures;
|
||||
using PuzzleS;
|
||||
|
||||
namespace AppleHills.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides quick access to frequently used game objects, components, and manager instances.
|
||||
/// References are cached for performance and automatically invalidated on scene changes.
|
||||
/// </summary>
|
||||
public class QuickAccess : MonoBehaviour
|
||||
{
|
||||
#region Singleton Setup
|
||||
private static QuickAccess _instance;
|
||||
private static bool _isQuitting = false;
|
||||
|
||||
public static QuickAccess Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null && Application.isPlaying && !_isQuitting)
|
||||
{
|
||||
_instance = FindAnyObjectByType<QuickAccess>();
|
||||
if (_instance == null)
|
||||
{
|
||||
var go = new GameObject("QuickAccess");
|
||||
_instance = go.AddComponent<QuickAccess>();
|
||||
}
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
void OnApplicationQuit()
|
||||
{
|
||||
_isQuitting = true;
|
||||
}
|
||||
#endregion Singleton Setup
|
||||
|
||||
#region Manager Instances
|
||||
|
||||
// Core Managers
|
||||
public GameManager GameManager => GameManager.Instance;
|
||||
public ItemManager ItemManager => ItemManager.Instance;
|
||||
public SceneManagerService SceneManager => SceneManagerService.Instance;
|
||||
|
||||
// Other Managers
|
||||
public InputManager InputManager => InputManager.Instance;
|
||||
public PuzzleManager PuzzleManager => PuzzleManager.Instance;
|
||||
public CinematicsManager CinematicsManager => CinematicsManager.Instance;
|
||||
public CardSystemManager CardSystemManager => CardSystemManager.Instance;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Player and Follower References
|
||||
|
||||
private GameObject _playerGameObject;
|
||||
private GameObject _followerGameObject;
|
||||
private PlayerTouchController _playerController;
|
||||
private FollowerController _followerController;
|
||||
private Camera _mainCamera;
|
||||
private bool _initialized = false;
|
||||
|
||||
/// <summary>
|
||||
/// Returns the player GameObject. Finds it if not already cached.
|
||||
/// </summary>
|
||||
public GameObject PlayerGameObject
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_playerGameObject == null)
|
||||
{
|
||||
_playerGameObject = GameObject.FindGameObjectWithTag("Player");
|
||||
}
|
||||
return _playerGameObject;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the follower (Pulver) GameObject. Finds it if not already cached.
|
||||
/// </summary>
|
||||
public GameObject FollowerGameObject
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_followerGameObject == null)
|
||||
{
|
||||
_followerGameObject = GameObject.FindGameObjectWithTag("Pulver");
|
||||
}
|
||||
return _followerGameObject;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the player controller component. Finds it if not already cached.
|
||||
/// </summary>
|
||||
public PlayerTouchController PlayerController
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_playerController == null && PlayerGameObject != null)
|
||||
{
|
||||
_playerController = PlayerGameObject.GetComponent<PlayerTouchController>();
|
||||
}
|
||||
return _playerController;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the follower controller component. Finds it if not already cached.
|
||||
/// </summary>
|
||||
public FollowerController FollowerController
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_followerController == null && FollowerGameObject != null)
|
||||
{
|
||||
_followerController = FollowerGameObject.GetComponent<FollowerController>();
|
||||
}
|
||||
return _followerController;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the main camera. Caches for performance.
|
||||
/// </summary>
|
||||
public Camera MainCamera
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_mainCamera == null)
|
||||
{
|
||||
_mainCamera = Camera.main;
|
||||
}
|
||||
return _mainCamera;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Initialization and Scene Management
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (!_initialized)
|
||||
{
|
||||
// Subscribe to scene changes
|
||||
if (SceneManager != null)
|
||||
{
|
||||
SceneManager.SceneLoadCompleted += OnSceneLoadCompleted;
|
||||
}
|
||||
_initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle scene changes by clearing cached references.
|
||||
/// </summary>
|
||||
private void OnSceneLoadCompleted(string sceneName)
|
||||
{
|
||||
ClearReferences();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear all cached references.
|
||||
/// </summary>
|
||||
public void ClearReferences()
|
||||
{
|
||||
_playerGameObject = null;
|
||||
_followerGameObject = null;
|
||||
_playerController = null;
|
||||
_followerController = null;
|
||||
_mainCamera = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Core/QuickAccess.cs.meta
Normal file
3
Assets/Scripts/Core/QuickAccess.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 86c6fcf337334bf0a69a2d6e536c6f0b
|
||||
timeCreated: 1760104860
|
||||
Reference in New Issue
Block a user