source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Ai/AIStates/DefensiveState.cs @ 4753

Revision 4753, 2.5 KB checked in by dezhidki, 6 years ago (diff)
  • Lisätty kunnon ohjeet.
  • Ctrl + RMouse toimii nyt kunnolla (voi valita monta kerrallaan).
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using CastleMaster.Players;
6using CastleMaster.Units.Mobs;
7using CastleMaster.Units;
8using CastleMaster.Graphics;
9using Microsoft.Xna.Framework;
10
11namespace CastleMaster.Ai.AIStates
12{
13    public class DefensiveState : AIState
14    {
15        private List<MobWarrior> warriors;
16        private List<MobRanger> rangers;
17        private int kingHitTimes = 0;
18
19        public DefensiveState(PlayerAI player)
20            : base(player)
21        {
22        }
23
24        public override int Importance
25        {
26            get
27            {
28                List<Mob> mobUnits = AI.GetUnits<Mob>();
29                int importance = IMPORTANCE_LOW;
30
31                if (kingHitTimes != AI.King.TimesHit)
32                    importance = IMPORTANCE_HIGH;
33                kingHitTimes = AI.King.TimesHit;
34
35                return importance;
36            }
37        }
38
39        public override void OnStateChosen()
40        {
41            warriors = AI.GetUnits<MobWarrior>();
42            rangers = AI.GetUnits<MobRanger>();
43
44            while (!AI.Armory.IsDestroyed && warriors.Count + rangers.Count < 30 && AI.CoinsAmount >= UnitArmory.PRICE_WARRIOR)
45            {
46                Type typeToBuy = null;
47                typeToBuy = AI.AttackerTypes[Game.Random.Next(AI.AttackerTypes.Count)];
48
49                Mob m = AI.Armory.BuyUnit<Mob>(typeToBuy);
50
51                bool solid = true;
52                int xTile = 0, zTile = 0;
53                while (solid)
54                {
55                    xTile = AI.DefencePoint.X + (int)(Math.Sin(Game.Random.NextDouble() * MathHelper.TwoPi) * Game.Random.NextDouble() * 4.0F);
56                    zTile = AI.DefencePoint.Y + (int)(Math.Cos(Game.Random.NextDouble() * MathHelper.TwoPi) * Game.Random.NextDouble() * 4.0F);
57                    if (xTile < 0 || xTile >= AI.Level.Width || zTile < 0 || zTile >= AI.Level.Height) continue;
58                    if (!AI.Level.SolidTo(m, xTile, zTile)) solid = false;
59                }
60
61                AI.Level.AddEntity(m, xTile * Viewport.TILESIZE + 8.0F, zTile * Viewport.TILESIZE + 8.0F);
62                if (typeToBuy == typeof(MobWarrior))
63                    warriors.Add((MobWarrior)m);
64                else
65                    rangers.Add((MobRanger)m);
66            }
67        }
68
69        public override void OnStateChange()
70        {
71        }
72
73        public override void ApplyState()
74        {
75        }
76    }
77}
Note: See TracBrowser for help on using the repository browser.