public double CalculateWork() { if (paused) { return(0); } double hours = 0; var built = builtStuff.required; var cost = buildCost.required; if (state == State.Building) { for (int i = built.Count; i-- > 0;) { var res = built[i]; hours += res.kerbalHours * res.amount; } } else if (state == State.Canceling) { for (int i = built.Count; i-- > 0;) { var res = built[i]; var cres = ELBuildWindow.FindResource(cost, res.name); hours += res.kerbalHours * (cres.amount - res.amount); } } return(hours); }
void RenamePad() { if (padInstance.Name != nameField.text) { padInstance.Name = nameField.text; ELBuildWindow.updateCurrentPads(); } }
void ParseBuildWindow(ConfigNode settings) { if (settings.HasNode("BuildWindow")) { var node = settings.GetNode("BuildWindow"); ELBuildWindow.LoadSettings(node); } }
void OnDestroy() { instance = null; GameEvents.onVesselChange.Remove(onVesselChange); GameEvents.onVesselWasModified.Remove(onVesselWasModified); GameEvents.onHideUI.Remove(onHideUI); GameEvents.onShowUI.Remove(onShowUI); GameEvents.onVesselSwitchingToUnloaded.Remove(VMSaveHack); }
void Awake() { instance = this; GameEvents.onVesselChange.Add(onVesselChange); GameEvents.onVesselWasModified.Add(onVesselWasModified); GameEvents.onHideUI.Add(onHideUI); GameEvents.onShowUI.Add(onShowUI); GameEvents.onVesselSwitchingToUnloaded.Add(VMSaveHack); enabled = false; }
int CountResources(List <BuildResource> built, List <BuildResource> cost) { int count = 0; foreach (var bres in built) { var cres = ELBuildWindow.FindResource(cost, bres.name); if (cres.amount - bres.amount > 0) { count++; } } return(count); }
public override void OnSave(ConfigNode config) { //Debug.Log (String.Format ("[EL] Settings save: {0}", config)); var settings = new ConfigNode("Settings"); config.AddNode(settings); settings.AddValue("UseKAC", use_KAC); settings.AddValue("KACAction", KACAction.ToString()); settings.AddValue("PreferBlizzy", PreferBlizzy); ELShipInfo.SaveSettings(settings.AddNode("ShipInfo")); ELBuildWindow.SaveSettings(settings.AddNode("BuildWindow")); ELResourceWindow.SaveSettings(settings.AddNode("ResourceWindow")); }
public void Awake() { ELAppButton.Toggle += ELBuildWindow.ToggleGUI; ELAppButton.RightToggle += ELResourceWindow.ToggleGUI; if (ToolbarManager.Instance == null) { return; } ELBuildWindowButton = ToolbarManager.Instance.add("ExtraplanetaryLaunchpads", "ELBuildWindowButton"); ELBuildWindowButton.Visible = ELSettings.PreferBlizzy; ELBuildWindowButton.TexturePath = "ExtraplanetaryLaunchpads/Textures/icon_button"; ELBuildWindowButton.ToolTip = "EL Build Window"; ELBuildWindowButton.OnClick += (e) => ELBuildWindow.ToggleGUI(); }
void SetPadMass() { double mass = 0; if (builtStuff != null && buildCost != null) { var built = builtStuff.required; var cost = buildCost.required; foreach (var bres in built) { var cres = ELBuildWindow.FindResource(cost, bres.name); mass += (cres.amount - bres.amount) * bres.density; } } builder.SetCraftMass(mass); }
public void OnRename() { ELBuildWindow.updateCurrentPads(); }
public void ShowUI() { ELBuildWindow.ShowGUI(); ELBuildWindow.SelectPad(control); }
public void HideUI() { ELBuildWindow.HideGUI(); }
private void DoWork_Cancel(double kerbalHours) { var built = builtStuff.required; var cost = buildCost.required; for (int i = built.Count; i-- > 0;) { built[i].deltaAmount = 0; } bool did_work; int count; do { count = CountResources(built, cost); if (kerbalHours == 0) { break; } if (count == 0) { break; } did_work = false; foreach (var bres in built) { var cres = ELBuildWindow.FindResource(cost, bres.name); double remaining = cres.amount - bres.amount; if (remaining <= 0) { continue; } double work = kerbalHours / count--; double amount = work / bres.kerbalHours; double base_amount = Math.Abs(amount); if (amount > remaining) { amount = remaining; } kerbalHours -= work; did_work = true; // do only the work required to process the actual amount // of returned or disposed resource double dkH = work * amount / base_amount; if (dkH > work) { dkH = work; } work -= dkH; // return any unused kerbal-hours to the pool kerbalHours += work; bres.amount += amount; //Debug.Log("remove delta: "+amount); bres.deltaAmount += amount; double capacity = padResources.ResourceCapacity(bres.name) - padResources.ResourceAmount(bres.name); if (amount > capacity) { amount = capacity; } if (amount <= 0) { continue; } padResources.TransferResource(bres.name, amount); } } while (did_work); // recount resources that still need to be taken from the build count = CountResources(built, cost); if (count == 0) { state = State.Planning; KACalarmID = ""; builtStuff = null; // ensure pad mass gets reset } SetPadMass(); }
private void DoWork_Cancel(double kerbalHours) { var built = builtStuff.required; var cost = buildCost.required; bool did_work; int count; do { count = 0; foreach (var bres in built) { var cres = ELBuildWindow.FindResource(cost, bres.name); if (cres.amount - bres.amount > 0) { count++; } } if (count == 0) { break; } double work = kerbalHours / count; did_work = false; count = 0; foreach (var bres in built) { var cres = ELBuildWindow.FindResource(cost, bres.name); double remaining = cres.amount - bres.amount; if (remaining <= 0) { continue; } double amount = work / bres.kerbalHours; double base_amount = Math.Abs(amount); if (amount > remaining) { amount = remaining; } count++; did_work = true; // do only the work required to process the actual amount // of returned or disposed resource kerbalHours -= work * amount / base_amount; bres.amount += amount; //Debug.Log("remove delta: "+amount); bres.deltaAmount = amount; double capacity = padResources.ResourceCapacity(bres.name) - padResources.ResourceAmount(bres.name); if (amount > capacity) { amount = capacity; } if (amount <= 0) { continue; } padResources.TransferResource(bres.name, amount); } } while (did_work); SetPadMass(); if (count == 0) { state = State.Planning; KACalarmID = ""; } }