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; }
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 + ")"); } }
void OnExplosion(Part p) { if (p.inverseStage < KSPOperatingSystem.VesselController.Vessel.currentStage) { KSPOperatingSystem.Anomaly(); } }
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(); } }
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(); } }
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(); }
/* * Called every frame */ public override void OnUpdate() { float t = Time.time; fps = 0.95f * fps + 0.05f * (1 / Time.deltaTime); KSPOperatingSystem.Update(); }
protected override void OnExecute(ConnectorIn input) { if (input == In("Enable")) { KSPOperatingSystem.AddWatchedValue(this, DisplayValue); ExecuteNext("OnEnable"); } else { OnDestroy(); ExecuteNext("OnDisable"); } }
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); }
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(); }
public void ReloadSubRoutines() { subRoutines = KSPOperatingSystem.ListSubRoutines(); }
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; }
protected override void OnDestroy() { KSPOperatingSystem.RemoveActionButton(OnClick); }
public override void OnInit() { KSPOperatingSystem.AddActionButton(OnClick, GetName); }
protected override void OnDestroy() { KSPOperatingSystem.RemoveWatchedValue(this); }
public void CustomAction8(KSPActionParam param) { KSPOperatingSystem.CustomAction(8); }