public bool StartProcess(KontrolSystemProcess process, Vessel vessel) { switch (process.State) { case KontrolSystemProcessState.Available: KSPContext context = new KSPContext(consoleBuffer); Entrypoint entrypoint = process.EntrypointFor(HighLogic.LoadedScene, context); if (entrypoint == null) { return(false); } CorouttineAdapter adapter = new CorouttineAdapter(entrypoint(vessel), context, message => OnProcessDone(process, message)); process.MarkRunning(context); Coroutine coroutine = StartCoroutine(adapter); if (coroutines.ContainsKey(process.id)) { StopCoroutine(coroutines[process.id]); coroutines[process.id] = coroutine; } else { coroutines.Add(process.id, coroutine); } return(true); default: return(false); } }
public void MarkDone(string message) { if (!string.IsNullOrEmpty(message)) { PluginLogger.Instance.Info($"Process {id} for module {module.Name} terminated with: {message}"); ScreenMessages.PostScreenMessage( $"<color=red><size=20>Module {module.Name} failed: {message}</size></color>", 5, ScreenMessageStyle.UPPER_CENTER); } state = KontrolSystemProcessState.Available; context?.Cleanup(); context = null; }
public void MarkRunning(KSPContext newContext) { state = KontrolSystemProcessState.Running; context?.Cleanup(); context = newContext; }