Exemplo n.º 1
0
 public void EnableLastOverridenUpgrade(UpgradePrefab prefab)
 {
     foreach (string upgrade in overridenUpgrades)
     {
         if (prefab.upgrades.Exists(p => p.upgradeName == upgrade))
         {
             PartUpgrade pu = prefab.upgrades.Find(p => p.upgradeName == upgrade);
             if (pu.upgradeState == UpgradeState.Overriden)
             {
                 pu.upgradeState = UpgradeState.Enabled;
                 break;
             }
         }
     }
 }
Exemplo n.º 2
0
        // Update the state of every upgrades in the prefab in responseto player toggling
        // Update the enabled state of relevant Upgrades in the UpgradeHandler
        public void UpdateUpgradesState(UpgradeWidgetComponent toggledUpdate)
        {
            PartUpgrade pu = upgrades.Find(p => p.upgradeName == toggledUpdate.upgrade);

            pu.upgradeState = toggledUpdate.upgradeState;

            // We reenable overriden upgrades that may have been disabled :
            if (toggledUpdate.upgradeState == PartUpgrade.UpgradeState.Enabled)
            {
                pu.UpdateOverridenUpgrades(this);
            }
            // In case the player has disabled an upgrade, we need to enable the last overriden upgrade, if any
            else if (toggledUpdate.upgradeState == PartUpgrade.UpgradeState.Disabled)
            {
                pu.EnableLastOverridenUpgrade(this);
            }
        }
Exemplo n.º 3
0
        // Build the string to display in the widget
        public string GetInfo(UpgradePrefab infoPrefab = null)
        {
            string info = "";

            switch (upgradeState)
            {
            case UpgradeState.Overriden:
                if (ReferenceEquals(infoPrefab, null))
                {
                    info += "Overriden\n";
                    break;
                }
                PartUpgrade pu = infoPrefab.upgrades.Find(p => p.isOverriding(upgradeName) && p.upgradeState == UpgradeState.Enabled);
                if (!ReferenceEquals(pu, null))
                {
                    info += "Overriden by upgrade:\n" + pu.upgradeTitle;
                    break;
                }
                break;

            case UpgradeState.Enabled:
                info += "Upgrade is enabled\n";
                break;

            case UpgradeState.Disabled:
                info += "Upgrade is disabled\n";
                break;

            case UpgradeState.Unresearched:
                info += "Will be available at node:\n" + techTitle;
                break;
            }
            info += "\n";

            if (moduleUpgrades.Exists(p => p.moduleName == "PartStatsUpgradeModule") && moduleUpgrades.Find(p => p.moduleName == "PartStatsUpgradeModule").statsNode != null)
            {
                info += "<color=#99ff00ff><b>Part stats modifiers:</b></color>\n";
                ConfigNode cn   = moduleUpgrades.Find(p => p.moduleName == "PartStatsUpgradeModule").statsNode;
                float      mass = 0f;
                if (cn.TryGetValue("mass", ref mass))
                {
                    info += "Mass: " + mass.ToString("+ 0.###;- #.###") + " t\n";
                }
                if (cn.TryGetValue("massAdd", ref mass))
                {
                    info += "Mass: " + mass.ToString("+ 0.###;- #.###") + " t\n";
                }
                float cost = 0f;
                if (cn.TryGetValue("cost", ref cost))
                {
                    info += "Cost: " + cost.ToString("+ 0;- #") + " <sprite=2 tint=1>\n";
                }
                if (cn.TryGetValue("costAdd", ref cost))
                {
                    info += "Cost: " + cost.ToString("+ 0;- #") + " <sprite=2 tint=1>\n";
                }
                foreach (ConfigNode.Value v in cn.values)
                {
                    if (v.name != "mass" && v.name != "cost" && v.name != "massAdd " && v.name != "costAdd")
                    {
                        info += v.name + ": " + v.value + "\n";
                    }
                }
            }
            foreach (ModuleUpgrade mu in moduleUpgrades)
            {
                if (mu.moduleName != "PartStatsUpgradeModule")
                {
                    info += "<color=#99ff00ff><b>" + mu.moduleTitle + ":</b></color>\n" + mu.description + "\n";
                }
            }
            return(info);
        }
Exemplo n.º 4
0
        public UpgradePrefab(Part part)
        {
            this.part = part;

            upgrades = new List <PartUpgrade>();
            foreach (PartModule pm in part.Modules)
            {
                for (int i = 0; i < pm.upgrades.Count; i++)
                {
                    PartUpgrade partUpgrade;
                    // if the PartUpgrade doesn't exist, we need to create it
                    if (upgrades.Where(p => p.upgradeName == pm.upgrades[i].GetValue("name__")).Count() == 0)
                    {
                        partUpgrade = new PartUpgrade(pm.upgrades[i].GetValue("name__"), part.partInfo.name);
                        upgrades.Add(partUpgrade);
                    }
                    else
                    {
                        partUpgrade = upgrades.Find(p => p.upgradeName == pm.upgrades[i].GetValue("name__"));
                    }

                    // Add the ModuleUpgrade to the PartUpgrade
                    PartUpgrade.ModuleUpgrade mu = new PartUpgrade.ModuleUpgrade();
                    mu.moduleName  = pm.moduleName;
                    mu.moduleTitle = pm.GUIName;
                    mu.description = pm.upgrades[i].GetValue("description__");
                    mu.statsNode   = pm.upgrades[i].GetNode("PartStats");

                    partUpgrade.AddModule(mu);

                    // We check the fields "ExclusiveWith__" (standard modules) or "IsAdditiveUpgrade__" (PartStatsUpgradeModule)
                    // to find wich upgrades this upgrade override.
                    if (i > 0)
                    {
                        if (pm is PartStatsUpgradeModule)
                        {
                            bool isAdditive = false; // TODO : check if this is the default value
                            pm.upgrades[i].TryGetValue("IsAdditiveUpgrade__", ref isAdditive);
                            // If this UPGRADE node has IsAdditiveUpgrade__ = false, this mean that it will override
                            // all previous UPGRADE nodes. This mean that those upgrades can't be selected as long as this one is,
                            // so we iterate trough the previous nodes and add them to the override list
                            if (!isAdditive)
                            {
                                for (int j = i - 1; j >= 0; j--)
                                {
                                    partUpgrade.AddOverride(pm.upgrades[j].GetValue("name__"));
                                }
                            }
                        }
                        else
                        {
                            for (int j = i - 1; j >= 0; j--)
                            {
                                if (pm.upgrades[i].GetValue("ExclusiveWith__") == pm.upgrades[j].GetValue("ExclusiveWith__"))
                                {
                                    partUpgrade.AddOverride(pm.upgrades[j].GetValue("name__"));
                                }
                            }
                        }
                    }
                }
            }
            // Finally, we determine wich upgrade can be toggled by the player
            ParseUpgradesState();
        }