protected override void OnEnterToState(KFSMState kfsmState) { Log.Info("OnEnterToState: LaunchState"); base.OnEnterToState(kfsmState); _audioSource = _obj.AddComponent <AudioSource>(); _audioSource.spatialBlend = 0; _audioSource.volume = GameSettings.VOICE_VOLUME; if (ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].LaunchSequenceControl) { FlightGlobals.ActiveVessel.OnFlyByWire = (FlightInputCallback)Delegate.Combine(FlightGlobals.ActiveVessel.OnFlyByWire, (FlightInputCallback)OnFlyByWire); } GameEvents.onVesselSituationChange.Add(SituationChanged); if (!ConfigInfo.Instance.Sequences.ContainsKey(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel))) { ConfigInfo.Instance.Sequences.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), Enumerable.Repeat(-1, 10).ToArray()); ConfigInfo.Instance.VesselOptions.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), new PerVesselOptions()); } _stages = ConfigInfo.Instance.Sequences[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].Select(x => x < 0 ? new Action(() => { }) : new Action(() => { if (ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].LaunchSequenceControl) { StageManager.ActivateStage(x); } })).ToList(); _dummy.StartCoroutine(this.TickLaunch()); }
public void InitNewConfig() { if (FlightGlobals.ActiveVessel != null && !ConfigInfo.Instance.Sequences.ContainsKey(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel))) { Log.Info("InitNewConfig for " + ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)); Sequences.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), Enumerable.Repeat(-1, 10).ToArray()); VesselOptions.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), new PerVesselOptions()); } }
protected override void OnLeaveFromState(KFSMState kfsmState) { Log.Info("OnLeaveFromState: LaunchState"); base.OnLeaveFromState(kfsmState); if (ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].LaunchSequenceControl) { Log.Info("Removing OnFlyByWire"); FlightGlobals.ActiveVessel.OnFlyByWire = (FlightInputCallback)Delegate.Remove(FlightGlobals.ActiveVessel.OnFlyByWire, (FlightInputCallback)OnFlyByWire); } GameEvents.onVesselSituationChange.Remove(SituationChanged); }
private void OnClickButton(PointerEventData arg0, UIRadioButton.State arg1, UIRadioButton.CallType arg2) { if (!_isEditorState) { return; } var stage = arg0.pointerPress.GetComponentInParent <StageGroup>(); if (stage != null) { ConfigInfo.Instance.Sequences[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)][_stageIndex] = stage.inverseStageIndex; _isEditorState = false; } }
private void OnFlyByWire(FlightCtrlState st) { Log.Info("OnFlyByWire, tic: " + _tick); switch (_tick) { case 7: case 6: case 5: case 4: case 3: case 2: case 1: st.mainThrottle = ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultInitialThrottle; break; case 0: //st.mainThrottle = 1f; Log.Info("OnFlyByWire, before GravityTurnAPI.Launch"); if (GravityTurnAPI.Launch()) // If GravityTurn is available { break; } st.mainThrottle = ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultThrottle; if (ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].enableSAS) { FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true); } break; default: if (ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].enableSAS) { FlightGlobals.ActiveVessel.ActionGroups.SetGroup(KSPActionGroup.SAS, true); } //st.mainThrottle = 0f; st.mainThrottle = ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultThrottle; break; } }
public SequenceState(string name, KerbalFsmEx machine) : base(name, machine) { _windowRect = CountDownMain.instance.saveLoadWinPos.sequenceWindow; _windowRect.height = 500; OnEnter = state => { if (!ConfigInfo.Instance.Sequences.ContainsKey(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel))) { ConfigInfo.Instance.Sequences.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), Enumerable.Repeat(-1, 10).ToArray()); ConfigInfo.Instance.VesselOptions.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), new PerVesselOptions()); } StageManager.Instance.Stages.ForEach(@group => group.Icons.ForEach(icon => icon.radioButton.onClick.AddListener(OnClickButton))); }; OnLeave = state => { StageManager.Instance.Stages.ForEach(@group => group.Icons.ForEach(icon => icon.radioButton.onClick.RemoveListener(OnClickButton))); }; updateMode = KFSMUpdateMode.MANUAL_TRIGGER; }
private void DrawSequenceWindow(int id) { GUILayout.BeginVertical(); GUILayout.Space(10); GUILayout.FlexibleSpace(); ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].LaunchSequenceControl = GUILayout.Toggle(ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].LaunchSequenceControl, "Launch sequence control", StyleFactory.ToggleStyle); ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].enableSAS = GUILayout.Toggle(ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].enableSAS, "Enable SAS at launch", StyleFactory.ToggleStyle); GUILayout.BeginHorizontal(); GUILayout.Space(20); GUILayout.Label("Initial throttle (" + (ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultInitialThrottle * 100).ToString("F1") + "%):"); GUILayout.FlexibleSpace(); ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultInitialThrottle = GUILayout.HorizontalSlider(ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultInitialThrottle, 0.01f, 0.99f, GUILayout.Width(100)); GUILayout.Space(20); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Space(20); GUILayout.Label("Final throttle (" + (ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultThrottle * 100).ToString("F1") + "%):"); GUILayout.FlexibleSpace(); ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultThrottle = GUILayout.HorizontalSlider(ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultThrottle, 0.01f, 1.0f, GUILayout.Width(100)); GUILayout.Space(20); GUILayout.EndHorizontal(); if (!ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].LaunchSequenceControl) { GUI.enabled = false; } if (GravityTurnAPI.GTAvailable) { ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].useGravityTurn = GUILayout.Toggle(ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].useGravityTurn, "Use Gravity Turn", StyleFactory.ToggleStyle); } GUI.enabled = true; GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label("Elapsed time", StyleFactory.LabelStyle); GUILayout.FlexibleSpace(); GUILayout.Label("Stage number", StyleFactory.LabelStyle); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); for (int i = 0; i < 10; i++) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label($"{i + 1} second", StyleFactory.LabelStyle); GUILayout.FlexibleSpace(); GUILayout.Label(ConfigInfo.Instance.Sequences[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)][i] < 0 ? "none" : ConfigInfo.Instance.Sequences[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)][i].ToString(), StyleFactory.LabelStyle, GUILayout.MinWidth(40)); bool flag = _isEditorState && i != _stageIndex; string label = _isEditorState && i == _stageIndex ? "Done" : "Set"; GUI.enabled = !flag; if (GUILayout.Button(label)) { _isEditorState = !_isEditorState; _stageIndex = i; } GUI.enabled = true; if (GUILayout.Button("Clear")) { _isEditorState = false; _stageIndex = -1; ConfigInfo.Instance.Sequences[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)][i] = -1; } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(new GUIContent(), StyleFactory.ButtonBackStyle)) { CountDownMain.instance.saveLoadWinPos.SaveSettings(); Machine.RunEvent("Init"); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndVertical(); GUI.DragWindow(); }
protected virtual void OnLeaveFromState(KFSMState kfsmState) { if (_dummy == null) { return; } Log.Info("OnLeaveFromState: InitialState"); FlightInputHandler.state.mainThrottle = ConfigInfo.Instance.VesselOptions[ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)].defaultThrottle; _dummy.StopAllCoroutines(); _obj.DestroyGameObjectImmediate(); }
public ConfigNode Load() { LoadSounds(); Log.Info("ConfigInfo.Load"); ConfigNode settingsFile = ConfigNode.Load(PLUGINDATA); ConfigNode node = null; if (settingsFile != null) { node = settingsFile.GetNode(SETTINGSNAME); if (node != null) { if (node.HasValue("soundEnabled")) { IsSoundEnabled = bool.Parse(node.GetValue("soundEnabled")); } if (node.HasValue("abort")) { AbortExecuted = bool.Parse(node.GetValue("abort")); } if (node.HasValue("scale")) { Scale = float.Parse(node.GetValue("scale")); } if (node.HasValue("soundSet")) { SoundSet = node.GetValue("soundSet"); } if (node.HasValue("position")) { WindowPosition = _wrapper.ToRect(node.GetValue("position")); Debug.LogWarning("Position is" + WindowPosition); } if (node.HasNode("sequence")) { var sequences = node.GetNodes("sequence"); Sequences.Clear(); VesselOptions.Clear(); foreach (var sequence in sequences) { PerVesselOptions pvo = new PerVesselOptions(); if (sequence.HasValue("LaunchSequenceControl")) { pvo.LaunchSequenceControl = bool.Parse(sequence.GetValue("LaunchSequenceControl")); } if (sequence.HasValue("enableSAS")) { pvo.enableSAS = bool.Parse(sequence.GetValue("enableSAS")); } if (sequence.HasValue("defaultInitialThrottle")) { pvo.defaultInitialThrottle = float.Parse(sequence.GetValue("defaultInitialThrottle")); } if (sequence.HasValue("defaultThrottle")) { pvo.defaultThrottle = float.Parse(sequence.GetValue("defaultThrottle")); } if (sequence.HasValue("useGravityTurn")) { pvo.useGravityTurn = bool.Parse(sequence.GetValue("useGravityTurn")); } VesselOptions.Add(sequence.GetValue("id"), pvo); int[] ar = Enumerable.Repeat(-1, 10).ToArray(); var d = sequence.GetValue("stages").Split(',').Select(int.Parse).ToArray(); for (int i = 0; i < d.Length; i++) { //Log.Info("Load, i: " + i + ", " + d[i]); ar[i] = d[i]; } Sequences.Add(sequence.GetValue("id"), ar); } } else { Sequences.Clear(); VesselOptions.Clear(); if (FlightGlobals.ActiveVessel != null && !ConfigInfo.Instance.Sequences.ContainsKey(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel))) { Sequences.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), Enumerable.Repeat(-1, 10).ToArray()); VesselOptions.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), new PerVesselOptions()); } } IsLoaded = true; } } else { Sequences.Clear(); VesselOptions.Clear(); } return(node); }