public void ButtonReleasedCallback(IController controller, int button, FlightCtrlState state) { if (!HighLogic.LoadedSceneIsFlight) { return; } var config = m_Configuration.GetConfigurationByIController(controller); List <Bitset> masksToRemove = new List <Bitset>(); foreach (Bitset evaluatedMask in config.evaluatedDiscreteActionMasks) { for (int i = 0; i < controller.GetButtonsCount(); i++) { if (!controller.GetButtonState(i) && evaluatedMask.Get(i)) { masksToRemove.Add(evaluatedMask); break; } } } foreach (Bitset maskRemove in masksToRemove) { config.evaluatedDiscreteActionMasks.Remove(maskRemove); } if (controller.lastUpdateMask != null) { foreach (var presetEditor in m_PresetEditors) { Bitset bitset = controller.lastUpdateMask.Copy(); bitset.Set(button); presetEditor.SetCurrentBitmask(bitset); } } var mask = controller.GetButtonsMask(); mask.Set(button); var actions = config.GetCurrentPreset().GetDiscreteBinding(mask); if (actions != null) { foreach (DiscreteAction action in actions) { m_FlightManager.EvaluateDiscreteActionRelease(config, action, state); } } }
public static ControllerPreset GetXInputDefaultRocketPreset(IController controller) { ControllerPreset preset = new ControllerPreset(); preset.name = "XInput Default"; int buttonsCount = controller.GetButtonsCount(); #if !LINUX preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.DPadLeft), DiscreteAction.SAS); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.DPadRight), DiscreteAction.Light); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.DPadUp), DiscreteAction.RCS); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.DPadDown), DiscreteAction.Gear); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.Back), DiscreteAction.Abort); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.X), DiscreteAction.NextPreset); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.Y), DiscreteAction.FullThrottle); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.A), DiscreteAction.Stage); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.B), DiscreteAction.CutThrottle); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.LeftStick), DiscreteAction.CameraViewToggle); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.RightStick), DiscreteAction.NavballToggle); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.Guide), DiscreteAction.OrbitMapToggle); preset.SetContinuousBinding((int)XInput.AnalogInput.LeftStickX, new Bitset(buttonsCount), ContinuousAction.CameraX); preset.SetContinuousBinding((int)XInput.AnalogInput.LeftStickY, new Bitset(buttonsCount), ContinuousAction.CameraY); preset.SetContinuousBinding((int)XInput.AnalogInput.LeftStickY, new Bitset(buttonsCount, (int)XInput.Button.LB), ContinuousAction.CameraZoom); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickX, new Bitset(buttonsCount), ContinuousAction.Yaw); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickY, new Bitset(buttonsCount), ContinuousAction.Pitch); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickX, new Bitset(buttonsCount, (int)XInput.Button.LB), ContinuousAction.Roll); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickX, new Bitset(buttonsCount, (int)XInput.Button.RB), ContinuousAction.X); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickY, new Bitset(buttonsCount, (int)XInput.Button.RB), ContinuousAction.Y); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickX, new Bitset(buttonsCount, (int)XInput.Button.LB | (int)XInput.Button.RB), ContinuousAction.Z); preset.SetContinuousBinding((int)XInput.AnalogInput.LeftTrigger, new Bitset(buttonsCount), ContinuousAction.ThrottleDecrement); preset.SetContinuousBinding((int)XInput.AnalogInput.RightTrigger, new Bitset(buttonsCount), ContinuousAction.ThrottleIncrement); #endif return preset; }
public static ControllerPreset GetXInputDefaultRocketPreset(IController controller) { ControllerPreset preset = new ControllerPreset(); preset.name = "XInput Default"; int buttonsCount = controller.GetButtonsCount(); #if !LINUX preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.DPadLeft), DiscreteAction.SAS); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.DPadRight), DiscreteAction.Light); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.DPadUp), DiscreteAction.RCS); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.DPadDown), DiscreteAction.Gear); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.Back), DiscreteAction.Abort); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.X), DiscreteAction.NextPreset); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.Y), DiscreteAction.FullThrottle); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.A), DiscreteAction.Stage); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.B), DiscreteAction.CutThrottle); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.LeftStick), DiscreteAction.CameraViewToggle); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.RightStick), DiscreteAction.NavballToggle); preset.SetDiscreteBinding(new Bitset(buttonsCount, (int)XInput.Button.Guide), DiscreteAction.OrbitMapToggle); preset.SetContinuousBinding((int)XInput.AnalogInput.LeftStickX, new Bitset(buttonsCount), ContinuousAction.CameraX, false); preset.SetContinuousBinding((int)XInput.AnalogInput.LeftStickY, new Bitset(buttonsCount), ContinuousAction.CameraY, false); preset.SetContinuousBinding((int)XInput.AnalogInput.LeftStickY, new Bitset(buttonsCount, (int)XInput.Button.LB), ContinuousAction.CameraZoom, false); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickX, new Bitset(buttonsCount), ContinuousAction.Yaw, false); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickY, new Bitset(buttonsCount), ContinuousAction.Pitch, false); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickX, new Bitset(buttonsCount, (int)XInput.Button.LB), ContinuousAction.Roll, false); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickX, new Bitset(buttonsCount, (int)XInput.Button.RB), ContinuousAction.X, false); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickY, new Bitset(buttonsCount, (int)XInput.Button.RB), ContinuousAction.Y, false); preset.SetContinuousBinding((int)XInput.AnalogInput.RightStickX, new Bitset(buttonsCount, (int)XInput.Button.LB | (int)XInput.Button.RB), ContinuousAction.Z, false); preset.SetContinuousBinding((int)XInput.AnalogInput.LeftTrigger, new Bitset(buttonsCount), ContinuousAction.ThrottleDecrement, false); preset.SetContinuousBinding((int)XInput.AnalogInput.RightTrigger, new Bitset(buttonsCount), ContinuousAction.ThrottleIncrement, false); #endif return(preset); }
public void ButtonReleasedCallback(IController controller, int button, FlightCtrlState state) { if (!HighLogic.LoadedSceneIsFlight) { return; } var config = m_Configuration.GetConfigurationByIController(controller); List<Bitset> masksToRemove = new List<Bitset>(); foreach (Bitset evaluatedMask in config.evaluatedDiscreteActionMasks) { for (int i = 0; i < controller.GetButtonsCount(); i++) { if (!controller.GetButtonState(i) && evaluatedMask.Get(i)) { masksToRemove.Add(evaluatedMask); break; } } } foreach (Bitset maskRemove in masksToRemove) { config.evaluatedDiscreteActionMasks.Remove(maskRemove); } if(controller.lastUpdateMask != null) { foreach (var presetEditor in m_PresetEditors) { Bitset bitset = controller.lastUpdateMask.Copy(); bitset.Set(button); presetEditor.SetCurrentBitmask(bitset); } } var mask = controller.GetButtonsMask(); mask.Set(button); var actions = config.GetCurrentPreset().GetDiscreteBinding(mask); if(actions != null) { foreach (DiscreteAction action in actions) { m_FlightManager.EvaluateDiscreteActionRelease(config, action, state); } } }