/// <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 });
public SaveData() { plutonium = 0; ore = 0; Wave = 1; AttackTowers = new TowerList(); EnergyTowers = new TowerList(); MiningTowers = new TowerList(); WallTower = new TowerList(); }
void Awake() { if (!towerList) { towerList = this; } else { Destroy(this.gameObject); } }
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); }
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); } }
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 }