public void Draw(SpriteBatch spriteBatch) { if (userInterface.canPlaceCannonTower || userInterface.canPlaceMagicTower) { Tower tower = new Tower(TextureManager.towerTexture, new Vector2(Mouse.GetState().X, Mouse.GetState().Y)); if (CanPlace(tower)) tower.SetColor = Color.Green; else tower.SetColor = Color.Red; tower.Draw(spriteBatch); } foreach (Tower t in towers) { t.Draw(spriteBatch); t.DrawTowerRange(spriteBatch); } creepManager.Draw(spriteBatch); projectileManager.Draw(spriteBatch); particleEngine.Draw(spriteBatch); userInterface.Draw(spriteBatch); }
/// <summary> /// Construsts selected tower at selected location /// </summary> /// <param name="Position"></param> /// <param name="Tower"></param> public void Build(Vector2 position, Tower tower) { Tower t = (Tower)tower.Clone(); t.position = position; towers.Add(t); game.Level.ObjectMap[t.CellCoords.Y][t.CellCoords.X] = t; game.Level.pathfinding = Pathfinding.createPath(game.Level.IntObjectMap, new Point(0, 0), game.Level.End); game.money -= t.cost; }
/// <summary> /// Returns enemy closest to the tower /// </summary> /// <param name="Tower"></param> /// <returns></returns> public Enemy findClosestEnemy(Tower tower) { double radius = 1000; Enemy selected=null; foreach(Enemy e in game.Level.EnemyManager.enemies) { double r = Radius(tower, e); if (r < radius) { selected = e; radius = r; } } return selected; }
/// <summary> /// Handles the removal of moeny when purchasing a tower and notifies the TowerManager to place the tower /// </summary> /// <param name="tower"></param> public void PurchaseTower(Tower tower) { money -= tower.Cost; }
public void testTowerInit() { Tower t = new Tower("t", 0, 0, 0, 0); Assert.IsNotNull(t); }
public void OnDragEnded(Vector2 point) { if (_dragArrow != null) { int hits = Physics2D.RaycastNonAlloc(Camera.main.ScreenToWorldPoint(point), Vector2.zero, results, Mathf.Infinity, dragEndFilter); if (hits > 0) { var target = results[hits - 1].transform.gameObject; if (target != null && target.GetInstanceID() != gameObject.GetInstanceID()) { building = GetComponent <Building>(); targetTower = target.GetComponent <Tower>(); if (targetTower != null) { if (targetTower.OccupiedByEnemy) { if (building.SoldiersCount == 1) { building.RemoveLastSoldier().FreedOccupiedTower(targetTower.GetComponent <OccupiedByEnemy>()); } else { var control = UILevelControlsManager.Instance.GetControl <UISoldierChoiceMultiple>( UILevelControlsManager.LevelControl.SoldierChoiceMultiple); control.Show(building); control.GoButtonClickedEvent += OnGoButtonClicked; control.HiddenEvent += OnControlHidden; } _dragArrow.End(); _dragArrow = null; return; } } targetBuilding = target.GetComponent <Building>(); if (targetBuilding != null) { if (targetBuilding.SoldiersCount >= targetBuilding.MaxSoldiersCount) { _dragArrow.End(); _dragArrow = null; return; } if (building.SoldiersCount == 1) { targetBuilding.AddSoldier(building.RemoveLastSoldier()); } else { var control = UILevelControlsManager.Instance.GetControl <UISoldierChoiceMultiple>(UILevelControlsManager.LevelControl.SoldierChoiceMultiple); control.Show(building, targetBuilding); control.GoButtonClickedEvent += OnGoButtonClicked; control.HiddenEvent += OnControlHidden; } } targetWizard = target.GetComponent <Wizard>(); if (targetWizard != null) { if (building.SoldiersCount == 1) { building.UnloadLastSoldier().AttackWizard(targetWizard); } else { var control = UILevelControlsManager.Instance.GetControl <UISoldierChoiceMultiple>(UILevelControlsManager.LevelControl.SoldierChoiceMultiple); control.Show(building); control.GoButtonClickedEvent += OnGoButtonClicked; control.HiddenEvent += OnControlHidden; } } targetFood = target.GetComponent <Food>(); if (targetFood != null && !targetFood.SoldierAssigned) { if (building.SoldiersCount == 1) { building.UnloadLastSoldier().TakeFood(targetFood); } else { var control = UILevelControlsManager.Instance.GetControl <UISoldierChoiceMultiple>( UILevelControlsManager.LevelControl.SoldierChoiceMultiple); control.Show(building); control.GoButtonClickedEvent += OnGoButtonClicked; control.HiddenEvent += OnControlHidden; } } targetTrapPlace = target.GetComponent <TrapPlace>(); if (targetTrapPlace != null && !targetTrapPlace.IsBusy) { var control = UILevelControlsManager.Instance.GetControl <UITrapChoiceClouds>( UILevelControlsManager.LevelControl.TrapChoice); control.Show(point, targetTrapPlace); control.TrapChosenEvent += OnTrapChosen; control.HiddenEvent += OnControlHidden; } } } _dragArrow.End(); _dragArrow = null; } }
private void DrawTooltip(SpriteBatch spriteBatch, Tower tower) { spriteBatch.DrawString(TextureManager.tooltipFont, tower.Name() + "\nDamage: " + tower.Damage() + "\nPrice: " + tower.Cost() + "\nRange: " + tower.Range() + "\nReloadtime: " + tower.ReloadTime() + "s" + "\nSpecial: " + tower.Special(), tooltipPosition, Color.Black); }
void Awake() { _tower = GetComponent <Tower>(); }
public void testTowerGetsEnemy() { Tower t = new Tower("t", 0, 0, 0, 0); Enemy e = new Enemy(0, 0.0, "e", 0); t.AddNearbyEnemy(e); }
public void testTowerGetsCost() { Tower t = new Tower("t", 0, 0, 0, 0); t.Cost = 10; Assert.AreEqual(t.Cost, 10); }
public void testTowerGetsAttackDamage() { Tower t = new Tower("t", 0, 0, 0, 0); t.AttackDamage = 10; Assert.AreEqual(t.AttackDamage, 10); }
void Start() { tower = GetComponentInParent <Tower> (); }
public object Clone() { Tower t = new Tower(position, range, shootSpeed, walkable, name, cellSize, s, cost, (Projectile)projectile.Clone(), damage); return t; }
/// <summary> /// Loads tower managers resources /// </summary> public void Load() { Projectile s = game.loader.projectileDict[1]; Tower t = new Tower(new Vector2(0, 0), 300, 1, false, "bigBad", 48, game.loader.spriteDict[2], 500, s, 10); towerList.Add(t); t = new Tower(new Vector2(0, 0), 100, 0.1f, false, "Fastshoting", 48, game.loader.spriteDict[2], 600, s, 10); towerList.Add(t); t = new Tower(new Vector2(0, 0), 600, 0.5f, false, "Kamikaze", 48, game.loader.spriteDict[2], 1000, s, 10); towerList.Add(t); s = new Projectile(200, game.loader.spriteDict[1]); t = new Tower(new Vector2(0, 0), 64, 5f, true, "Walking", 48, new Sprite(game.trap, 39, 39, new Vector2(0, 0)), 1000, s, 400); towerList.Add(t); }
/// Handles placing a tower on the PictureBox. private void GameWorldPB_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Middle) { world.Crosshair.x = e.Location.X; world.Crosshair.y = e.Location.Y; } if (e.Button == MouseButtons.Right) { DeselectTower(); HandSelectPB_Click(sender, e); } else { // No tower to build selected, mouse can be used to select placed Towers if (selectedTower == null && !GetTileAtMouse.buildable) { // Loop through all Towers for (int i = 0; i < world.towers.Count; i++) { // Check if the clicked tile is occupied by a Tower for (int j = 0; j < world.towers[i].pos.Count; j++) { if (world.towers[i].pos[j] == GetTileAtMouse) { // Deselect the previously selected Tower (if there is one) DeselectTower(); // Set the selected Tower, draw its Range and toggle the Details. world.Tower = world.towers[i]; SelectTower(); } } } } else { DeselectTower(); } // Gets 2x2 square of Tiles according to location of mouse. List <BaseTile> selectedTiles = GetSelectedTiles(e.Location); // If the selected tiles are buildable AND you have a tower selected AND you have enough money.. if (world.IsBuildable(selectedTiles) && selectedTower != null && world.Gold + selectedTower.goldCost >= 0) { if (world.CheckIfPathIsBlocked(selectedTiles) == false) { // ..Check the selected tower's type and create a new object of that type Tower addTower = null; if (selectedTower is ArrowTower) { addTower = new ArrowTower(); } if (selectedTower is CannonTower) { addTower = new CannonTower(); } if (selectedTower is SplitShotTower) { addTower = new SplitShotTower(); } if (selectedTower is DogHouseTower) { addTower = new DogHouseTower(); } if (selectedTower is FuzzyTower) { addTower = new FuzzyTower(); } // ..Deduct gold world.DeductGold(selectedTower.goldCost); // Disable each selected tile foreach (BaseTile bt in selectedTiles) { bt.DisableTile(); bt.tower = addTower; } // Build the tower, update the gold and redraw the background addTower.BuildTower(selectedTiles); DeselectTower(); world.Tower = addTower; SelectTower(); DrawBackground(); } } } }
public void testTowerGetsHealth() { Tower t = new Tower("t", 0, 0, 0, 0); t.Health = 10; Assert.AreEqual(t.Health,10); }
private void HandSelectPB_Click(object sender, EventArgs e) { this.selectedTower = null; GameWorldPB.Invalidate(); }
public void testTowerGetsRange() { Tower t = new Tower("t", 0, 0, 0, 0); t.Range = 10; Assert.AreEqual(t.Range, 10); }
public void HandleInput(InputHandler inputHandler) { switch (ButtonType) { case ButtonType.GenericTowerButton: case ButtonType.CannonTowerButton: case ButtonType.BatteryTowerButton: case ButtonType.BlastTowerButton: inputHandler.CancelSelection(); inputHandler.SelectionContext = SelectionContext.PlacingTower; inputHandler.SelectedObject = CreateTowerInstance(); break; case ButtonType.WallButton: inputHandler.CancelSelection(); inputHandler.SelectionContext = SelectionContext.PlacingWall; break; case ButtonType.PortalButton: inputHandler.CancelSelection(); inputHandler.SelectionContext = SelectionContext.PlacingPortalEntrance; break; case ButtonType.CheeseButton: inputHandler.CancelSelection(); inputHandler.SelectionContext = SelectionContext.PlacingCheese; break; case ButtonType.SellButton: { if (inputHandler.SelectionContext == SelectionContext.TowerSelected) { Tower t = inputHandler.SelectedObject as Tower; t.Sell(); inputHandler.CancelSelection(); } if (inputHandler.SelectionContext == SelectionContext.NodeSelected) { Node n = inputHandler.SelectedObject as Node; n.Sell(); inputHandler.CancelSelection(); } } break; case ButtonType.UpgradeButton: { Tower t = inputHandler.SelectedObject as Tower; if (GameStats.Gold >= t.Cost) { GameStats.Gold = GameStats.Gold - t.Cost; t.upgrade(); } else { MessageLog.NotEnoughGold(); } } break; case ButtonType.CancelButton: inputHandler.CancelSelection(); break; } }
public void testTowerInit() { Tower t = new Tower("t", 0, 0, 0, 0 ); Assert.IsNotNull(t); }
private void LoadAssetsFromXml() { XmlNode towerDefenceNode = doc["TowerDefence"]; XmlNode spritesNode = towerDefenceNode["Sprites"]; Texture2D tmp; foreach (XmlNode node in spritesNode.SelectNodes("Sprite")) { int id = int.Parse(node.Attributes["id"].InnerText); bool animated = node.Attributes["animated"] == null ? false : bool.Parse(node.Attributes["animated"].InnerText); string filename = node["resourceName"].InnerText; tmp = content.Load<Texture2D>(@"Textures/" + filename); int width = node["width"] == null ? tmp.Width : int.Parse(node["width"].InnerText); int height = node["height"] == null ? tmp.Height : int.Parse(node["height"].InnerText); Sprite s; if (animated) { float spritesPerSecond = float.Parse(node["spritesPerSecond"].InnerText); s = new AnimatedSprite(tmp, width, height, spritesPerSecond); } else { int positionX = node["positionX"] == null ? 0 : int.Parse(node["positionX"].InnerText); int positionY = node["positionY"] == null ? 0 : int.Parse(node["positionY"].InnerText); Vector2 position = new Vector2(positionX, positionY); s = new Sprite(tmp, width, height, position); } spriteDict.Add(id, s); } foreach (XmlNode node in towerDefenceNode["Projectiles"].SelectNodes("Projectile")) { int id = int.Parse(node.Attributes["id"].InnerText); int speed = int.Parse(node["speed"].InnerText); int spriteid = int.Parse(node["Sprite"].InnerText); Sprite s = spriteDict[spriteid]; Projectile proj = new Projectile(speed, s); projectileDict.Add(id, proj); } foreach (XmlNode node in towerDefenceNode["Towers"].SelectNodes("Tower")) { int id = int.Parse(node.Attributes["id"].InnerText); String name = node["name"].InnerText; int spriteid = int.Parse(node["Sprite"].InnerText); int projid = int.Parse(node["Projectile"].InnerText); int range = int.Parse(node["range"].InnerText); int damage = int.Parse(node["damage"].InnerText); float shootspeed = float.Parse(node["shootSpeed"].InnerText); bool walkable = bool.Parse(node["walkable"].InnerText); int cost = int.Parse(node["cost"].InnerText); Sprite s = spriteDict[spriteid]; Projectile proj = projectileDict[projid]; Tower tow = new Tower(Vector2.Zero, range, shootspeed, walkable, name, 48, s, cost, proj, damage); towerDict.Add(id, tow); } foreach (XmlNode node in towerDefenceNode["Enemies"].SelectNodes("Enemy")) { int id = int.Parse(node.Attributes["id"].InnerText); String name = node["name"].InnerText; int spriteid = int.Parse(node["Sprite"].InnerText); int health = int.Parse(node["health"].InnerText); int speed = int.Parse(node["speed"].InnerText); float rotation = float.Parse(node["rotation"].InnerText); int drawSize = int.Parse(node["drawSize"].InnerText); Sprite s = spriteDict[spriteid]; Enemy e = new Enemy(health, name, s, drawSize, rotation, speed); enemyDict.Add(id, e); } foreach (XmlNode node in towerDefenceNode.SelectNodes("SpawnPoint")) { int spawnId = int.Parse(node.Attributes["id"].InnerText); float interval = float.Parse(node["interval"].InnerText); float delay = float.Parse(node["delay"].InnerText); int numToSpawn = int.Parse(node["numToSpawn"].InnerText); int enemyId = int.Parse(node["Enemy"].InnerText); int posx = int.Parse(node["positionX"].InnerText); int posy = int.Parse(node["positionY"].InnerText); Vector2 position = new Vector2(posx, posy); Enemy s = enemyDict[enemyId]; SpawnPoint sp = new SpawnPoint(position, interval, delay, numToSpawn, s); spawnPointDict.Add(spawnId, sp); } foreach (XmlNode levelNode in towerDefenceNode.SelectNodes("Level")) { int id = int.Parse(levelNode.Attributes["id"].InnerText); int columns = int.Parse(levelNode["map"]["columns"].InnerText); int rows = int.Parse(levelNode["map"]["rows"].InnerText); Point end = readPointFromXml(levelNode["end"]); List<Wave> waves = new List<Wave>(); foreach (XmlNode waveNove in levelNode.SelectNodes("Wave")) { List<SpawnPoint> spawns = new List<SpawnPoint>(); foreach (XmlNode spawnNode in waveNove.SelectNodes("SpawnPoint")) { int spawnId = int.Parse(spawnNode.InnerText); spawns.Add(spawnPointDict[spawnId]); } waves.Add(new Wave(spawns)); } Level lev = new Level(game, 48, rows, columns, end, waves, id); foreach (XmlNode towerNode in levelNode.SelectNodes("Tower")) { int towid = int.Parse(towerNode.InnerText); lev.towerManager.towerList.Add(towerDict[towid]); } levelDict.Add(lev); } }
/// <summary> /// Returns distance beetwen enemy and tower /// </summary> /// <param name="Tower"></param> /// <param name="Enemy"></param> /// <returns></returns> public double Radius(Tower tower, Enemy enemy) { return Math.Sqrt(Math.Pow(enemy.position.X - tower.position.X, 2) + Math.Pow(enemy.position.Y - tower.position.Y, 2)); }