using AxibugEmuOnline.Client.InputDevices; using AxibugProtobuf; using UnityEngine.UIElements; namespace AxibugEmuOnline.Client.Settings { public enum UMAMEKSingleKey { INSERT_COIN, GAMESTART, UP, DOWN, LEFT, RIGHT, BTN_A, BTN_B, BTN_C, BTN_D, BTN_E, BTN_F } public abstract class MAMEKeyBinding : EmuCoreBinder<UMAMEKSingleKey> { public override int ControllerCount => 4; public override void Bind(Keyboard_D device, ControllerBinder controller) { switch (controller.ControllerIndex) { case 0: controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Q, 0); controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.E, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.W, 0); controller.SetBinding(UMAMEKSingleKey.DOWN, device.S, 0); controller.SetBinding(UMAMEKSingleKey.LEFT, device.A, 0); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.D, 0); controller.SetBinding(UMAMEKSingleKey.BTN_A, device.J, 0); controller.SetBinding(UMAMEKSingleKey.BTN_B, device.K, 0); controller.SetBinding(UMAMEKSingleKey.BTN_C, device.L, 0); controller.SetBinding(UMAMEKSingleKey.BTN_D, device.U, 0); controller.SetBinding(UMAMEKSingleKey.BTN_E, device.I, 0); controller.SetBinding(UMAMEKSingleKey.BTN_F, device.O, 0); break; case 1: controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Delete, 0); controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.PageDown, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.UpArrow, 0); controller.SetBinding(UMAMEKSingleKey.DOWN, device.DownArrow, 0); controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftArrow, 0); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.RightArrow, 0); controller.SetBinding(UMAMEKSingleKey.BTN_A, device.Keypad1, 0); controller.SetBinding(UMAMEKSingleKey.BTN_B, device.Keypad2, 0); controller.SetBinding(UMAMEKSingleKey.BTN_C, device.Keypad3, 0); controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Keypad4, 0); controller.SetBinding(UMAMEKSingleKey.BTN_E, device.Keypad5, 0); controller.SetBinding(UMAMEKSingleKey.BTN_F, device.Keypad6, 0); break; } } public override void Bind(DualShockController_D device, ControllerBinder controller) { controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Share, 0); controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Options, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0); controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0); controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0); controller.SetBinding(UMAMEKSingleKey.BTN_A, device.Square, 0); controller.SetBinding(UMAMEKSingleKey.BTN_B, device.Cross, 0); controller.SetBinding(UMAMEKSingleKey.BTN_C, device.Circle, 0); controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Triangle, 0); controller.SetBinding(UMAMEKSingleKey.BTN_E, device.R1, 0); controller.SetBinding(UMAMEKSingleKey.BTN_F, device.R2, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1); controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1); controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1); } public override void Bind(GamePad_D device, ControllerBinder controller) { controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Select, 0); controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Start, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0); controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0); controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0); controller.SetBinding(UMAMEKSingleKey.BTN_A, device.West, 0); controller.SetBinding(UMAMEKSingleKey.BTN_B, device.South, 0); controller.SetBinding(UMAMEKSingleKey.BTN_C, device.East, 0); controller.SetBinding(UMAMEKSingleKey.BTN_D, device.North, 0); controller.SetBinding(UMAMEKSingleKey.BTN_E, device.RightShoulder, 0); controller.SetBinding(UMAMEKSingleKey.BTN_F, device.RightTrigger, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1); controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1); controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1); } public override void Bind(PSVController_D device, ControllerBinder controller) { controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Select, 0); controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Start, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0); controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0); controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0); controller.SetBinding(UMAMEKSingleKey.BTN_A, device.Square, 0); controller.SetBinding(UMAMEKSingleKey.BTN_B, device.Cross, 0); controller.SetBinding(UMAMEKSingleKey.BTN_C, device.Circle, 0); controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Triangle, 0); controller.SetBinding(UMAMEKSingleKey.BTN_E, device.L, 0); controller.SetBinding(UMAMEKSingleKey.BTN_F, device.R, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1); controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1); controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1); } public override void Bind(XboxController_D device, ControllerBinder controller) { controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.View, 0); controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Menu, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0); controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0); controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0); controller.SetBinding(UMAMEKSingleKey.BTN_A, device.X, 0); controller.SetBinding(UMAMEKSingleKey.BTN_B, device.A, 0); controller.SetBinding(UMAMEKSingleKey.BTN_C, device.B, 0); controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Y, 0); controller.SetBinding(UMAMEKSingleKey.BTN_E, device.RightBumper, 0); controller.SetBinding(UMAMEKSingleKey.BTN_F, device.RightTrigger, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1); controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1); controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1); } public override void Bind(ScreenGamepad_D device, ControllerBinder controller) { controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.OPTION_1, 0); controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.OPTION_2, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.UP, 0); controller.SetBinding(UMAMEKSingleKey.DOWN, device.DOWN, 0); controller.SetBinding(UMAMEKSingleKey.LEFT, device.LEFT, 0); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.RIGHT, 0); controller.SetBinding(UMAMEKSingleKey.BTN_A, device.BTN_A, 0); controller.SetBinding(UMAMEKSingleKey.BTN_B, device.BTN_B, 0); controller.SetBinding(UMAMEKSingleKey.BTN_C, device.BTN_C, 0); controller.SetBinding(UMAMEKSingleKey.BTN_D, device.BTN_D, 0); controller.SetBinding(UMAMEKSingleKey.BTN_E, device.BTN_E, 0); controller.SetBinding(UMAMEKSingleKey.BTN_F, device.BTN_F, 0); controller.SetBinding(UMAMEKSingleKey.UP, device.JOYSTICK.Up, 1); controller.SetBinding(UMAMEKSingleKey.DOWN, device.JOYSTICK.Down, 1); controller.SetBinding(UMAMEKSingleKey.LEFT, device.JOYSTICK.Left, 1); controller.SetBinding(UMAMEKSingleKey.RIGHT, device.JOYSTICK.Right, 1); } } public class NEOGEOKeyBinding : MAMEKeyBinding { public override RomPlatformType Platform => RomPlatformType.Neogeo; } public class CPS1KeyBinding : MAMEKeyBinding { public override RomPlatformType Platform => RomPlatformType.Cps1; } public class CPS2KeyBinding : MAMEKeyBinding { public override RomPlatformType Platform => RomPlatformType.Cps2; } public class IGSKeyBinding : MAMEKeyBinding { public override RomPlatformType Platform => RomPlatformType.Igs; } public class OldArcadeKeyBinding : MAMEKeyBinding { public override RomPlatformType Platform => RomPlatformType.ArcadeOld; } }