Ejemplo n.º 1
0
        public override void OnStart(PartModule.StartState state)
        {
            KSPOperatingSystem.Boot(Path.Combine(Path.Combine(Environment.CurrentDirectory, "GameData"), "FlightComputer"));
            GameEvents.onPartDie.Add(OnExplosion);
            LastStartState = state;
            GUIController.lastStartState = state;
            GUIController.Start();
            //Log.Write("TAC Examples-SimplePartModule [" + this.GetInstanceID().ToString("X") + "][" + Time.time.ToString("0.0000") + "]: OnStart: " + state);
            Log.Write("Starting with state: " + state);

            StartCoroutine("StartDelay");
            startTime = 0;


            //drawer = new ProgramDrawer(this, loadedWindowRect, smallWindowRect);
            if (loadedPrograms == null)
            {
                KSPOperatingSystem.AddProgram();
            }
            else
            {
                try
                {
                    KSPOperatingSystem.LoadStateBase64(loadedPrograms, programsCompressed);
                    Log.Write(KSPOperatingSystem.ProgramCount + " programs loaded from file");
                }
                catch (Exception e)
                {
                    KSPOperatingSystem.AddProgram();
                    Log.Write("Error loading program: " + e.Message + " (State: " + LastStartState + ")");
                }
                loadedPrograms = null;
            }
            loadedPrograms = null;
        }
Ejemplo n.º 2
0
        public override void OnSave(ConfigNode node)
        {
            //Log.Write("TAC Examples-SimplePartModule [" + this.GetInstanceID().ToString("X") + "][" + Time.time.ToString("0.0000") + "]: OnSave: " + node);
            Log.Write("Saving program " + LastStartState);

            try
            {
                if (loadedPrograms != null)
                {
                    node.AddValue("FlightProgram", loadedPrograms);
                    Log.Write("Program string saved, state: " + LastStartState);
                }
                else
                {
                    string data = KSPOperatingSystem.SaveStateBase64(true);
                    node.AddValue("FlightProgram", data);
                    Log.Write(KSPOperatingSystem.ProgramCount + " programs saved, state: " + LastStartState);
                }
                node.AddValue("IsCompressed", "yes");
                GUIController.SaveState(node);
            }
            catch (Exception e)
            {
                Log.Write("Could not save flight program: " + e.Message + " at " + e.StackTrace + " (State: " + LastStartState + ")");
            }
        }
Ejemplo n.º 3
0
 void OnExplosion(Part p)
 {
     if (p.inverseStage < KSPOperatingSystem.VesselController.Vessel.currentStage)
     {
         KSPOperatingSystem.Anomaly();
     }
 }
Ejemplo n.º 4
0
        private IEnumerator StartDelay()
        {
            while (!CheckVesselReady())
            {
                //Log.Write("Vessel not ready");
                yield return(null);
            }
            //wait for stable fps:
            while (vessel == null ? true : !FlightGlobals.ready)
            {
                yield return(null);
            }
            KSPOperatingSystem.SetVessel(vessel);
            //Log.Write("FPS: " + fps);
            startTime = Planetarium.GetUniversalTime();
            Log.Write("Start time: " + startTime);
            double t = startTime;

            while (t < (startTime + 2))
            {
                //Log.Write("Vessel not ready " + Planetarium.GetUniversalTime());
                t = Planetarium.GetUniversalTime();
                yield return(null);
            }
            //Log.Write("Vessel ready " + Planetarium.GetUniversalTime());
            if ((LastStartState & StartState.PreLaunch) == StartState.PreLaunch)
            {
                KSPOperatingSystem.Launch();
            }
        }
Ejemplo n.º 5
0
 private void ReloadSubroutine()
 {
     Log.Write("Reloading subroutine " + SubRoutineBlueprint);
     if (this.subRoutineInstance != null)
     {
         this.subRoutineInstance.Destroy();
         this.subRoutineInstance.ExitNode.OnExecuted     -= ExitNode_OnExecuted;
         this.subRoutineInstance.EntryNode.OnRequestData -= EntryNode_OnRequestData;
         this.subRoutineInstance = null;
     }
     try
     {
         this.subRoutineInstance = KSPOperatingSystem.LoadSubRoutine(SubRoutineBlueprint, true);
     }
     catch (Exception e)
     {
         Log.Write("Failed to load subroutine: " + e.Message);
     }
     if (this.subRoutineInstance == null)
     {
         Log.Write("Could not load SubRoutine " + SubRoutineBlueprint + ", deleting node");
         RequestRemoval();
     }
     else
     {
         this.subRoutineInstance.ExitNode.OnExecuted     += ExitNode_OnExecuted;
         this.subRoutineInstance.EntryNode.OnRequestData += EntryNode_OnRequestData;
         SyncInputs();
         SyncOutputs();
     }
 }
Ejemplo n.º 6
0
        public override void Draw()
        {
            GUILayout.BeginVertical();
            scrollPosition = GUILayout.BeginScrollView(scrollPosition);

            GUILayout.BeginHorizontal();
            var values = KSPOperatingSystem.GetActionButtons();

            GUILayout.BeginVertical();
            int i = 0;

            foreach (var a in values)
            {
                if (i > 0 && i % MAXCOLS == 0)
                {
                    GUILayout.EndVertical();
                    GUILayout.BeginVertical();
                }
                if (GUILayout.Button(a.Value()) && !GUIController.InEditor)
                {
                    a.Key();
                }
            }
            GUILayout.EndVertical();
            GUILayout.EndHorizontal();
            GUILayout.EndScrollView();
            GUILayout.Space(GUIController.ElSize);
            GUILayout.EndVertical();
        }
Ejemplo n.º 7
0
        /*
         * Called every frame
         */
        public override void OnUpdate()
        {
            float t = Time.time;

            fps = 0.95f * fps + 0.05f * (1 / Time.deltaTime);

            KSPOperatingSystem.Update();
        }
Ejemplo n.º 8
0
 protected override void OnExecute(ConnectorIn input)
 {
     if (input == In("Enable"))
     {
         KSPOperatingSystem.AddWatchedValue(this, DisplayValue);
         ExecuteNext("OnEnable");
     }
     else
     {
         OnDestroy();
         ExecuteNext("OnDisable");
     }
 }
Ejemplo n.º 9
0
 public override void OnLoad(ConfigNode node)
 {
     loadedPrograms = null;
     KSPOperatingSystem.Boot(Path.Combine(Path.Combine(Environment.CurrentDirectory, "GameData"), "FlightComputer"));
     //Log.Write("TAC Examples-SimplePartModule [" + this.GetInstanceID().ToString("X") + "][" + Time.time.ToString("0.0000") + "]: OnLoad: " + node);
     Log.Write("Loading program, State: " + LastStartState + ", Vessel: " + vessel);
     if (node.HasValue("FlightProgram"))
     {
         loadedPrograms     = node.GetValue("FlightProgram");
         programsCompressed = node.HasValue("IsCompressed");
     }
     else
     {
         Log.Write("No program found!");
     }
     GUIController.LoadState(node);
 }
Ejemplo n.º 10
0
        public override void Draw()
        {
            GUILayout.BeginVertical();
            scrollPosition = GUILayout.BeginScrollView(scrollPosition);

            GUILayout.BeginHorizontal();
            var values = KSPOperatingSystem.GetWatchedValues();

            GUILayout.BeginVertical();
            for (int i = 0; i < values.Length; i++)
            {
                if (i > 0 && i % MAXCOLS == 0)
                {
                    GUILayout.EndVertical();
                    GUILayout.BeginVertical();
                }
                GUILayout.TextField(values[i], GUIController.CustomStyles);
            }
            GUILayout.EndVertical();
            GUILayout.EndHorizontal();
            GUILayout.EndScrollView();
            GUILayout.Space(GUIController.ElSize);
            GUILayout.EndVertical();
        }
Ejemplo n.º 11
0
 public void ReloadSubRoutines()
 {
     subRoutines = KSPOperatingSystem.ListSubRoutines();
 }
Ejemplo n.º 12
0
        private void DrawNodeToolbar()
        {
            toolbarScrollPos = GUILayout.BeginScrollView(toolbarScrollPos, GUILayout.Width(toolbarWidth), GUILayout.Height(WinRect.height - 40));
            GUILayout.BeginVertical();
            GUILayout.BeginHorizontal();
            if (GUILayout.Button("<", GUIController.CustomStyles))
            {
                selectedProgram--;
            }
            GUILayout.Label("Program " + (selectedProgram + 1) + "/" + KSPOperatingSystem.ProgramCount);
            if (GUILayout.Button(">", GUIController.CustomStyles))
            {
                selectedProgram++;
            }
            GUILayout.EndHorizontal();
            #region back button
            //draw back button

            if (GUILayout.Button(nodeCats.TopCategory ? "---- Nodes ----" : "---- Back ----", GUIController.CustomStyles))
            {
                if (nodeCats.TopCategory)
                {
                    showNodes = !showNodes;
                }
                else
                {
                    nodeCats.CategoryUp();
                }
            }

            #endregion

            #region nodes
            if (showNodes)
            {
                //Draw categories
                var cats = nodeCats.ListSubCategories();
                if (cats.Length > 0)
                {
                    foreach (var cat in cats)
                    {
                        GUI.backgroundColor = cat.color;
                        if (GUILayout.Button(cat.name, GUIController.CustomStyles))
                        {
                            nodeCats.SelectSubCategory(cat.name);
                            return;
                        }
                    }
                }

                //Draw nodes
                var nodes = nodeCats.ListNodes();
                foreach (var node in nodes)
                {
                    GUI.backgroundColor = node.color;
                    if (GUILayout.Button(node.name, GUIController.CustomStyles) && Program != null)
                    {
                        Log.Write("Adding node: " + node.name);
                        draggedNode = Program.AddNode(node.type, GUIUtility.GUIToScreenPoint(GUIController.mousePos));
                        dragInfo    = new Vector2(0, 0);
                    }
                }
            }


            #endregion

            GUILayout.Space(GUIController.ElSize);
            #region variables
            GUI.backgroundColor = GUIController.DefaultColor;
            //Draw add variable
            if (Program != null)
            {
                if (GUILayout.Button("---- Variables ----", GUIController.CustomStyles))
                {
                    showVariables = !showVariables;
                }
                if (showVariables)
                {
                    MethodInfo addMethod = Program.GetType().GetMethod("AddVariable");

                    GUILayout.Label("Add variables");
                    foreach (var k in selectableVariableTypes)
                    {
                        GUI.backgroundColor = TypeColor(k.Value);
                        if (GUILayout.Toggle(selectedVariableType == k.Value, k.Key, GUIController.CustomStyles))
                        {
                            selectedVariableType = k.Value;
                        }
                    }
                    GUI.backgroundColor = GUIController.DefaultColor;
                    GUILayout.Label("Name");
                    currentVarName = GUILayout.TextField(currentVarName, GUIController.CustomStyles);
                    if (GUILayout.Button("Add", GUIController.CustomStyles))
                    {
                        if (!string.IsNullOrEmpty(currentVarName))
                        {
                            Program.AddVariable(selectedVariableType, currentVarName);
                        }
                    }
                    GUILayout.Label("Variables");
                    //draw variables
                    foreach (var v in Program.Variables)
                    {
                        GUILayout.BeginHorizontal();
                        GUI.backgroundColor = TypeColor(v.Value.Type);
                        if (GUILayout.Button(v.Key, GUIController.CustomStyles))
                        {
                            //add variableNode
                            draggedNode = Program.AddVariableNode(GUIUtility.GUIToScreenPoint(GUIController.mousePos), v.Key);
                            dragInfo    = new Vector2(0, 0);
                        }
                        if (GUILayout.Button("X", GUILayout.MaxWidth(GUIController.ElSize)))
                        {
                            //remove variable
                            Program.RemoveVariable(v.Key);
                        }
                        GUILayout.EndHorizontal();
                    }
                }
            }
            GUI.backgroundColor = GUIController.DefaultColor;

            #endregion

            GUILayout.Space(GUIController.ElSize);
            #region subroutines

            if (GUILayout.Button("---- Subroutines ----", GUIController.CustomStyles))
            {
                showSubRoutines = !showSubRoutines;
            }
            if (showSubRoutines && Program != null)
            {
                foreach (var s in subRoutines)
                {
                    if (GUILayout.Button(s, GUIController.CustomStyles))
                    {
                        draggedNode = Program.AddSubRoutineNode(GUIUtility.GUIToScreenPoint(GUIController.mousePos), s);
                        dragInfo    = new Vector2(0, 0);
                    }
                    GUILayout.BeginHorizontal();
                    if (GUILayout.Button("Edit", GUIController.CustomStyles))
                    {
                        currentSubroutine     = KSPOperatingSystem.LoadSubRoutine(s, true);
                        currentSubroutineName = s;
                    }
                    GUI.backgroundColor = Color.red;
                    if (GUILayout.Button("Delete", GUIController.CustomStyles))
                    {
                        KSPOperatingSystem.DeleteSubRoutine(s);
                        ReloadSubRoutines();
                    }
                    GUI.backgroundColor = GUIController.DefaultColor;
                    GUILayout.EndHorizontal();
                }
                if (currentSubroutine == null)
                {
                    if (GUILayout.Button("Create Subroutine", GUIController.CustomStyles))
                    {
                        currentSubroutine = new SubRoutine();
                    }
                }
                else
                {
                    GUILayout.Label("Add parameter");
                    if (GUILayout.Toggle(selectedParameterType == typeof(Connector.Exec), "Exec", GUIController.CustomStyles))
                    {
                        selectedParameterType = typeof(Connector.Exec);
                    }
                    foreach (var k in selectableVariableTypes)
                    {
                        GUI.backgroundColor = TypeColor(k.Value);
                        if (GUILayout.Toggle(selectedParameterType == k.Value, k.Key, GUIController.CustomStyles))
                        {
                            selectedParameterType = k.Value;
                        }
                    }
                    GUI.backgroundColor = GUIController.DefaultColor;
                    GUILayout.Label("Name", GUIController.CustomStyles);
                    currentParamName = GUILayout.TextField(currentParamName, GUIController.CustomStyles);
                    GUILayout.BeginHorizontal();
                    if (GUILayout.Button("Add Input", GUIController.CustomStyles) && !string.IsNullOrEmpty(currentParamName))
                    {
                        currentSubroutine.EntryNode.AddRoutineInput(currentParamName, selectedParameterType);
                    }
                    if (GUILayout.Button("Add Output", GUIController.CustomStyles) && !string.IsNullOrEmpty(currentParamName))
                    {
                        currentSubroutine.ExitNode.AddRoutineOuput(currentParamName, selectedParameterType);
                    }
                    GUILayout.EndHorizontal();
                    GUILayout.Space(GUIController.ElSize);
                    currentSubroutineName = GUILayout.TextField(currentSubroutineName, GUIController.CustomStyles);
                    if (GUILayout.Button("Save", GUIController.CustomStyles) && !string.IsNullOrEmpty(currentSubroutineName))
                    {
                        KSPOperatingSystem.SaveSubRoutine(currentSubroutineName, currentSubroutine, true);
                        currentSubroutine     = null;
                        currentSubroutineName = "";
                        ReloadSubRoutines();
                        KSPOperatingSystem.InitPrograms();
                    }
                    if (GUILayout.Button("Cancel", GUIController.CustomStyles))
                    {
                        currentSubroutine     = null;
                        currentSubroutineName = "";
                    }
                }
            }

            #endregion

            GUILayout.EndVertical();
            GUILayout.EndScrollView();
            GUI.backgroundColor = GUIController.DefaultColor;
        }
Ejemplo n.º 13
0
 protected override void OnDestroy()
 {
     KSPOperatingSystem.RemoveActionButton(OnClick);
 }
Ejemplo n.º 14
0
 public override void OnInit()
 {
     KSPOperatingSystem.AddActionButton(OnClick, GetName);
 }
Ejemplo n.º 15
0
 protected override void OnDestroy()
 {
     KSPOperatingSystem.RemoveWatchedValue(this);
 }
Ejemplo n.º 16
0
 public void CustomAction8(KSPActionParam param)
 {
     KSPOperatingSystem.CustomAction(8);
 }