/// <summary> /// Returns both XInput and DirectInput InputManager /// </summary> /// <returns>A List of InputManagers</returns> public static List <InputManager> GetAvailableInputManagers() { List <InputManager> managers = new List <InputManager>(); foreach (Controller ctrl in XInputManager.GetDevices()) { managers.Add(new XInputManager(ctrl)); } foreach (Joystick stick in DirectInputManager.GetDevices()) { managers.Add(new DirectInputManager(stick)); } return(managers); }
/// <summary> /// Sets up the NativeUI menu /// </summary> private void SetupMenu() { if (menuPool != null) { menuPool.ToList().ForEach(menu => { menu.Clear(); }); } menu = new UIMenu("Two Player Mod", Enabled() ? "~g~Enabled" : "~r~Disabled"); menuPool.Add(menu); UIMenuItem toggleItem = new UIMenuItem("Toggle mod", "Toggle Two Player mode"); toggleItem.Activated += ToggleMod_Activated; menu.AddItem(toggleItem); UIMenu allPlayersMenu = menuPool.AddSubMenu(menu, "Players"); menu.MenuItems.FirstOrDefault(item => { return(item.Text.Equals("Players")); }).Description = "Configure players"; foreach (UserIndex player in userIndices) { bool check = bool.Parse(PlayerSettings.GetValue(player, EnabledKey, false.ToString())); UIMenu playerMenu = menuPool.AddSubMenu(allPlayersMenu, "Player " + player); UIMenuItem playerItem = allPlayersMenu.MenuItems.FirstOrDefault(item => { return(item.Text.Equals("Player " + player)); }); string controllerGuid = PlayerSettings.GetValue(player, ControllerKey, ""); playerItem.Description = "Configure player " + player; if (!string.IsNullOrEmpty(controllerGuid)) { playerItem.SetRightBadge(UIMenuItem.BadgeStyle.Star); } UIMenuCheckboxItem togglePlayerItem = new UIMenuCheckboxItem("Toggle player " + player, check, "Enables/disables this player"); togglePlayerItem.CheckboxEvent += (s, enabled) => { PlayerSettings.SetValue(player, EnabledKey, enabled.ToString()); RefreshSubItems(togglePlayerItem, playerMenu, enabled); }; playerMenu.AddItem(togglePlayerItem); playerMenu.AddItem(ConstructSettingsListItem(player, "Character", "Select a character for player " + player, CharacterHashKey, PedHash.Trevor)); playerMenu.AddItem(ConstructSettingsListItem(player, "Blip sprite", "Select a blip sprite for player " + player, BlipSpriteKey, BlipSprite.Standard)); playerMenu.AddItem(ConstructSettingsListItem(player, "Blip color", "Select a blip color for player " + player, BlipColorKey, BlipColor.Green)); UIMenu controllerMenu = menuPool.AddSubMenu(playerMenu, "Assign controller"); playerMenu.MenuItems.FirstOrDefault(item => { return(item.Text.Equals("Assign controller")); }).Description = "Assign controller to player " + player; foreach (InputManager manager in InputManager.GetAvailableInputManagers()) { UIMenuItem controllerItem = new UIMenuItem(manager.DeviceName, "Assign this controller to player " + player); string guid = manager.DeviceGuid; if (PlayerSettings.GetValue(player, ControllerKey, "").Equals(guid)) { controllerItem.SetRightBadge(UIMenuItem.BadgeStyle.Star); } if (manager is DirectInputManager) { DirectInputManager directManager = (DirectInputManager)manager; bool configured = DirectInputManager.IsConfigured(directManager.device, GetIniFile()); controllerItem.Enabled = configured; if (!configured) { controllerItem.Description = "Please configure this controller first from the main menu"; } } controllerItem.Activated += (s, i) => { if (i.Enabled) { PlayerSettings.SetValue(player, ControllerKey, guid); controllerMenu.MenuItems.ForEach(item => { if (item == controllerItem) { item.SetRightBadge(UIMenuItem.BadgeStyle.Star); } else { item.SetRightBadge(UIMenuItem.BadgeStyle.None); } }); } }; controllerMenu.AddItem(controllerItem); } RefreshSubItems(togglePlayerItem, playerMenu, check); } UIMenuCheckboxItem cameraItem = new UIMenuCheckboxItem("GTA:SA style camera", customCamera, "Enables/disables the GTA:SA style camera"); cameraItem.CheckboxEvent += (s, i) => { customCamera = !customCamera; Settings.SetValue(Name, CustomCameraKey, customCamera.ToString()); Settings.Save(); }; menu.AddItem(cameraItem); UIMenu controllersMenu = menuPool.AddSubMenu(menu, "Configure controllers"); menu.MenuItems.FirstOrDefault(item => { return(item.Text.Equals("Configure controllers")); }).Description = "Configure controllers before assigning them to players"; foreach (Joystick stick in DirectInputManager.GetDevices()) { UIMenuItem stickItem = new UIMenuItem(stick.Information.ProductName, "Configure " + stick.Information.ProductName); controllersMenu.AddItem(stickItem); stickItem.Activated += (s, i) => { ControllerWizard wizard = new ControllerWizard(stick); bool success = wizard.StartConfiguration(GetIniFile()); if (success) { UI.Notify("Controller successfully configured, you can now assign this controller"); } else { UI.Notify("Controller configuration canceled, please configure your controller before playing"); } SetupMenu(); }; } menu.RefreshIndex(); }