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(KeyCode.Joystick1Button0, this, "X"); Circle = new Button(KeyCode.Joystick1Button1, this, "⭕"); Square = new Button(KeyCode.Joystick1Button2, this, "□"); Triangle = new Button(KeyCode.Joystick1Button3, this, "△"); L = new Button(KeyCode.Joystick1Button4, this, "L"); R = new Button(KeyCode.Joystick1Button5, this, "R"); Select = new Button(KeyCode.Joystick1Button6, this, "SELECT"); Start = new Button(KeyCode.Joystick1Button7, this, "START"); Up = new Button(KeyCode.Joystick1Button8, this, "UP"); Right = new Button(KeyCode.Joystick1Button9, this, "RIGHT"); Down = new Button(KeyCode.Joystick1Button10, this, "DOWN"); Left = new Button(KeyCode.Joystick1Button11, this, "LEFT"); return result; } public class Button : InputControl { private KeyCode m_keyCode; private string m_controlName; public Button(KeyCode keycode, InputDevice device, string controlName) : base(device) { m_keyCode = keycode; m_controlName = controlName; } public override bool Performing => Input.GetKey(m_keyCode); public override Vector2 GetVector2() { return default; } public override float GetFlaot() { return Performing ? 1 : 0; } public override string ControlName => m_controlName; } public class Stick : InputControl { private 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 bool Performing => GetVector2().x != 0 || GetVector2().y != 0; public override Vector2 GetVector2() { Vector2 result = Vector2.zero; if (m_left) { result.x = Input.GetAxis("Horizontal"); result.y = Input.GetAxis("Vertical"); } else { result.x = Input.GetAxis("HorizontalR"); result.y = Input.GetAxis("VerticalR"); } return result; } public override float GetFlaot() { return Performing ? 1 : 0; } 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"; } } } }