UI/Screen/Components/InputGlyph.razor
@using Sandbox
@using Sandbox.UI
@using System
@inherits Sandbox.UI.Panel
@namespace Sandbox
<root />
@code {
private string _inputAction;
private InputAnalog _inputAnalog;
private InputGlyphSize _inputGlyphSize;
private bool _outline;
protected override void OnAfterTreeRender(bool firstTime)
{
Update();
}
public void SetAction(string inputAction)
{
if (_inputAction == inputAction)
return;
_inputAction = inputAction;
BindClass("pressed", () => Input.Down(_inputAction));
Update();
}
public void SetAnalog(string inputAnalog)
{
if (!Enum.TryParse<InputAnalog>(inputAnalog, true, out var analog))
return;
if (analog == InputAnalog.LeftStickX || analog == InputAnalog.LeftStickY)
BindClass("pressed", () => !Input.AnalogMove.IsNearlyZero());
else if (analog == InputAnalog.RightStickX || analog == InputAnalog.RightStickY)
BindClass("pressed", () => !Input.AnalogLook.IsNearlyZero());
_inputAnalog = analog;
}
public override void SetProperty(string name, string value)
{
switch (name)
{
case "action":
{
SetAction(value);
Update();
break;
}
case "analog":
{
SetAnalog(value);
Update();
break;
}
case "size":
{
Enum.TryParse(value, true, out _inputGlyphSize);
Update();
break;
}
case "outline":
{
_outline = value switch
{
"true" => true,
"false" => false,
_ => _outline
};
Update();
break;
}
}
base.SetProperty(name, value);
}
private void Update()
{
var texture = _inputAction is null ? Input.GetGlyph(_inputAnalog, _inputGlyphSize, _outline) : Input.GetGlyph(_inputAction, _inputGlyphSize, _outline);
Style.BackgroundImage = texture;
}
protected override int BuildHash()
{
return HashCode.Combine(Input.UsingController);
}
}