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

Revision 4694, 3.0 KB checked in by dezhidki, 7 years ago (diff)

Guit lisätty, AIn viimestely.

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(MobWarrior));
38            unitTypes.Add(typeof(MobRanger));
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        }
56
57        private void ReThinkBestState()
58        {
59           
60
61            AIState newState = null;
62            int importance = -1;
63            foreach (AIState aiState in availableStates)
64            {
65                int stateImportance = aiState.Importance;
66                if (importance == -1 || stateImportance > importance)
67                {
68                    importance = stateImportance;
69                    newState = aiState;
70                }
71            }
72            if (newState != currentBrain)
73            {
74                if (currentBrain != null) currentBrain.OnStateChange();
75                currentBrain = newState;
76                currentBrain.OnStateChosen();
77                Console.WriteLine("New state:" + currentBrain);
78            }
79            else
80                currentBrain.OnStateReChosen();
81        }
82
83        public override void Update()
84        {
85            brainTimer.UpdateStep();
86            if (currentBrain != null) currentBrain.ApplyState();
87        }
88
89        public override Unit SelectUnit(Team team)
90        {
91            if (currentBrain != null)
92                return currentBrain.SelectUnit(team);
93            return null;
94        }
95    }
96}
Note: See TracBrowser for help on using the repository browser.