Files
RebootKit/Runtime/Engine/Code/ConsoleUI/ConsoleUIService.cs
2025-06-24 14:45:45 +02:00

83 lines
2.4 KiB
C#

using System.Text;
using RebootKit.Engine.Foundation;
using RebootKit.Engine.Main;
using RebootKit.Engine.Services.Input;
using UnityEngine;
using UnityEngine.InputSystem;
using Logger = RebootKit.Engine.Foundation.Logger;
namespace RebootKit.Engine.Services.ConsoleUI {
public class ConsoleUIService : ServiceMonoBehaviour {
static readonly Logger s_logger = new Logger(nameof(ConsoleUIService));
[SerializeField] ConsoleVC m_ConsoleVC;
[SerializeField] ScriptableInputAction m_ToggleAction;
readonly StringBuilder m_Content = new StringBuilder();
public bool IsVisible => m_ConsoleVC.gameObject.activeSelf;
void Awake() {
SetVisibility(false);
}
void OnEnable() {
s_logger.Info("OnEnable console");
m_ToggleAction.Action.Enable();
m_ToggleAction.Action.performed += OnToggleAction;
m_ConsoleVC.InputSubmitted += OnUserInput;
m_ConsoleVC.ClearRequested += Clear;
RR.Console.OnOutputMessage += Write;
}
void OnDisable() {
m_ToggleAction.Action.performed -= OnToggleAction;
m_ConsoleVC.InputSubmitted -= OnUserInput;
m_ConsoleVC.ClearRequested -= Clear;
RR.Console.OnOutputMessage -= Write;
}
public override void Dispose() {
}
public void ToggleVisibility() {
SetVisibility(!IsVisible);
if (IsVisible) {
RR.Input.DisableControls();
RR.Input.UnlockCursor();
m_ConsoleVC.SetMessageContent(m_Content.ToString());
} else {
RR.Input.EnableControls();
RR.Input.LockCursor();
}
}
void OnUserInput(string input) {
RR.Console.WriteToOutput("> " + input);
RR.Console.Execute(input);
}
public void SetVisibility(bool visible) {
m_ConsoleVC.gameObject.SetActive(visible);
}
public void Write(string message) {
m_Content.AppendLine(message);
m_ConsoleVC.SetMessageContent(m_Content.ToString());
}
public void Clear() {
m_Content.Clear();
m_ConsoleVC.SetMessageContent(string.Empty);
}
void OnToggleAction(InputAction.CallbackContext obj) {
ToggleVisibility();
}
}
}