OctoCore 0.0.1
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
using OctoCore.Components;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace OctoCore.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// UI management module.
|
||||
/// Handles global UI scaling and screen size detection.
|
||||
/// </summary>
|
||||
[System.Serializable]
|
||||
public class OctoUI : IOctoModule
|
||||
{
|
||||
/// <summary>
|
||||
/// Global scale factor for all UI elements.
|
||||
/// </summary>
|
||||
public float GlobalScale = 1;
|
||||
|
||||
/// <summary>
|
||||
/// Current screen size in pixels.
|
||||
/// </summary>
|
||||
[OctoReadOnly] public Vector2Int ScreenSize;
|
||||
|
||||
private Action<float> OnGlobalScaleChange;
|
||||
private Action<Vector2Int> OnScreenResize;
|
||||
|
||||
public void Init(OctoSettings settings)
|
||||
{
|
||||
// Callback OctoEvents
|
||||
|
||||
if (OctoEvents.Instance)
|
||||
OctoEvents.Instance.SetUiInitialized();
|
||||
}
|
||||
|
||||
public void Tick()
|
||||
{
|
||||
CheckSize();
|
||||
}
|
||||
|
||||
public void OnSceneChanged(Scene current, Scene next)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void OnQuit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void UnsubscribeOnGlobalScaleChange(Action<float> handler)
|
||||
{
|
||||
SubscribeOnGlobalScaleChange(handler, false);
|
||||
}
|
||||
|
||||
public void SubscribeOnGlobalScaleChange(Action<float> handler, bool subscribe = true)
|
||||
{
|
||||
if (subscribe) OnGlobalScaleChange += handler;
|
||||
else OnGlobalScaleChange -= handler;
|
||||
}
|
||||
|
||||
public void UnsubscribeOnScreenResize(Action<Vector2Int> handler)
|
||||
{
|
||||
SubscribeOnScreenResize(handler, false);
|
||||
}
|
||||
|
||||
public void SubscribeOnScreenResize(Action<Vector2Int> handler, bool subscribe = true)
|
||||
{
|
||||
if (subscribe) OnScreenResize += handler;
|
||||
else OnScreenResize -= handler;
|
||||
}
|
||||
|
||||
public void SetGlobalScale(float scale)
|
||||
{
|
||||
GlobalScale = scale;
|
||||
OnGlobalScaleChange?.Invoke(scale);
|
||||
}
|
||||
|
||||
public void CheckSize()
|
||||
{
|
||||
if (ScreenSize.x != Screen.width || ScreenSize.y != Screen.height)
|
||||
{
|
||||
ScreenSize.x = Screen.width;
|
||||
ScreenSize.y = Screen.height;
|
||||
|
||||
OnScreenResize?.Invoke(ScreenSize);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetCursor()
|
||||
{
|
||||
bool visible = true;
|
||||
CursorLockMode lockMode = CursorLockMode.None;
|
||||
|
||||
if (OctoPlayer.Instance && !OctoPlayer.Instance.IsPaused)
|
||||
{
|
||||
visible = true;
|
||||
lockMode = CursorLockMode.Locked;
|
||||
}
|
||||
|
||||
Cursor.visible = visible;
|
||||
Cursor.lockState = lockMode;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user