예제 #1
0
 public override void AI(float elapsedTime, OctreeLinked<Unit, string> octree)
 {
     if (IsDead == false)
       {
     // Targeting
     if (near && (_target == null || _target.IsDead || _move > 20))
     {
       _move = 0;
       float nearest = float.MinValue;
       octree.Traverse
       (
     (Unit current) =>
     {
       if ((current is KillemKamakazi || current is KillemMelee || current is KillemRanged) && !current.IsDead)
       {
         float length = (current.Position - Position).LengthSquared();
         if (_target == null || _target.IsDead)
         {
           _target = current;
           nearest = length;
         }
         else if (length < nearest)
         {
           _target = current;
           nearest = length;
         }
       }
     }
       );
     }
     // Attacking
     else if (Calc.Abs((Position - _target.Position).LengthSquared()) < _attackRangedSquared / 2)
     {
       Attack(octree);
       _move = 0;
     }
     // Moving
     else
     {
       Position = Vector.MoveTowardsPosition(Position, _target.Position, MoveSpeed);
       _move++;
     }
     StaticModel.Orientation.W += .1f;
       }
 }
예제 #2
0
 protected void Attack(OctreeLinked<Unit, string> octree)
 {
     octree.Traverse
       (
     (Unit unit) =>
     {
       if (!unit.IsDead)
       {
     unit.Health -= _damage;
     if (unit.Health <= 0)
     {
       unit.IsDead = true;
     }
       }
     },
     -_attackRange + Position.X, -_attackRange + Position.Y, -_attackRange + Position.Z, _attackRange + Position.X, _attackRange + Position.Y, _attackRange + Position.Z
       );
       IsDead = true;
 }
예제 #3
0
 public override void AI(float elapsedTime, OctreeLinked<Unit, string> octree)
 {
     if (_time <= _delay)
     _time += elapsedTime;
       if (IsDead == false)
       {
     attack = false;
     // Targeting
     if (_target == null || _target.IsDead || move > 20)
     {
       move = 0;
       float shortest = float.MaxValue;
       octree.Traverse
       (
     (Unit current) =>
     {
       if (current is KillemKamakazi && !current.IsDead)
       {
         if (_target == null || _target.IsDead || !(_target is KillemKamakazi))
         {
           _target = current;
           shortest = (current.Position - Position).LengthSquared();
         }
         else
         {
           float length = (current.Position - Position).LengthSquared();
           if (length < shortest)
           {
             _target = current;
             shortest = length;
           }
         }
       }
       else if ((current is KillemMelee || current is KillemRanged) && !current.IsDead)
       {
         if (_target == null || _target.IsDead)
         {
           _target = current;
           shortest = (current.Position - Position).LengthSquared();
         }
         else
         {
           float length = (current.Position - Position).LengthSquared();
           if (length < shortest)
           {
             _target = current;
             shortest = length;
           }
         }
       }
     }
       );
     }
     // Attacking
     else if (Calc.Abs((Position - _target.Position).LengthSquared()) < _attackRangedSquared)
     {
       if (!attack)
     AiBattle.lines.TryAdd(new Link3<Vector, Vector, Color>(
       new Vector(Position.X, Position.Y, Position.Z),
       new Vector(_target.Position.X, _target.Position.Y, _target.Position.Z),
       Color.Yellow));
       if (Attack(_target))
     _target = null;
       move = 0;
       attack = !attack;
     }
     // Moving
     else if (_time > _delay)
     {
       Position = Vector.MoveTowardsPosition(Position, _target.Position, MoveSpeed);
       move++;
       attack = false;
     }
     this.StaticModel.Orientation.W+=.1f;
       }
 }
예제 #4
0
 public virtual void AI(float elapsedTime, OctreeLinked<Unit, string> octree)
 {
     throw new NotImplementedException();
 }
예제 #5
0
        private void GenerateUnits()
        {
            _powerRangerCount = _rangedCount + _meleeCount + _kamakaziCount;
              _tuxCount = _rangedCount + _meleeCount + _kamakaziCount;

              _octree = new OctreeLinked<Unit, string>(0, 0, 0, 1000000, 10, Unit.CompareTo, Unit.CompareTo);
              lines = new AvlTreeLinked<Link3<Vector, Vector, Color>>(
            (Link3<Vector, Vector, Color> link, Link3<Vector, Vector, Color> link2) => { if (link.First == link2.First && link.Second == link2.Second) return 0; else return 1; }
            );
              explosions = new ListArray<Explosion>(1);

              _zackMelee = new Unit[_meleeCount];
              _zackRanged = new Unit[_rangedCount];
              _zackKamakazi = new Unit[_kamakaziCount];
              _killemMelee = new Unit[_meleeCount];
              _killemRanged = new Unit[_rangedCount];
              _killemKamakazi = new Unit[_kamakaziCount];

              Random random = new Random();
              string[] colors = new string[] { "YellowRanger", "RedRanger", "BlueRanger", "BlackRanger", "PinkRanger" };
              #region Map 0
              if (_map == 0)
              {
            int maxXZack = -1500;
            int minXZack = -2000;

            int maxZZack = 0;
            int minZZack = -1500;

            int maxXKillem = 2000;
            int minXKillem = 1500;

            int maxZKillem = 0;
            int minZKillem = -1500;

            for (int i = 0; i < _meleeCount; i++)
            {
              _zackMelee[i] = new ZackMelee("ZackMelee" + i, StaticModelManager.GetModel("BlackRanger"));
              _zackMelee[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
              if (_3d)
            _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackMelee[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
              _zackMelee[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackMelee[i]);

              _killemMelee[i] = new KillemMelee("KillemMelee" + i, StaticModelManager.GetModel("Tux"));
              _killemMelee[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
              if (_3d)
            _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemMelee[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
              _killemMelee[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _octree.Add(_killemMelee[i]);
            }

            for (int i = 0; i < _rangedCount; i++)
            {
              _zackRanged[i] = new ZackRanged("ZackRanged" + i, StaticModelManager.GetModel("BlueRanger"));
              _zackRanged[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
              if (_3d)
            _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackRanged[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
              _zackRanged[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackRanged[i]);

              _killemRanged[i] = new KillemRanged("KillemRanged" + i, StaticModelManager.GetModel("TuxGreen"));
              _killemRanged[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
              if (_3d)
            _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemRanged[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
              _killemRanged[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _killemRanged[i].Id = "Ranger" + i;
              _octree.Add(_killemRanged[i]);
            }

            for (int i = 0; i < _kamakaziCount; i++)
            {
              _zackKamakazi[i] = new ZackKamakazi("ZackKamakazi" + i, StaticModelManager.GetModel("RedRanger"));
              _zackKamakazi[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
              if (_3d)
            _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackKamakazi[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
              _zackKamakazi[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackKamakazi[i]);

              _killemKamakazi[i] = new KillemKamakazi("KillemKamakazi" + i, StaticModelManager.GetModel("TuxRed"));
              _killemKamakazi[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
              if (_3d)
            _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemKamakazi[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
              _killemKamakazi[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _octree.Add(_killemKamakazi[i]);
            }
              }
              #endregion
              #region Map 1
              else if (_map == 1)
              {
            int maxXZack = -800;
            int minXZack = -1300;
            int maxZZack = -800;
            int minZZack = -1300;
            int maxXZack2 = 1300;
            int minXZack2 = 800;
            int maxZZack2 = 1300;
            int minZZack2 = 800;

            int maxXKillem = -800;
            int minXKillem = -1300;
            int maxZKillem = 1300;
            int minZKillem = 800;
            int maxXKillem2 = 1300;
            int minXKillem2 = 800;
            int maxZKillem2 = -800;
            int minZKillem2 = -1300;

            for (int i = 0; i < _meleeCount; i++)
            {
              if (i < _meleeCount / 2)
              {
            _zackMelee[i] = new ZackMelee("ZackMelee" + i, StaticModelManager.GetModel("BlackRanger"));
            _zackMelee[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
            if (_3d)
              _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _zackMelee[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
            _zackMelee[i].StaticModel.Scale = new Vector(5, 5, 5);
            _zackMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
            _octree.Add(_zackMelee[i]);

            _killemMelee[i] = new KillemMelee("KillemMelee" + i, StaticModelManager.GetModel("Tux"));
            _killemMelee[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
            if (_3d)
              _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _killemMelee[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
            _killemMelee[i].StaticModel.Scale = new Vector(20, 20, 20);
            _killemMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
            _octree.Add(_killemMelee[i]);
              }
              else
              {
            _zackMelee[i] = new ZackMelee("ZackMelee" + i, StaticModelManager.GetModel("BlackRanger"));
            _zackMelee[i].StaticModel.Position.X = random.Next(minXZack2, maxXZack2);
            if (_3d)
              _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _zackMelee[i].StaticModel.Position.Z = random.Next(minZZack2, maxZZack2);
            _zackMelee[i].StaticModel.Scale = new Vector(5, 5, 5);
            _zackMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
            _octree.Add(_zackMelee[i]);

            _killemMelee[i] = new KillemMelee("KillemMelee" + i, StaticModelManager.GetModel("Tux"));
            _killemMelee[i].StaticModel.Position.X = random.Next(minXKillem2, maxXKillem2);
            if (_3d)
              _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _killemMelee[i].StaticModel.Position.Z = random.Next(minZKillem2, maxZKillem2);
            _killemMelee[i].StaticModel.Scale = new Vector(20, 20, 20);
            _killemMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
            _octree.Add(_killemMelee[i]);
              }
            }

            for (int i = 0; i < _rangedCount; i++)
            {
              if (i < _rangedCount / 2)
              {
            _zackRanged[i] = new ZackRanged("ZackRanged" + i, StaticModelManager.GetModel("BlueRanger"));
            _zackRanged[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
            if (_3d)
              _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _zackRanged[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
            _zackRanged[i].StaticModel.Scale = new Vector(5, 5, 5);
            _zackRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
            _octree.Add(_zackRanged[i]);

            _killemRanged[i] = new KillemRanged("KillemRanged" + i, StaticModelManager.GetModel("TuxGreen"));
            _killemRanged[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
            if (_3d)
              _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _killemRanged[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
            _killemRanged[i].StaticModel.Scale = new Vector(20, 20, 20);
            _killemRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
            _killemRanged[i].Id = "Ranger" + i;
            _octree.Add(_killemRanged[i]);
              }
              else
              {
            _zackRanged[i] = new ZackRanged("ZackRanged" + i, StaticModelManager.GetModel("BlueRanger"));
            _zackRanged[i].StaticModel.Position.X = random.Next(minXZack2, maxXZack2);
            if (_3d)
              _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _zackRanged[i].StaticModel.Position.Z = random.Next(minZZack2, maxZZack2);
            _zackRanged[i].StaticModel.Scale = new Vector(5, 5, 5);
            _zackRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
            _octree.Add(_zackRanged[i]);

            _killemRanged[i] = new KillemRanged("KillemRanged" + i, StaticModelManager.GetModel("TuxGreen"));
            _killemRanged[i].StaticModel.Position.X = random.Next(minXKillem2, maxXKillem2);
            if (_3d)
              _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _killemRanged[i].StaticModel.Position.Z = random.Next(minZKillem2, maxZKillem2);
            _killemRanged[i].StaticModel.Scale = new Vector(20, 20, 20);
            _killemRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
            _killemRanged[i].Id = "Ranger" + i;
            _octree.Add(_killemRanged[i]);
              }
            }

            for (int i = 0; i < _kamakaziCount; i++)
            {
              if (i < _kamakaziCount / 2)
              {
            _zackKamakazi[i] = new ZackKamakazi("ZackKamakazi" + i, StaticModelManager.GetModel("RedRanger"));
            _zackKamakazi[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
            if (_3d)
              _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _zackKamakazi[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
            _zackKamakazi[i].StaticModel.Scale = new Vector(5, 5, 5);
            _zackKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
            _octree.Add(_zackKamakazi[i]);

            _killemKamakazi[i] = new KillemKamakazi("KillemKamakazi" + i, StaticModelManager.GetModel("TuxRed"));
            _killemKamakazi[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
            if (_3d)
              _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _killemKamakazi[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
            _killemKamakazi[i].StaticModel.Scale = new Vector(20, 20, 20);
            _killemKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
            _octree.Add(_killemKamakazi[i]);
              }
              else
              {
            _zackKamakazi[i] = new ZackKamakazi("ZackKamakazi" + i, StaticModelManager.GetModel("RedRanger"));
            _zackKamakazi[i].StaticModel.Position.X = random.Next(minXZack2, maxXZack2);
            if (_3d)
              _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _zackKamakazi[i].StaticModel.Position.Z = random.Next(minZZack2, maxZZack2);
            _zackKamakazi[i].StaticModel.Scale = new Vector(5, 5, 5);
            _zackKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
            _octree.Add(_zackKamakazi[i]);

            _killemKamakazi[i] = new KillemKamakazi("KillemKamakazi" + i, StaticModelManager.GetModel("TuxRed"));
            _killemKamakazi[i].StaticModel.Position.X = random.Next(minXKillem2, maxXKillem2);
            if (_3d)
              _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
            else
              _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
            _killemKamakazi[i].StaticModel.Position.Z = random.Next(minZKillem2, maxZKillem2);
            _killemKamakazi[i].StaticModel.Scale = new Vector(20, 20, 20);
            _killemKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
            _octree.Add(_killemKamakazi[i]);
              }
            }
              }
              #endregion
              #region Map 2
              if (_map == 2)
              {
            int maxXZack = 250;
            int minXZack = -250;
            int maxZZack = 250;
            int minZZack = -250;

            int maxXKillem = 250;
            int minXKillem = -250;
            int maxZKillem = 250;
            int minZKillem = -250;

            for (int i = 0; i < _meleeCount; i++)
            {
              _zackMelee[i] = new ZackMelee("ZackMelee" + i, StaticModelManager.GetModel("BlackRanger"));
              _zackMelee[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
              if (_3d)
            _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackMelee[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
              _zackMelee[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackMelee[i]);

              _killemMelee[i] = new KillemMelee("KillemMelee" + i, StaticModelManager.GetModel("Tux"));
              _killemMelee[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
              if (_3d)
            _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemMelee[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
              _killemMelee[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _octree.Add(_killemMelee[i]);
            }

            for (int i = 0; i < _rangedCount; i++)
            {
              _zackRanged[i] = new ZackRanged("ZackRanged" + i, StaticModelManager.GetModel("BlueRanger"));
              _zackRanged[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
              if (_3d)
            _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackRanged[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
              _zackRanged[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackRanged[i]);

              _killemRanged[i] = new KillemRanged("KillemRanged" + i, StaticModelManager.GetModel("TuxGreen"));
              _killemRanged[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
              if (_3d)
            _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemRanged[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
              _killemRanged[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _killemRanged[i].Id = "Ranger" + i;
              _octree.Add(_killemRanged[i]);
            }

            // CIRCLE: radius ^ 2 = x ^ 2 + z ^ 2
            float radiusSquared = 1000000f;

            for (int i = 0; i < _kamakaziCount; i++)
            {
              float x = random.Next(-1000, 1000);

              _zackKamakazi[i] = new ZackKamakazi("ZackKamakazi" + i, StaticModelManager.GetModel("RedRanger"));
              _zackKamakazi[i].StaticModel.Position.X = x;
              if (_3d)
            _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackKamakazi[i].StaticModel.Position.Z = Calc.SquareRoot(radiusSquared - x * x);
              _zackKamakazi[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackKamakazi[i]);

              _killemKamakazi[i] = new KillemKamakazi("KillemKamakazi" + i, StaticModelManager.GetModel("TuxRed"));
              _killemKamakazi[i].StaticModel.Position.X = x;
              if (_3d)
            _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemKamakazi[i].StaticModel.Position.Z = -Calc.SquareRoot(radiusSquared - x * x);
              _killemKamakazi[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _octree.Add(_killemKamakazi[i]);
            }
              }
              #endregion
              #region Map 3
              if (_map == 3)
              {
            int maxXZack = 2000;
            int minXZack = -2000;

            int maxZZack = 2000;
            int minZZack = -2000;

            int maxXKillem = 2000;
            int minXKillem = -2000;

            int maxZKillem = 2000;
            int minZKillem = -2000;

            for (int i = 0; i < _meleeCount; i++)
            {
              _zackMelee[i] = new ZackMelee("ZackMelee" + i, StaticModelManager.GetModel("BlackRanger"));
              _zackMelee[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
              if (_3d)
            _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackMelee[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
              _zackMelee[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackMelee[i]);

              _killemMelee[i] = new KillemMelee("KillemMelee" + i, StaticModelManager.GetModel("Tux"));
              _killemMelee[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
              if (_3d)
            _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemMelee[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemMelee[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
              _killemMelee[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemMelee[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _octree.Add(_killemMelee[i]);
            }

            for (int i = 0; i < _rangedCount; i++)
            {
              _zackRanged[i] = new ZackRanged("ZackRanged" + i, StaticModelManager.GetModel("BlueRanger"));
              _zackRanged[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
              if (_3d)
            _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackRanged[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
              _zackRanged[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackRanged[i]);

              _killemRanged[i] = new KillemRanged("KillemRanged" + i, StaticModelManager.GetModel("TuxGreen"));
              _killemRanged[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
              if (_3d)
            _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemRanged[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemRanged[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
              _killemRanged[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemRanged[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _killemRanged[i].Id = "Ranger" + i;
              _octree.Add(_killemRanged[i]);
            }

            for (int i = 0; i < _kamakaziCount; i++)
            {
              _zackKamakazi[i] = new ZackKamakazi("ZackKamakazi" + i, StaticModelManager.GetModel("RedRanger"));
              _zackKamakazi[i].StaticModel.Position.X = random.Next(minXZack, maxXZack);
              if (_3d)
            _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _zackKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _zackKamakazi[i].StaticModel.Position.Z = random.Next(minZZack, maxZZack);
              _zackKamakazi[i].StaticModel.Scale = new Vector(5, 5, 5);
              _zackKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, 0);
              _octree.Add(_zackKamakazi[i]);

              _killemKamakazi[i] = new KillemKamakazi("KillemKamakazi" + i, StaticModelManager.GetModel("TuxRed"));
              _killemKamakazi[i].StaticModel.Position.X = random.Next(minXKillem, maxXKillem);
              if (_3d)
            _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10 + random.Next(0, 1000);
              else
            _killemKamakazi[i].StaticModel.Position.Y = _terrain.Position.Y + 10;
              _killemKamakazi[i].StaticModel.Position.Z = random.Next(minZKillem, maxZKillem);
              _killemKamakazi[i].StaticModel.Scale = new Vector(20, 20, 20);
              _killemKamakazi[i].StaticModel.Orientation = new Quaternion(0, 1, 0, -Calc.PiOverTwo);
              _octree.Add(_killemKamakazi[i]);
            }
              }
              #endregion
        }
예제 #6
0
        public string Update(float elapsedTime)
        {
            CameraControls();
              _skybox.Position.X = _camera.Position.X;
              _skybox.Position.Y = _camera.Position.Y;
              _skybox.Position.Z = _camera.Position.Z;

              if (InputManager.Keyboard.Zpressed)
            _meleeCount = (_meleeCount + 1) % 100;
              if (InputManager.Keyboard.Xpressed)
            if (_meleeCount > 0) _meleeCount--;
              if (InputManager.Keyboard.Cpressed)
            _rangedCount = (_rangedCount + 1) % 100;
              if (InputManager.Keyboard.Vpressed)
            if (_rangedCount > 0) _rangedCount--;
              if (InputManager.Keyboard.Bpressed)
            _kamakaziCount = (_kamakaziCount + 1) % 100;
              if (InputManager.Keyboard.Npressed)
            if (_kamakaziCount > 0) _kamakaziCount--;

              if (InputManager.Keyboard.Gpressed)
            _map = (_map + 1) % 4;

              if (InputManager.Keyboard.Rpressed)
            _showlines = !_showlines;

              if (InputManager.Keyboard.Ypressed)
            _3d = !_3d;

              if (InputManager.Keyboard.Tpressed)
            GenerateUnits();

              if (InputManager.Keyboard.Spacepressed)
            _paused = !_paused;

              if (!_paused)
              {
            _octree.Traverse((Unit model) => { model.AI(elapsedTime, _octree); }, -100000, -100000, -100000, 100000, 100000, 100000);

            OctreeLinked<Unit, string> octree = new OctreeLinked<Unit, string>(0, 0, 0, 1000000, 10, Unit.CompareTo, Unit.CompareTo);
            foreach (Unit unit in _zackMelee)
              octree.Add(unit);
            foreach (Unit unit in _zackRanged)
              octree.Add(unit);
            foreach (Unit unit in _zackKamakazi)
              octree.Add(unit);
            foreach (Unit unit in _killemMelee)
              octree.Add(unit);
            foreach (Unit unit in _killemRanged)
              octree.Add(unit);
            foreach (Unit unit in _killemKamakazi)
              octree.Add(unit);
            _octree = octree;
              }
              return "Don't Change States";
        }