/// <summary>
        ///     Checks if the tower can be placed at it's current Position value
        /// </summary>
        /// <returns> true if the tower can be placed at it's position </returns>
        public bool CanPlaceTower()
        {
            var canPlaceTower = !CollidesWithPath();

            // check if tower is outside screen
            if (Position.x < 0 + GetRect().Size.x / 2 || Position.x > GetViewport().Size.x || Position.y < 0 ||
                Position.y > GetViewport().Size.y - GetRect().Size.y / 2)
            {
                return(false);
            }


            // check if tower is in map boundaries
            // could replace "magic numbers" with direct accessors to sky-box image and ground texture image
            if (Position.y < 130 + GetRect().Size.y / 2 || Position.x > 690 - GetRect().Size.x / 2)
            {
                return(false);
            }

            return(canPlaceTower switch
            {
                true when GameInfo.TowerList == null => canPlaceTower,
                // TODO : Check if tower collides with lava tiles
                true when GameInfo.TowerList.Any(tower => CollidesWithTower(tower)) => false,
                _ => canPlaceTower
            });
Example #2
0
 public SaveData()
 {
     plutonium    = 0;
     ore          = 0;
     Wave         = 1;
     AttackTowers = new TowerList();
     EnergyTowers = new TowerList();
     MiningTowers = new TowerList();
     WallTower    = new TowerList();
 }
Example #3
0
 void Awake()
 {
     if (!towerList)
     {
         towerList = this;
     }
     else
     {
         Destroy(this.gameObject);
     }
 }
Example #4
0
 public bool CanCraft(TowerList towers)
 {
     foreach (TowerAmount towerAmount in Materials)
     {
         if (towers.TowerCount(towerAmount.Tower) < towerAmount.Amount)
         {
             Debug.Log("Cannot craft anything");
             return(false);
         }
     }
     return(true);
 }
Example #5
0
 public void Craft(TowerList towers)
 {
     if (CanCraft(towers))
     {
         foreach (TowerAmount towerAmount in Materials)
         {
             for (int i = 0; i < towerAmount.Amount; i++)
             {
                 towers.RemoveTower(towerAmount.Tower);
             }
         }
         towers.AddTower(Result);
     }
 }
Example #6
0
        public void Update(GameTime gameTime)
        {
            Animate(6);
            #region map update
            key = Keyboard.GetState();
            mouse = Mouse.GetState();
            if (chateauLife > 0)
            {
                Rectangle mouseBox = new Rectangle(mouse.X, mouse.Y, 10, 10);
                personnage.Update(key);

                if (key.IsKeyDown(Keys.Space) & oldkey.IsKeyUp(Keys.Space))
                    ennemi.AddEnnemi(typeEnnemi.basicEnnemi, 0, 300);

                foreach (Ennemi enn in ennemi)
                {
                    if (enn.Life > 0)
                        enn.pathEnnemi(carte, enn);
                    foreach (Tower tour in tower)
                    {
                        quiAttaquer = new Queue<Ennemi>();
                        if (isInRange(tour, enn.EnnPosition) & enn.Life > 0)
                        {
                            quiAttaquer.Enqueue(enn);
                            if (bulletQueue.Count == 0)
                            {
                                bulletQueue.AddBullet(tour);
                                bulletQueue.Peek().target(quiAttaquer.Peek());
                                quiAttaquer.Peek().Life -= tour.power * 1;
                                bulletQueue.Peek().destroy(bulletQueue);
                            }
                            if (enn.Life <= 0 || !isInRange(tour, enn.EnnPosition))
                            {
                                if (enn.Life < 0)
                                    enn.Life = 0;
                                if (enn.Life == 0)
                                    gold += enn.piece;
                                quiAttaquer.Dequeue();
                            }
                        }
                    }
                    if (enn.ennemiPos.X > 1120 & enn.Life > 0)
                    {
                        chateauLife -= 1;
                        enn.Life = 0;
                    }
                }

                #region pose des tourelles
                if (mouseBox.Intersects(basicT) & mouse.LeftButton == ButtonState.Pressed & oldmouse.LeftButton == ButtonState.Released)
                {
                    if (gold >= 50 & carte[personnage.select.Y / 30, personnage.select.X / 30] == 0 & occupation[personnage.select.Y / 30,
                        personnage.select.X / 30] == false)
                    {
                        gold -= 50;
                        tower.AddTower(typeTower.basicTower, personnage.select.X, personnage.select.Y);
                        occupation[personnage.select.Y / 30, personnage.select.X / 30] = true;
                    }
                }
                if (mouseBox.Intersects(powerT) & mouse.LeftButton == ButtonState.Pressed & oldmouse.LeftButton == ButtonState.Released)
                {
                    if (gold >= 150 & carte[personnage.select.Y / 30, personnage.select.X / 30] == 0 & occupation[personnage.select.Y / 30,
                        personnage.select.X / 30] == false)
                    {
                        gold -= 150;
                        tower.AddTower(typeTower.powerTower, personnage.select.X, personnage.select.Y);
                        occupation[personnage.select.Y / 30, personnage.select.X / 30] = true;
                    }
                }
                if (mouseBox.Intersects(rangeT) & mouse.LeftButton == ButtonState.Pressed & oldmouse.LeftButton == ButtonState.Released)
                {
                    if (gold >= 100 & carte[personnage.select.Y / 30, personnage.select.X / 30] == 0 & occupation[personnage.select.Y / 30,
                        personnage.select.X / 30] == false)
                    {
                        gold -= 100;
                        tower.AddTower(typeTower.rangeTower, personnage.select.X, personnage.select.Y);
                        occupation[personnage.select.Y / 30, personnage.select.X / 30] = true;
                    }
                }
                #endregion
            }
            if (key.IsKeyDown(Keys.R) & oldkey.IsKeyUp(Keys.R))
            {
                chateauLife = 10;
                gold = 300;
                FrameColumn = 1;
                Timer = 0;
                AnimationSpeed = 6;
                bulletQueue = new BulletQueue();
                occupation = new bool[20, 40];
                tower = new TowerList();
                personnage = new Personnage();
                ennemi = new EnnemiList();
            }
            oldmouse = mouse;
            oldkey = key;
            #endregion
        }