Files
Ipseity-Demo/Packages/OctoCore/Runtime/Scripts/OctoCore.cs
T
2026-02-09 23:53:14 +01:00

137 lines
3.7 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace OctoCore
{
/// <summary>
/// Main entry point for the OctoCore framework.
/// Manages all modules and coordinates their lifecycle.
/// </summary>
[DefaultExecutionOrder(-100)]
public class OctoCore : MonoBehaviour
{
/// <summary>
/// Singleton instance of OctoCore.
/// </summary>
public static OctoCore Instance { get; private set; }
private List<IOctoModule> _modules = new();
/// <summary>
/// Global settings for the OctoCore framework.
/// </summary>
public OctoSettings Settings;
[SerializeField] private Platform.OctoPlatform _platform = new();
[SerializeField] private Save.OctoSave _save = new();
[SerializeField] private Inputs.OctoInputs _inputs = new();
[SerializeField] private Localization.OctoLocalization _localization = new();
[SerializeField] private UI.OctoUI _ui = new();
[SerializeField] private Navigation.OctoNavigation _navigation = new();
[SerializeField] private Development.OctoDevelopment _development = new();
/// <summary>
/// Platform detection module.
/// </summary>
public Platform.OctoPlatform Platform => _platform;
/// <summary>
/// Save system module.
/// </summary>
public Save.OctoSave Save => _save;
/// <summary>
/// Input management module.
/// </summary>
public Inputs.OctoInputs Inputs => _inputs;
/// <summary>
/// Localization module for text and audio.
/// </summary>
public Localization.OctoLocalization Localization => _localization;
/// <summary>
/// UI management module.
/// </summary>
public UI.OctoUI UI => _ui;
/// <summary>
/// Scenes management module.
/// </summary>
public Navigation.OctoNavigation Navigation => _navigation;
/// <summary>
/// Development and debugging module.
/// </summary>
public Development.OctoDevelopment Development => _development;
void Awake()
{
if (Instance == null)
{
Instance = this;
Debug.Log($"[OctoCore] OctoCore Instantiated");
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
return;
}
RegisterModule(_platform);
RegisterModule(_save);
RegisterModule(_inputs);
RegisterModule(_localization);
RegisterModule(_ui);
RegisterModule(_navigation);
RegisterModule(_development);
foreach (IOctoModule module in _modules)
{
module.Init(Settings);
}
}
void RegisterModule(IOctoModule module)
{
_modules.Add(module);
}
void OnEnable()
{
SceneManager.activeSceneChanged += OnSceneChanged;
}
void OnDisable()
{
SceneManager.activeSceneChanged -= OnSceneChanged;
}
void Update()
{
foreach (IOctoModule module in _modules)
{
module.Tick();
}
}
void OnApplicationQuit()
{
foreach (IOctoModule module in _modules)
{
module.OnQuit();
}
}
void OnSceneChanged(Scene oldScene, Scene newScene)
{
foreach (IOctoModule module in _modules)
{
module.OnSceneChanged(oldScene, newScene);
}
}
}
}