ProjectDDD/Packages/SLUnity/SLUI/SLUIInputControl.cs
2025-07-08 19:46:31 +09:00

110 lines
3.6 KiB
C#

using System.Collections.Generic;
namespace Superlazy.UI
{
public class SLUIInputControl : SLUIComponent
{
private static Dictionary<string, SLUIInputControl> inputControls = new Dictionary<string, SLUIInputControl>();
private string inputKey;
public static void InputKeyControl(string key)
{
if (inputControls.ContainsKey(key))
{
var value = inputControls[key];
var buttons = value.GetComponentsInChildren<SLUIButton>();
foreach (var button in buttons)
{
if (button.gameObject.activeInHierarchy && (button.comparison.useCheckValue == false || button.comparison.Result))
{
button.ButtonAction();
break;
}
}
var dragButtons = value.GetComponentsInChildren<SLUIDragButton>();
foreach (var button in dragButtons)
{
if (button.gameObject.activeInHierarchy && (button.comparison.useCheckValue == false || button.comparison.Result))
{
button.ButtonAction();
break;
}
}
var longPresseds = value.GetComponentsInChildren<SLUILongPressed>();
foreach (var longPressed in longPresseds)
{
if (longPressed.gameObject.activeInHierarchy)
{
longPressed.OnPointerDown(null);
}
}
}
}
public static void ReleaseKeyControl(string key)
{
if (inputControls.ContainsKey(key))
{
var value = inputControls[key];
var longPresseds = value.GetComponentsInChildren<SLUILongPressed>();
foreach (var longPressed in longPresseds)
{
if (longPressed.gameObject.activeInHierarchy)
{
longPressed.OnPointerUp(null);
}
}
}
}
protected override void Validate()
{
}
protected override void Init()
{
}
protected override void Enable()
{
var root = SLGame.SessionGet(bindParent.BindPath);
if (root["InputKey"])
{
if (inputControls.ContainsKey(root["InputKey"]))
{
SLLog.Warn($"{root["InputKey"]} already add");
}
else
{
inputKey = root["InputKey"];
inputControls.Add(root["InputKey"], this);
}
}
}
protected override void Disable()
{
if (string.IsNullOrEmpty(inputKey) == false)
{
inputControls.Remove(inputKey);
inputKey = "";
}
}
private void OnChange()
{
if (bindParent.Active == false) return;
var sessionRoot = SLGame.SessionGet(bindParent.BindPath);
if (sessionRoot == false) return; // TEMP: 세션루트가 삭제되었지만, 삭제되되기전 코루틴 처리가 있을 수 있음
if (sessionRoot["InputKey"] != inputKey)
{
inputControls.Remove(inputKey);
inputKey = sessionRoot["InputKey"];
inputControls.Add(sessionRoot["InputKey"], this);
}
}
}
}