OctoCore 0.0.1
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user