Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
 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());
     }
 }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        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;
            }
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        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();
        }
Exemplo n.º 8
0
        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();
        }
Exemplo n.º 9
0
        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);
        }