public void StopRefuelEvent() { Events["StartRefuelEvent"].active = true; Events["StopRefuelEvent"].active = false; Events["ShowSettings"].active = true; refuelingState = RefuelingState.RECOVERY; UpdateLEDs(); }
public void StartRefuelEvent() { UpdateEva(); if (eva == null) { return; } if (!IsKerbalOnLadder()) { ScreenMessages.PostScreenMessage(Localizer.GetStringByTag("#SuRePl_Error_Ladder"), 3.0f, ScreenMessageStyle.UPPER_CENTER).color = XKCDColors.Red; return; } Events["StartRefuelEvent"].active = false; Events["StopRefuelEvent"].active = true; refuelingState = RefuelingState.INIT; UpdateLEDs(); }
void ProcessRefuel() { if ((eva != null) && !IsKerbalOnLadder() && refuelingState != RefuelingState.RECOVERY) { StopRefuelEvent(); return; } if (refuelingState == RefuelingState.INIT) { foreach (var element in listGofr) { Destroy(element); } foreach (var s in listSettings) { s._stopped = false; s._message = false; } listGofr.Clear(); gofr = GameDatabase.Instance.GetModel("SuitRefuelPlugin/Parts/Gofr/model"); gofr.SetActive(true); gofr.transform.parent = transform; //gofr.transform.localPosition = new Vector3(0, 0, 0); gofr.transform.position = plug.position; gofr.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); gofr.transform.rotation = plug.rotation; listGofr.Add(gofr); refuelingState = RefuelingState.UNTWISTING; } else if (refuelingState == RefuelingState.UNTWISTING) { var node = Instantiate(gofr); node.SetActive(true); node.transform.parent = transform; node.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); if (listGofr.Count < 5) { node.transform.rotation = gofr.transform.rotation; node.transform.position = gofr.transform.position + gofr.transform.forward * GOFR_STEP; } else if (listGofr.Count < 10) { node.transform.position = gofr.transform.position + gofr.transform.forward * GOFR_STEP; Vector3 targetDir = eva.transform.position - node.transform.position; Vector3 newDir = Vector3.RotateTowards(gofr.transform.forward, targetDir, 0.03f, 0); node.transform.rotation = Quaternion.LookRotation(newDir); } else if (listGofr.Count < 20) { node.transform.position = gofr.transform.position + gofr.transform.forward * GOFR_STEP; Vector3 targetDir = eva.transform.position - node.transform.position; Vector3 newDir = Vector3.RotateTowards(gofr.transform.forward, targetDir, 0.05f, 0); node.transform.rotation = Quaternion.LookRotation(newDir); } else { node.transform.position = gofr.transform.position + gofr.transform.forward * GOFR_STEP; Vector3 targetDir = eva.transform.position - node.transform.position; Vector3 newDir = Vector3.RotateTowards(gofr.transform.forward, targetDir, 0.06f, 0); node.transform.rotation = Quaternion.LookRotation(newDir); } gofr = node; listGofr.Add(gofr); if ((listGofr.Count > 150) || ((listGofr.Count > 70) && (Vector3.Distance(gofr.transform.position, eva.transform.position) < OK_DISTANCE_GOFR_TO_EVA))) { refuelingState = RefuelingState.REFUELING; } } else if (refuelingState == RefuelingState.REFUELING) { if (KerbalIsOutOfGofr()) { StopRefuelEvent(); return; } float deltaTimeAmount = TimeWarp.fixedDeltaTime; bool stop = true; foreach (var s in listSettings) { if ((s.pumping != PumpingMode.NONE) && (!s._stopped)) { Part partFrom, partTo; if (s.pumping == PumpingMode.IN) { partFrom = this.part; partTo = eva.Parts[0]; } else { partFrom = eva.Parts[0]; partTo = this.part; } bool good = true; float take = (float)s.res.maxAmount / 5.0f * deltaTimeAmount; int idResource = (s.res.resourceName.GetHashCode() == idEvaPropellant) ? idMonoPropellant : s.res.resourceName.GetHashCode(); float amount = partFrom.RequestResource(idResource, take); if (amount <= part.resourceRequestRemainingThreshold) { if (s._message) { ShowRefuelEndedMessage(s.res.info.displayName, s.pumping, false); } good = false; } else { idResource = (s.res.resourceName.GetHashCode() == idEvaPropellant) ? idEvaPropellant : idResource; float profit = partTo.RequestResource(idResource, -amount); if (-profit < amount) { if (s._message) { ShowRefuelEndedMessage(s.res.info.displayName, s.pumping, true); } good = false; idResource = (s.res.resourceName.GetHashCode() == idEvaPropellant) ? idMonoPropellant : idResource; partFrom.RequestResource(idResource, -amount - profit); } if (amount < (take / 10.0f)) { if (s._message) { ShowRefuelEndedMessage(s.res.info.displayName, s.pumping, false); } good = false; } } if (!good) { s._stopped = true; } else { stop = false; s._message = true; } } } if (stop) { StopRefuelEvent(); return; } } else if (refuelingState == RefuelingState.RECOVERY) { if (listGofr.Any()) { var g = listGofr.Last(); Destroy(g); listGofr.Remove(g); } else { refuelingState = RefuelingState.NONE; UpdateLEDs(); } } }