Exemplo n.º 1
0
        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;
 }