source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Players/PlayerAI.cs @ 4671

Revision 4671, 2.9 KB checked in by dezhidki, 7 years ago (diff)

Talletus.

Line 
1using CastleMaster.Graphics;
2using CastleMaster.World;
3using System;
4using System.Collections.Generic;
5using System.Linq;
6using System.Text;
7using CastleMaster.Units;
8using CastleMaster.Ai.AIStates;
9using Microsoft.Xna.Framework;
10using CastleMaster.Units.Mobs;
11
12namespace CastleMaster.Players
13{
14    public class PlayerAI : Player
15    {
16        public const int DIFFICULTY_EASY = 60 * 10;
17        public const int DIFFICULTY_NORMAL = 60 * 8;
18        public const int DIFFICULTY_HARD = 60 * 3;
19
20        private List<AIState> availableStates;
21        private TimerHelper brainTimer;
22        private AIState currentBrain;
23        private Player enemy;
24        private List<Type> unitTypes;
25
26        public PlayerAI(Team team, Level level, Camera camera, int difficuly, Player enemyPlayer)
27            : base(team, level, camera)
28        {
29            enemy = enemyPlayer;
30            availableStates = new List<AIState>();
31            availableStates.Add(new IdleState(this));
32            availableStates.Add(new AgressiveState(this));
33            availableStates.Add(new DefensiveState(this));
34            availableStates.Add(new CollectiveState(this));
35
36            unitTypes = new List<Type>();
37            unitTypes.Add(typeof(MobRanger));
38            unitTypes.Add(typeof(MobWarrior));
39
40            currentBrain = availableStates[0];
41            brainTimer = new TimerHelper(difficuly, 1).Start();
42            brainTimer.RoundEnded += ReThinkBestState;
43        }
44
45        public Point DefencePoint { get; set; }
46
47        public List<Type> AttackerTypes { get { return unitTypes; } }
48
49        public Player Enemy { get { return enemy;} }
50
51        public Point ForestPoint { get; set; }
52
53        public override void OnLevelLoaded()
54        {
55            ReThinkBestState();
56        }
57
58        private void ReThinkBestState()
59        {
60           
61
62            AIState newState = null;
63            int importance = -1;
64            foreach (AIState aiState in availableStates)
65            {
66                int stateImportance = aiState.Importance;
67                if (importance == -1 || stateImportance > importance)
68                {
69                    importance = stateImportance;
70                    newState = aiState;
71                }
72            }
73            if (newState != currentBrain)
74            {
75                if (currentBrain != null) currentBrain.OnStateChange();
76                currentBrain = newState;
77                currentBrain.OnStateChosen();
78                Console.WriteLine("New state:" + currentBrain);
79            }
80        }
81
82        public override void Update()
83        {
84            brainTimer.UpdateStep();
85            if (currentBrain != null) currentBrain.ApplyState();
86        }
87
88        public override Unit SelectUnit(Team team)
89        {
90            if (currentBrain != null)
91                return currentBrain.SelectUnit(team);
92            return null;
93        }
94    }
95}
Note: See TracBrowser for help on using the repository browser.