public void Communicate(Widget w, string reason, Action a) { if (shared == null) { return; } if (ConnectivityManager.HasConnectionToControl(shared.Vessel)) { var mdelay = ConnectivityManager.GetDelayToControl(shared.Vessel) + extraDelay; if (mdelay > 0.1 || extraDelay > 0) { var newat = new ActionTime(w, reason, a, shared.UpdateHandler.CurrentTime + mdelay); // Linear insert because almost always it will be added at the end // Only if FTL travel or if new pathways come online will it not. int index = delayedActions.Count; while (index - 1 >= 0 && delayedActions[index - 1].time > newat.time) { index--; } delayedActions.Insert(index, newat); } else { a(); } } }
private void UpdateDeployment(double deltaTime) { if (!ConnectivityManager.HasConnectionToControl(Shared.Vessel)) { if (!signalLossWarning) { DrawStatus("Signal lost. Waiting to re-acquire signal."); progressBarSubBuffer.Enabled = true; signalLossWarning = true; } } else { if (signalLossWarning) { if (double.IsPositiveInfinity(waitTotal)) { waitTotal = ConnectivityManager.GetDelayToControl(Shared.Vessel); } signalLossWarning = false; } waitElapsed += Math.Min(deltaTime, waitTotal - waitElapsed); if (waitElapsed >= waitTotal) { if (deployingBatch) { // deploy all commands foreach (string commandText in batchQueue) { base.ProcessCommand(commandText); } batchQueue.Clear(); deployingBatch = false; } else { // deploy first command if (commandQueue.Count > 0) { string commandText = commandQueue[0]; commandQueue.RemoveAt(0); base.ProcessCommand(commandText); } } StopDeployment(); } else { DrawProgressBar(waitElapsed, waitTotal); } } }
void CheckConnectivity() { if (!ConnectivityManager.HasConnectionToControl(shared.Vessel)) { GUI.color = noControlColor; GUI.enabled = false; } else { var mdelay = ConnectivityManager.GetDelayToControl(shared.Vessel) + extraDelay; if (mdelay > 0.1) { GUI.color = slowControlColor; } } }