using System.Collections.Generic;
using UnityEngine;
namespace AxibugEmuOnline.Client.InputDevices
{
public class PSVController : InputDevice
{
/// ×
public Button Cross { get; private set; }
/// ○
public Button Circle { get; private set; }
/// □
public Button Square { get; private set; }
/// △
public Button Triangle { get; private set; }
public Button L { get; private set; }
public Button R { get; private set; }
public Button Select { get; private set; }
public Button Start { get; private set; }
public Button Up { get; private set; }
public Button Right { get; private set; }
public Button Down { get; private set; }
public Button Left { get; private set; }
public Stick LeftStick { get; private set; }
public Stick RightStick { get; private set; }
public PSVController(InputResolver resolver) : base(resolver) { }
protected override List DefineControls()
{
List result = new List();
Cross = new Button(this, "X");
Circle = new Button(this, "⭕");
Square = new Button(this, "□");
Triangle = new Button(this, "△");
L = new Button(this, "L");
R = new Button(this, "R");
Select = new Button(this, "SELECT");
Start = new Button(this, "START");
Up = new Button(this, "UP");
Right = new Button(this, "RIGHT");
Down = new Button(this, "DOWN");
Left = new Button(this, "LEFT");
return result;
}
public class Button : InputControl
{
internal string m_controlName;
public Button(InputDevice device, string controlName) : base(device)
{
m_controlName = controlName;
}
public override string ControlName => m_controlName;
}
public class Stick : InputControl
{
internal bool m_left;
public VirtualButton UP { get; private set; }
public VirtualButton Down { get; private set; }
public VirtualButton Left { get; private set; }
public VirtualButton Right { get; private set; }
public Stick(InputDevice device, bool left) : base(device)
{
m_left = left;
UP = new VirtualButton(device);
Down = new VirtualButton(device);
Left = new VirtualButton(device);
Right = new VirtualButton(device);
}
protected override void OnUpdate()
{
var axis = GetVector2();
UP.m_performing = axis.y > 0f;
UP.Update();
Down.m_performing = axis.y < 0f;
Down.Update();
Left.m_performing = axis.x < 0f;
Left.Update();
Right.m_performing = axis.x > 0f;
Right.Update();
}
public override string ControlName => $"{nameof(Stick)}_{(m_left ? "left" : "right")}";
public class VirtualButton : InputControl
{
internal bool m_performing;
public VirtualButton(InputDevice device) : base(device) { }
public override bool Performing
{
get => m_performing;
}
public override Vector2 GetVector2()
{
return default;
}
public override float GetFlaot()
{
return Performing ? 1 : 0;
}
public override string ControlName => "VirtualStickButton";
}
}
}
}