/// <summary> /// Убрать владение устройстом со всех игроков /// </summary> /// <param name="parDevice">Физическое устройство OpenTK</param> protected void DeassignFromAllPlayers(MDeviceOpenTk parDevice) { var players = PlayerBindsControllerWatchdog.PlayerControllers; foreach (var player in players) { var bindsToDeviceAxis = player.MGameActionAxisBindToDevices.FindAll(parX => parX.TargetDevice == parDevice); foreach (var bindToDevice in bindsToDeviceAxis) { player.MGameActionAxisBindToDevices.Remove(bindToDevice); } var bindsToDeviceButtons = player.MGameActionButtonBindToDevices.FindAll(parX => parX.TargetDevice == parDevice); foreach (var bindToDevice in bindsToDeviceButtons) { player.MGameActionButtonBindToDevices.Remove(bindToDevice); } } }
/// <summary> /// Определить и назначить стандартное управление для игрока /// </summary> /// <param name="parMPlayerController">Контроллер игрока</param> /// <param name="parAvailableDevice">Доступное физическое устройство OpenTK</param> protected void DefineAndPerformStandardAssignToPlayer(MPlayerController parMPlayerController, MDeviceOpenTk parAvailableDevice) { void ConditionalAxisBindToDevice(EGameActionAxis parGameActionAxis, MDeviceOpenTk parDeviceOpenTk, string parAxisId) { if (parMPlayerController.MPlayerRef.GameActionAxises.ContainsKey(parGameActionAxis)) { parMPlayerController.MGameActionAxisBindToDevices.Add( new MGameActionAxisBindToDevice(parDeviceOpenTk, parAxisId, parMPlayerController.MPlayerRef.GameActionAxises[parGameActionAxis])); } } void ConditionalButtonBindToDevice(EGameActionButton parGameActionButton, MDeviceOpenTk parDeviceOpenTk, string parButtonId) { if (parMPlayerController.MPlayerRef.GameActionButtons.ContainsKey(parGameActionButton)) { parMPlayerController.MGameActionButtonBindToDevices.Add( new MGameActionButtonBindToDevice(parDeviceOpenTk, parButtonId, parMPlayerController.MPlayerRef.GameActionButtons[parGameActionButton])); } } if (parAvailableDevice.IsDeviceKeyboardAndMouse()) { ConditionalButtonBindToDevice(EGameActionButton.Button_A, parAvailableDevice, ((int)Key.Space).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Button_B, parAvailableDevice, ((int)Key.Escape).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Button_X, parAvailableDevice, ((int)Key.E).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Button_Y, parAvailableDevice, ((int)Key.Q).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Up, parAvailableDevice, ((int)Key.W).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Down, parAvailableDevice, ((int)Key.S).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Left, parAvailableDevice, ((int)Key.A).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Right, parAvailableDevice, ((int)Key.D).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Up, parAvailableDevice, ((int)Key.Up).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Down, parAvailableDevice, ((int)Key.Down).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Left, parAvailableDevice, ((int)Key.Left).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Right, parAvailableDevice, ((int)Key.Right).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Button_Start, parAvailableDevice, ((int)Key.Enter).ToString()); ConditionalButtonBindToDevice(EGameActionButton.Button_Bumper_Shift, parAvailableDevice, ((int)Key.ShiftLeft).ToString()); } else { ConditionalAxisBindToDevice(EGameActionAxis.LeftCursorX, parAvailableDevice, MDeviceOpenTk.THUMBSTICK_LEFT_X_ID); ConditionalAxisBindToDevice(EGameActionAxis.LeftCursorY, parAvailableDevice, MDeviceOpenTk.THUMBSTICK_LEFT_Y_ID); ConditionalButtonBindToDevice(EGameActionButton.Button_A, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_BOTTOM_1_ID); ConditionalButtonBindToDevice(EGameActionButton.Button_B, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_BOTTOM_2_ID); ConditionalButtonBindToDevice(EGameActionButton.Button_X, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_TOP_1_ID); ConditionalButtonBindToDevice(EGameActionButton.Button_Y, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_TOP_2_ID); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Up, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_DPAD_UP_ID); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Down, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_DPAD_DOWN_ID); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Left, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_DPAD_LEFT_ID); ConditionalButtonBindToDevice(EGameActionButton.Dpad_Menu_Right, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_DPAD_RIGHT_ID); ConditionalButtonBindToDevice(EGameActionButton.Button_Start, parAvailableDevice, MDeviceOpenTk.GAMEPAD_BUTTON_CENTER_1_ID); } }
/// <summary> /// Присвоить владение устройством главному игроку /// </summary> /// <param name="parDevice">Физическое устройство OpenTK</param> protected void AssignToMainPlayer(MDeviceOpenTk parDevice) { DefineAndPerformStandardAssignToPlayer(_mainPlayerRef, parDevice); }