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);
        }
Beispiel #2
0
        /// <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;
        }
Beispiel #3
0
 /// <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);
        }
Beispiel #6
0
        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);
 }
Beispiel #8
0
 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> ();
 }
Beispiel #13
0
 public object Clone()
 {
     Tower t = new Tower(position, range, shootSpeed, walkable, name, cellSize, s, cost, (Projectile)projectile.Clone(), damage);
     return t;
 }
Beispiel #14
0
 /// <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);
 }
Beispiel #15
0
        /// 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);
 }
Beispiel #17
0
 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);
 }
Beispiel #19
0
        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);
 }
Beispiel #21
0
        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);
            }
        }
Beispiel #22
0
 /// <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));
 }