private void Awake() { //Debug.Log("FillItUp Awake"); smartTankPresent = AssemblyLoader.loadedAssemblies.Any(a => a.assembly.GetName().Name == "SmartTank"); allShipResources = null; allPartsResourcesByStage = null; allPartsResourcesShip = null; _config = FillItUpConfigNode.LoadOrCreate(); _windowId = WindowHelper.NextWindowId("FillItUp"); _windowPosition = new Rect(_config.WindowX, _config.WindowY, 0, 0); _resourcesByStage = new FuelModel(); _resourcesShip = new FuelModel(); Instance = this; //GameEvents.onGUIApplicationLauncherReady.Add(OnGUIAppLauncherReady); OnGUIAppLauncherReady(); //GameEvents.onEditorPartEvent.Add(OnEditorPartEvent); GameEvents.onEditorLoad.Add(OnEditorLoad); GameEvents.onEditorUndo.Add(OnEditorUndo); GameEvents.onEditorShipModified.Add(OnEditorShipModified); GameEvents.onEditorLoad.Add(this.OnShipLoad); GameEvents.onPartPriorityChanged.Add(this.OnPartPriorityChanged); GameEvents.onPartRemove.Add(this.onPartAttachRemove); GameEvents.onPartAttach.Add(this.onPartAttachRemove); GameEvents.onEditorPartPlaced.Add(this.OnPartPriorityChanged); GameEvents.StageManager.OnGUIStageSequenceModified.Add(OnGUIStageSequenceModified); _windowStyle = new GUIStyle(HighLogic.Skin.window); }
public bool AreTanksFull(ShipConstruct ship, int stage, FuelTypes.StageResDef stages) { foreach (var part in stages.parts) { foreach (var resource in part.Resources) { foreach (var fuelType in stages.resources) { key = new Tuple <string, int>(fuelType.Second, stage); if (resource.resourceName == fuelType.Second) { if (!FillItUp.Instance.ignoreLockedTanks || resource.flowState) { float f; if (model.TryGetValue(key, out f)) { if (f < 1) { return(false); } } } break; } } } } return(true); }
public void Apply(ShipConstruct ship, int stage, FuelTypes.StageResDef stages, bool allStages = false) { if (ship == null || stages == null) { return; } if (Changed) { foreach (var part in stages.parts) { foreach (var resource in part.Resources) { foreach (var fuelType in stages.resources) { if (resource.resourceName == fuelType.Second) { if (!FillItUp.Instance.ignoreLockedTanks || resource.flowState) { float f; key = new Tuple <string, int>(fuelType.Second, stage); if (model.TryGetValue(key, out f)) { resource.amount = resource.maxAmount * f; } } break; } } } } var resourceEditors = EditorLogic.FindObjectsOfType <UIPartActionResourceEditor>(); foreach (var ed in resourceEditors) { ed.resourceAmnt.text = ed.Resource.amount.ToString("F1"); ed.resourceMax.text = ed.Resource.maxAmount.ToString("F1"); ed.slider.value = (float)(ed.Resource.amount / ed.Resource.maxAmount); } GameEvents.onEditorShipModified.Fire(ship); if (!allStages) { Changed = false; } } }
void DoSingleStage(int stage, FuelTypes.StageResDef _fuelTypes, FuelModel _resources, ref float allFuels) { GUILayout.BeginHorizontal(); GUILayout.Label("Use the sliders or [E]mpty and [F]ull buttons to adjust fuel in all tanks."); GUILayout.EndHorizontal(); foreach (var ftype in _fuelTypes.resources) { GUILayout.BeginHorizontal(); int stg = stage; bool locked = FillItUp.Instance._config.RuntimeLockedResources.ContainsKey(StageRes.Key2(stg, ftype.First)); var s3 = "all stages"; if (stage != StageRes.ALLSTAGES) { s3 = "this stage"; } var newLocked = GUILayout.Toggle(locked, new GUIContent(" ", "Lock this resource in " + s3)); if (newLocked != locked) { if (newLocked) { FillItUp.Instance._config.AddRuntimeLockedResource(stg, ftype.First); } else { FillItUp.Instance._config.RemoveRuntimeLockedResource(stg, ftype.First); } } GUILayout.Label(ftype.First, GUILayout.Width(maxLabelSize + 5)); if (GUILayout.Button(new GUIContent("E", "Empty"), GUILayout.Width(25))) { _resources.Set(stage, ftype.Second, 0); } float f = _resources.Get(stage, ftype.Second) * 100; //GUIStyle sliderStyle = new GUIStyle("horizontalslider"); //sliderStyle.padding.top += 5; //GUI.skin.horizontalSlider = sliderStyle; var newf = GUILayout.HorizontalSlider(f, 0, 100, GUILayout.Width(200)); if (newf != f) { newf = Math.Max(0, Math.Min(100, newf)); _resources.Set(stage, ftype.Second, newf / 100); } if (GUILayout.Button(new GUIContent("F", "Full"), GUILayout.Width(25))) { _resources.Set(stage, ftype.Second, 1); } f = (float)Math.Round(_resources.Get(stage, ftype.Second) * 100); string s = GUILayout.TextField(f.ToString(), GUILayout.Width(35)); //if (s != s1) { try { var f1 = float.Parse(s); if (f1 != f) { _resources.Set(stage, ftype.Second, f1 / 100); } } catch { Log.Error("Error parsing number"); } } GUILayout.Label("%"); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Label("All Active Fuels", boldLabelFont); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Empty", GUILayout.Width(60))) { _resources.SetAll(stage, 0); allFuels = 0; } GUILayout.FlexibleSpace(); var newAllFuels = GUILayout.HorizontalSlider(allFuels, 0, 100, GUILayout.Width(250)); if (allFuels != newAllFuels) { allFuels = newAllFuels; _resources.SetAll(stage, allFuels / 100); } GUILayout.FlexibleSpace(); if (GUILayout.Button("Full", GUILayout.Width(50))) { _resources.SetAll(stage, 1); allFuels = 100; } var f2 = (float)Math.Truncate(allFuels); string s1 = GUILayout.TextField(f2.ToString("F0"), GUILayout.Width(35)); //if (s != s1) { try { var f = float.Parse(s1); if (f2 != f) { allFuels = f; _resources.SetAll(stage, allFuels / 100); } } catch { Log.Error("Error parsing number"); } } GUILayout.Label("%"); GUILayout.EndHorizontal(); }
void FillSingleStage(int stage, FuelTypes.StageResDef _fuelTypes, FuelModel _resources, ref float f) { _resources.SetAll(stage, 1); }
public void SetFuelTypes(FuelTypes.StageResDef setfuelTypes) { this.fuelTypes = setfuelTypes; }
public FuelModel() { model = new Dictionary <Tuple <string, int>, float>(); fuelTypes = new FuelTypes.StageResDef(); }
void DoSingleStage(int stage, FuelTypes.StageResDef _fuelTypes, FuelModel _resources, ref float allFuels) { GUILayout.BeginHorizontal(); GUILayout.Label("Use the sliders or [E]mpty and [F]ull buttons to adjust fuel in all tanks."); GUILayout.EndHorizontal(); foreach (var ftype in _fuelTypes.resources) { GUILayout.BeginHorizontal(); GUILayout.Label(ftype.First, GUILayout.Width(maxLabelSize + 5)); if (GUILayout.Button("E", GUILayout.Width(25))) { _resources.Set(stage, ftype.Second, 0); } float f = _resources.Get(stage, ftype.Second) * 100; GUIStyle sliderStyle = new GUIStyle("horizontalslider"); //sliderStyle.padding.top += 5; //GUI.skin.horizontalSlider = sliderStyle; var newf = GUILayout.HorizontalSlider(f, 0, 100, GUILayout.Width(150)); if (newf != f) { newf = Math.Max(0, Math.Min(100, newf)); _resources.Set(stage, ftype.Second, newf / 100); } if (GUILayout.Button("F", GUILayout.Width(25))) { _resources.Set(stage, ftype.Second, 1); } f = (float)Math.Round(_resources.Get(stage, ftype.Second) * 100); string s = GUILayout.TextField(f.ToString(), GUILayout.Width(35)); try { var f1 = float.Parse(s); if (f1 != f) { _resources.Set(stage, ftype.Second, f / 100); } } catch { } GUILayout.Label("%"); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Label("All Fuels", boldLabelFont); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Empty", GUILayout.Width(60))) { _resources.SetAll(stage, 0); allFuels = 0; } GUILayout.FlexibleSpace(); var newAllFuels = GUILayout.HorizontalSlider(allFuels, 0, 100, GUILayout.Width(250)); if (allFuels != newAllFuels) { allFuels = newAllFuels; _resources.SetAll(stage, allFuels / 100); } GUILayout.FlexibleSpace(); if (GUILayout.Button("Fill", GUILayout.Width(60))) { _resources.SetAll(stage, 1); allFuels = 100; } GUILayout.EndHorizontal(); }