Inheritance: StaticTileObject
 public void RegisterAttackUnit(GameEventArgs args)
 {
     if (unitToAttack == null || args.Unit.GetPathLength() < unitToAttack.GetPathLength())
     {
         unitToAttack = args.Unit;
         unitToAttack.Died += GetNewAttackUnit;
     }
 }
 public Tower(Model model, Tile tile)
     : base(model)
 {
     attackTime = new TimeSpan(0, 0, 0,0,500);
     elapsedTime = new TimeSpan(0,0,1);
     unitToAttack = null;
     attackPower = 10;
     this.tile = tile;
     this.position = tile.Position;
 }
        public void RemoveUnit(ref Unit unit)
        {
            /* if (unit.CurrentTileID != this.ID)
            {
                unitIndexes.Remove(unit.ID);
                return;
            }*/
             //   //!unitsInTile[unit.ID])
              //  return;

            unitIndexes.Remove(unit.ID);
            //unitsCount--;
            //units.Remove(unit);
            //Set new unit to attack
            OnUnitExit(ref unit);
            //unit.Died -= RemoveUnit;
            //if (units.Count > 0)
            //{
            //    Unit u = units[0];
            //    OnUnitEnter(ref u);
            //}
            //else
              //  OnUnitEnter(null);
            //Unit u;
            //if (unitsCount > 0)
            //{
            //    for (int i = 0; i < unitsCount; i++)
            //    {
            //        u = UnitCollection.GetUnitByID(unitIndexes[i]);
            //        if (u.CurrentTileID == this.ID
            //            && u.IsDeployed())
            //        //unitsInTile[unitIndexes[i]])
            //        {

            /*Unit u;
            if (unitIndexes.Count > 0)
            {
                for (int i = 0; i < unitIndexes.Count; i++)
                {
                    u = UnitCollection.GetUnitByID(unitIndexes[i]);
                    if (u.CurrentTileID == this.ID
                        && u.IsDeployed())
                        //unitsInTile[unitIndexes[i]])
                    {

                        OnUnitEnter(ref u);
                        break;
                    }
                }

            //            OnUnitEnter(ref u);
            //            break;
            //        }
            //    }
            //}
            }*/
        }
        public void AddUnit(ref Unit unit)
        {
            //if (unitIndexes.Count <= 0)
            //    return;
            if(!unitIndexes.Contains(unit.ID))
                unitIndexes.Add(unit.ID);

            OnUnitEnter(ref unit);
        }
 public void RemoveUnit(Unit unit)
 {
     units.Remove(unit);
     if(units.Count >0)
         OnUnitEnter(new GameEventArgs(units[0]));
 }
 public void AddUnit(Unit unit)
 {
     units.Add(unit);
     unit.Died += RemoveUnit;
     OnUnitEnter(new GameEventArgs(unit));
 }
 private void GetNewAttackUnit(Unit unit)
 {
     unitToAttack = null;
 }
 public void AddUnit(Unit unit)
 {
     unit.Died += RemoveUnit;
     units.Add(unit);
     TileMap.TowerCreated += unit.UpdatePath;
 }
        private void Attack(GameTime gameTime)
        {
            if (!PlayerCollection.CheckEMPFor(this.PlayerNum))
            {
                if (currentTimeToAttack > timeToAttack)
                {

                    if (unitToAttack != null && unitToAttack.Health > 0)
                    {
                        currentTimeToAttack = TimeSpan.Zero;
                        ProjectileManager.AddParticle(this.Position, unitToAttack.Position);
                        moneyToGive = unitToAttack.MoneyToGive;
                        bool kill = unitToAttack.TakeDamage(attackStrength);

                        if (kill)
                        {
                            PlayerCollection.EarnedMoneyForPlayer(PlayerNum, moneyToGive);
                            killEffect.Play(0.4f, 1.0f, 0.0f);

                        }
                        if (Level < 4 && kill)
                        {
                            XP += currentXPToGive + (int)((Level / 4.0f) * currentXPToGive);
                            if (XP >= 100)
                            {
                                XPUpgrade();
                            }
                        }

                    }
                    else if (towersToAttack.Count > 0)
                    {
                        currentTimeToAttack = TimeSpan.Zero;
                        ProjectileManager.AddParticle(this.Position, towersToAttack[0].Position);
                        bool kill = towersToAttack[0].TakeDamage(attackStrength);

                        if (kill)
                        {
                            if (PlayScreen.GameType == PlayerScreenType.Scenario)
                            {
                                ScenarioManager.RegisterAction(ScenarioItemType.DestroyEnemyTower);
                            }
                        }
                        //if (kill)
                        // towersToAttack.Remove(towersToAttack[0]);
                    }

                    if (towersToAttack.Count > 0 && towersToAttack[0].Health <= 0)
                    {
                        towersToAttack.RemoveAt(0);
                    }

                    if (unitToAttack != null && unitToAttack.Health <= 0)
                    {
                        unitToAttack = null;
                    }
                    return;
                }
                currentTimeToAttack += gameTime.ElapsedGameTime;
            }
        }
        public void UnregisterAttackUnit(ref Unit unit)
        {
            if (unitToAttack != null && unitToAttack.ID == unit.ID)
            Unit u;
            if ((unitToAttack != null && unitToAttack.ID == unit.ID) || unitToAttack == null)
            {
                unitToAttack = null;

                Unit u;
                for (int i = 0; i < this.tile.tileNeighbors.Count; i++)
                {
                    u = this.tile.tileNeighbors[i].FindNewUnitToAttack();
                    if (u != null)
                    {
                        unitToAttack = u;
                        break;
                    }
                }
                for (int i = 0; i < this.tile.tileNeighbors.Count; i++)
                {
                    u = this.tile.tileNeighbors[i].GetUnitFromTile();
                    if (u != null && u.TeamNum != TeamNum)
                    {
                        unitToAttack = u;
                        currentXPToGive = unitToAttack.XPToGive;
                        return;
                    }
                }
            }
        }
        public void RegisterAttackUnit(ref Unit unit)
        {
            if ((unitToAttack == null && unit == null) ||
                (unitToAttack != null && unitToAttack.IsDeployed() && unit == null))
                return;

            if (unitToAttack != null && unitToAttack.Health <= 0)
                unitToAttack = null;

            if (unitToAttack != null && !unitToAttack.IsDeployed())
            {
                if (unit.TeamNum != TeamNum)
                {
                    unitToAttack = unit;
                    currentXPToGive = unitToAttack.XPToGive;
                }
                return;
            }

            if (unit.TeamNum != TeamNum)
            {
                if (unitToAttack == null || unit.PathLength < unitToAttack.PathLength)
                {
                    unitToAttack = unit;
                    currentXPToGive = unitToAttack.XPToGive;
                    //unitToAttack.Died += GetNewAttackUnit;
                }
            }
        }
        public Tower(TowerType type)
        {
            this.rotationMatrixX = Matrix.Identity;
            this.rotationMatrixY = Matrix.Identity;
            this.rotationMatrixZ = Matrix.Identity;
            this.scaleRot = Matrix.Identity;
            this.scaleMatrix = Matrix.Identity;
            this.Type = type;
            this.Status = TowerStatus.Inactive;
            unitToAttack = null;
            towersToAttack = new List<Tower>();

               // timeToAttack = new TimeSpan(0, 0, 1);
            currentTimeToAttack = new TimeSpan();

            //Depends on Type
            switch (Type)
            {
                case TowerType.Plasma:
                    HealthCapacity = 500;
                    Cost = 100;
                    attackStrength = 15;
                    timeToAttack = new TimeSpan(0,0,0,0, 500);
                    break;
                case TowerType.Electric:
                    HealthCapacity = 800;
                    Cost = 250;
                    attackStrength = 80;
                    timeToAttack = new TimeSpan(0,0,3);
                    break;
                case TowerType.Cannon:
                    HealthCapacity = 700;
                    Cost = 170;
                    attackStrength = 30;
                    timeToAttack = new TimeSpan(0,0,1);
                    break;
                case TowerType.SmallUnit:
                    HealthCapacity = 600;
                    Cost = 200;
                    attackStrength = 20;
                    unitBuild = new TimeSpan(0,0,2);
                    break;
                case TowerType.LargeUnit:
                    HealthCapacity = 1000;
                    Cost = 450;
                    attackStrength = 20;
                    unitBuild = new TimeSpan(0,0,2);
                    break;
            }

            Health = HealthCapacity;
            XP = 0;
            Level = 1;

            TotalInvestedCost = Cost;

            ID = currentID;
            currentID++;
        }
 public GameEventArgs(Unit unit)
 {
     this.unit = unit;
     this.tilesToGoal = unit.GetPathLength();
 }
Beispiel #14
0
 public void RemoveUnit(UnitType type, Unit unit)
 {
     units.Remove(unit);
     //Set new unit to attack
     if(units.Count >0)
         OnUnitEnter(new GameEventArgs(units[0]));
 }
Beispiel #15
0
 private void OnUnitEnter(ref Unit unit)
 {
     if (UnitEnter != null)
     {
         UnitEnter(ref unit);
     }
 }
Beispiel #16
0
 private void OnUnitExit(ref Unit unit)
 {
     if (UnitExit != null)
     {
         UnitExit(ref unit);
     }
 }
 public void RemoveUnit(Unit unit)
 {
     units.Remove(unit);
     TileMap.TowerCreated -= unit.UpdatePath;
 }