Exemple #1
0
            public static void RegisterTowerInInventory(ShopTowerDetailsModel details, string insertBefore, List <TowerDetailsModel> allTowersInTheGame)
            {
                // get the tower details for the tower insertBefore and insert the new tower into the index towerBefore is at, shifting everything after it by 1
                TowerDetailsModel towerAfter = allTowersInTheGame.ToArray().FirstOrDefault(tower => tower.towerId == insertBefore);

                allTowersInTheGame.Insert(allTowersInTheGame.IndexOf(towerAfter), details);
            }
Exemple #2
0
        /// <summary>
        /// Get the number position of this TowerModel in the list of all tower models
        /// </summary>
        public static int?GetIndex(this TowerModel towerModel)
        {
            List <TowerDetailsModel> allTowers = Game.instance.model.towerSet.ToList();
            TowerDetailsModel        detail    = allTowers.FirstOrDefault(towerDetail => towerDetail.towerId == towerModel.baseId);

            return(allTowers.IndexOf(detail));
        }
Exemple #3
0
        public static bool IsHero(this TowerDetailsModel towerDetailsModel)
        {
            var heroDetailsModel = towerDetailsModel.TryCast <HeroDetailsModel>();
            var isHero           = heroDetailsModel != null;

            return(isHero);
        }
        /// <summary>
        /// Adds a TowerDetailsModel to the GameModel's TowerSet at a particular index
        /// </summary>
        /// <param name="model"></param>
        /// <param name="towerDetailsModel"></param>
        /// <param name="index"></param>
        public static void AddTowerDetails(this GameModel model, TowerDetailsModel towerDetailsModel, int index)
        {
            var towerSet = model.towerSet.ToList();

            if (index < 0)
            {
                index = 0;
            }
            else if (index > towerSet.Count)
            {
                index = towerSet.Count;
            }
            towerSet.Insert(index, towerDetailsModel);
            model.towerSet = towerSet.ToArray();

            for (var i = 0; i < model.towerSet.Count; i++)
            {
                model.towerSet[i].towerIndex = i;
            }

            var towerList = Game.towers.ToList();

            towerList.Insert(index, towerDetailsModel.towerId);
            Game.towers = towerList.ToArray();
        }
Exemple #5
0
        public static TowerDetailsModel MakeCopy(this TowerDetailsModel towerDetailsModel, string newName, bool addToGame = false)
        {
            var duplicate = towerDetailsModel.Duplicate();

            duplicate.towerId = newName;
            duplicate.SetName(newName);

            if (addToGame)
            {
                Game.instance.model.towerSet = Game.instance.model.towerSet.AddTo(towerDetailsModel);
            }

            return(duplicate);
        }
        /// <summary>
        /// Adds a TowerDetailsModel to the GameModel's TowerSet, taking into account what set of towers it's a part of
        /// <br/>
        /// For example, a new custom Primary tower would be added right at the end of the primary towers,
        /// and right before the start of the military towers
        /// </summary>
        /// <param name="model">The GameModel</param>
        /// <param name="towerDetailsModel">The TowerDetailsModel to be added</param>
        /// <param name="set">The TowerSet of the tower to be added</param>
        public static void AddTowerDetails(this GameModel model, TowerDetailsModel towerDetailsModel, string set)
        {
            var towerSet = model.towerSet.ToList();
            var index    = towerSet.Count;

            if (!string.IsNullOrEmpty(set))
            {
                var lastOfSet = towerSet.LastOrDefault(tdm => tdm.GetTower().towerSet == set);
                if (lastOfSet != default)
                {
                    index = towerSet.IndexOf(lastOfSet) + 1;
                }
            }
            AddTowerDetails(model, towerDetailsModel, index);
        }
        public static int GetIndex(this TowerDetailsModel towerDetailsModel)
        {
            var towers = Game.instance.model.towerSet;

            if (towers is null)
            {
                return(-1);
            }

            for (int i = 0; i < towers.Count; i++)
            {
                if (towers[i].name == towerDetailsModel.name)
                {
                    return(i);
                }
            }

            return(-1);
        }
        //needs more work

        /*public static bool HasPlayerUnlocked(this TowerDetailsModel towerDetailsModel)
         * {
         *  var towerModel = Game.instance.model.GetTower(towerDetailsModel.towerId);
         *  return towerModel.IsTowerUnlocked().Value;
         * }*/



        // this would be helpful but might not use it because it requires user in game

        /*public static void SetCount(this TowerDetailsModel towerDetailsModel, int count)
         * {
         *  towerDetailsModel.towerCount = count;
         *  var details = Game.instance?.model.towerSet.ToIl2CppList();
         *  //var details = Game.instance?.GetTowerDetailModels().TryCast<Il2CppSystem.Collections.Generic.List<TowerDetailsModel>>();
         *  InGame.instance?.GetTowerInventory(1).SetTowerMaxes(details);
         * }*/

        public static TowerModel GetTower(this TowerDetailsModel towerDetailsModel)
        {
            return(Game.instance.model.GetTowerWithName(towerDetailsModel.towerId));
        }
Exemple #9
0
 /// <summary>
 /// Sets the name of this TowerDetailsModel, following the naming convention of ofther TowerDetailModels.
 /// Example, using "NewMonkey" will set the name to "TowerDetailsModel_NewMonkey"
 /// </summary>
 /// <param name="towerDetailsModel"></param>
 /// <param name="newName"></param>
 public static void SetName(this TowerDetailsModel towerDetailsModel, string newName)
 {
     towerDetailsModel.name = string.Concat(towerDetailsModel.GetIl2CppType().Name, "_", newName);
 }
Exemple #10
0
 /// <summary>
 /// Get the ShopTowerDetails for this TowerDetailModel
 /// </summary>
 public static ShopTowerDetailsModel GetShopTowerDetails(this TowerDetailsModel towerDetailsModel)
 {
     return(towerDetailsModel.TryCast <ShopTowerDetailsModel>());
 }
Exemple #11
0
 /// <summary>
 /// Get the TowerPurchaseButton that is used to buy this specific TowerDetailModel
 /// </summary>
 public static TowerPurchaseButton GetTowerPurchaseButton(this TowerDetailsModel towerDetailsModel)
 {
     Assets.Scripts.Models.Towers.TowerModel towerModel = Game.instance.model.GetTower(towerDetailsModel.towerId);
     return(towerModel.GetTowerPurchaseButton());
 }
 public static TowerDetailsModel MakeCopy(this TowerDetailsModel towerDetailsModel, string newName, bool addToGame = false)
 {
     return(towerDetailsModel.MakeCopy(newName, towerDetailsModel.towerIndex, addToGame));
 }
 /// <summary>
 /// Adds a tower
 /// </summary>
 /// <param name="model"></param>
 /// <param name="towerDetailsModel"></param>
 public static void AddTowerDetails(this GameModel model, TowerDetailsModel towerDetailsModel)
 {
     AddTowerDetails(model, towerDetailsModel, "");
 }
 /// <summary>
 /// Adds a TowerModel to the official list of TowerModels being used by the game
 ///
 /// Equivalent to calling Game.instance.model.AddTowerToGame(...)
 /// </summary>
 /// <param name="newTowerModel">The new tower model</param>
 /// <param name="towerDetailsModel">A TowerDetailsModel to go with it, if it'll be in the shop</param>
 public static void AddTowerToGame(TowerModel newTowerModel, TowerDetailsModel towerDetailsModel = null)
 {
     Game.instance.model.AddTowerToGame(newTowerModel, towerDetailsModel);
 }
        /// <summary>
        /// Add a TowerModel to the game.
        /// </summary>
        /// <param name="towerModel">TowerModel to add</param>
        /// <param name="towerDetailsModel">Optionally add a TowerDetailsModel for your towerModel</param>
        public static void AddTowerToGame(this GameModel model, TowerModel towerModel, TowerDetailsModel towerDetailsModel = null)
        {
            model.towers = model.towers.AddTo(towerModel);

            if (towerDetailsModel != null)
            {
                model.towerSet = model.towerSet.AddTo(towerDetailsModel);
            }
        }
Exemple #16
0
        /// <summary>
        /// Add a TowerModel to the game.
        /// </summary>
        /// <param name="towerModel">TowerModel to add</param>
        /// <param name="towerDetailsModel">Optionally add a TowerDetailsModel for your towerModel</param>
        public static void AddTowerToGame(this GameModel model, TowerModel towerModel, TowerDetailsModel towerDetailsModel = null)
        {
            model.towers = model.towers.AddTo(towerModel);

            ModTowerHandler.TowerCache[towerModel.name] = towerModel;

            if (towerDetailsModel != null)
            {
                model.towerSet = model.towerSet.AddTo(towerDetailsModel);
            }
        }
        /// <summary>
        /// Add a TowerModel to the game.
        /// <br/>
        /// Using this method is preferable than modifying the GameModel's towers list manually, as this does more things
        /// to more fully integrate the tower within the game
        /// </summary>
        /// <param name="towerModel">TowerModel to add</param>
        /// <param name="towerDetailsModel">Optionally add a TowerDetailsModel for your towerModel</param>
        public static void AddTowerToGame(this GameModel model, TowerModel towerModel, TowerDetailsModel towerDetailsModel = null)
        {
            model.towers = model.towers.AddTo(towerModel);
            model.AddChildDependant(towerModel);

            ModTowerHelper.TowerCache[towerModel.name] = towerModel;

            if (towerDetailsModel != null)
            {
                model.AddTowerDetails(towerDetailsModel, towerModel.towerSet);
            }

            // MelonLogger.Msg($"Added towerModel {towerModel.name} to the game");
        }