Example #1
0
        public void SpawnTowersOnRequest(uint _playerNetId)
        {
            //Find the player that requested towers by it's network id
            var player = GameEntityRegister.FindEntity(typeof(DestinationController), _playerNetId) as DestinationController;
            //Get it's position
            var playerPosition = player.transform.position;
            //Get all the towers
            var towers = GameEntityRegister.GetAllEntity(typeof(TowerEntityController)).Cast <TowerEntityController>();
            //Find towers near the player
            var nearTowers = FindTowersByDistance(towers, TOWER_SPAWN_DISTANCE, playerPosition);

            //spawn a sufficient number of towers
            if (nearTowers.Count <= NEAR_TOWERS_NUM)
            {
                int            remaining          = Mathf.Abs(nearTowers.Count - NEAR_TOWERS_NUM);
                List <Vector2> newTowersPositions = new List <Vector2>();
                for (int i = 0; i < remaining; i++)
                {
                    var newRandGPSCoords = RandGPSCoord(playerPosition, TOWER_SPAWN_DISTANCE);
                    newTowersPositions.Add(newRandGPSCoords);
                }
                if (remaining > 0)
                {
                    SpawnTowers(newTowersPositions);
                }
            }
        }
Example #2
0
        //TODO : This function must be moved somewhere else
        /// <summary>
        /// Find the nearest tower to the transform given in input that is not captured
        /// by no faction
        /// </summary>
        /// <param name="_gameEntityRegister"></param>
        /// <param name="_originPosition"></param>
        /// <returns>The nearest tower entity controller found</returns>
        public static TowerEntityController FindNearestTower(GameEntityRegister _gameEntityRegister,
                                                             Vector3 _originPosition)
        {
            TowerEntityController res = null;

            if (!ReferenceEquals(_gameEntityRegister, null) && !ReferenceEquals(_originPosition, null))
            {
                var allTowersReg = _gameEntityRegister.GetAllEntity(typeof(TowerEntityController));
                var allTowers    = allTowersReg.Cast <TowerEntityController>();

                res = allTowers.Where <TowerEntityController>(x => !x.IsTowerCaptured()).
                      OrderBy <TowerEntityController, double>(x => Vector3.Distance(_originPosition, x.transform.position)).
                      FirstOrDefault <TowerEntityController>();
            }
            else
            {
                Debug.LogError("No game entity register supplied.");
            }
            return(res);
        }
        /// <summary>
        /// This function is used in order to send a message to all the players
        /// that are connect that the winner faction for this period is declared
        /// and reset for all towers the owner
        /// </summary>
        public void DeclareWinnerFaction(string winningFaction)
        {
            var destIregistrable    = GameEntityRegister.GetAllEntity(typeof(DestinationController));
            var connectedPlayerDest = destIregistrable.Cast <DestinationController>();

            if (!ReferenceEquals(winningFaction, null) && winningFaction.Length > 0 && destIregistrable.Count > 0)
            {
                //Notify all players
                connectedPlayerDest.ToList().ForEach(x =>
                {
                    x.NotifyWinningFaction(winningFaction);
                });

                //Reset the owner for all towers
                TowersController.ResetAllTowers();
            }
            else
            {
                Debug.LogError("Invalid faction name or empty player list");
            }
        }