using System.Collections.Generic; using UnityEngine; namespace AxibugEmuOnline.Client.InputDevices { public class PSVController : InputDevice { /// <summary> × </summary> public Button Cross { get; private set; } /// <summary> ○ </summary> public Button Circle { get; private set; } /// <summary> □ </summary> public Button Square { get; private set; } /// <summary> △ </summary> 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<InputControl> DefineControls() { List<InputControl> result = new List<InputControl>(); 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"; } } } }