Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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;
 }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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"));
        }
Esempio n. 8
0
        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();
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
 public void OnRename()
 {
     ELBuildWindow.updateCurrentPads();
 }
Esempio n. 11
0
 public void ShowUI()
 {
     ELBuildWindow.ShowGUI();
     ELBuildWindow.SelectPad(control);
 }
Esempio n. 12
0
 public void HideUI()
 {
     ELBuildWindow.HideGUI();
 }
Esempio n. 13
0
        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 = "";
            }
        }