136 lines
3.7 KiB
C#
136 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;
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|