Ejemplo n.º 1
0
        internal static TowerModel CreateTowerModel(ModTower modTower, int[] tiers)
        {
            var towerModel = modTower.GetTowerModel();

            towerModel.tiers = tiers;
            towerModel.tier  = tiers.Max();
            if (tiers.Sum() > 0)
            {
                towerModel.AddTiersToName();
            }

            // add the names to applied upgrades
            foreach (var modUpgrade in modTower.upgrades)
            {
                if (tiers[modUpgrade.Path] >= modUpgrade.Tier)
                {
                    towerModel.appliedUpgrades = towerModel.appliedUpgrades.Add(modUpgrade.Id).ToArray();
                }
            }

            // add the upgrade path models
            for (var i = 0; i < modTower.tierMaxes.Length; i++)
            {
                var tierMax = modTower.tierMaxes[i];
                if (tiers[i] < tierMax)
                {
                    var newTiers = tiers.Duplicate();
                    newTiers[i]++;
                    if (newTiers.Min() == 0) // no triple cross-pathed towers (yet...)
                    {
                        var modUpgrade = modTower.upgrades[i, tiers[i] + 1];

                        var upgradePathModel = new UpgradePathModel(modUpgrade.Id,
                                                                    $"{towerModel.baseId}-{newTiers.Printed()}", newTiers.Count(t => t > 0), newTiers.Max());
                        towerModel.upgrades = towerModel.upgrades.AddTo(upgradePathModel);
                    }
                }
            }

            // actually apply the upgrades
            foreach (var modUpgrade in modTower.upgrades.Cast <ModUpgrade>()
                     .OrderByDescending(modUpgrade => modUpgrade.Priority)
                     .ThenBy(modUpgrade => 6 * modUpgrade.Path + modUpgrade.Tier))
            {
                if (tiers[modUpgrade.Path] >= modUpgrade.Tier)
                {
                    modUpgrade.ApplyUpgrade(towerModel);
                }
            }

            return(towerModel);
        }