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

Revision 4694, 4.8 KB checked in by dezhidki, 6 years ago (diff)

Guit lisätty, AIn viimestely.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using CastleMaster.World;
6using CastleMaster.Graphics;
7using CastleMaster.Input;
8using System.Windows.Forms;
9using Microsoft.Xna.Framework;
10using CastleMaster.Units;
11using CastleMaster.Units.Mobs;
12using System.Diagnostics;
13
14namespace CastleMaster.Players
15{
16    public class PlayerReal : Player
17    {
18        private const int SPEED_SLOW = 10;
19        private const int SPREED_FAST = 20;
20
21        private bool moveWorldWithMouse = false;
22        private Point oldMousePos;
23        private Unit selectedUnit;
24        private int cameraSpeed = 10;
25        private List<Mob> selectedMobUnits;
26
27        public PlayerReal(Team team, Level level, Camera camera)
28            : base(team, level, camera)
29        {
30            oldMousePos = Point.Zero;
31            selectedMobUnits = new List<Mob>();
32        }
33
34        public override void Update()
35        {
36            cameraSpeed = InputHandler.IsKeyDown(Keys.ShiftKey) ? SPREED_FAST : SPEED_SLOW;
37
38            if (InputHandler.IsKeyDown(Keys.W))
39                camera.YTop -= cameraSpeed;
40            if (InputHandler.IsKeyDown(Keys.S))
41                camera.YTop += cameraSpeed;
42            if (InputHandler.IsKeyDown(Keys.A))
43                camera.XLeft -= cameraSpeed;
44            if (InputHandler.IsKeyDown(Keys.D))
45                camera.XLeft += cameraSpeed;
46
47            if (InputHandler.HasMouseButtonBeenPressed(MouseButtons.Middle) || moveWorldWithMouse)
48            {
49                if (!moveWorldWithMouse)
50                {
51                    moveWorldWithMouse = true;
52                    oldMousePos = InputHandler.MousePos;
53                }
54
55                if (InputHandler.IsMouseButtonDown(MouseButtons.Middle))
56                {
57                    camera.XLeft -= (InputHandler.MousePos.X - oldMousePos.X);
58                    camera.YTop -= (InputHandler.MousePos.Y - oldMousePos.Y);
59
60                    oldMousePos = InputHandler.MousePos;
61                }
62                else moveWorldWithMouse = false;
63            }
64
65            if (InputHandler.HasMouseButtonBeenPressed(MouseButtons.Right))
66            {
67                Unit u = SelectUnit(Team);
68
69                if (InputHandler.IsKeyDown(Keys.ControlKey) && u != null && u is Mob)
70                {
71                    if (selectedUnit != null)
72                    {
73                        selectedUnit.OnFocusLost();
74                        selectedUnit.IsSelected = false;
75                        selectedUnit = null;
76                    }
77                    selectedMobUnits.Add((Mob)u);
78                    u.IsSelected = true;
79                    u.OnFocus();
80                }
81                else
82                {
83                    selectedMobUnits.ForEach(delegate(Mob m)
84                    {
85                        m.OnFocusLost();
86                        m.IsSelected = false;
87                    });
88
89                    selectedMobUnits.Clear();
90
91                    if (selectedUnit != null)
92                    {
93                        selectedUnit.OnFocusLost();
94                        selectedUnit.IsSelected = false;
95                    }
96                    selectedUnit = null;
97                    if (u != null)
98                    {
99                        if (!(u is Mob))
100                            selectedUnit = u;
101                        else
102                            selectedMobUnits.Add((Mob)u);
103
104                        u.IsSelected = true;
105                        u.OnFocus();
106                    }
107                }
108            }
109
110            if (InputHandler.HasMouseButtonBeenPressed(MouseButtons.Left))
111            {
112                if (selectedUnit != null)
113                    selectedUnit.OnFunctionClick(camera.MouseWorldPos.X, camera.MouseWorldPos.Y, 1, false);
114                else if (selectedMobUnits.Count > 0)
115                    selectedMobUnits[0].OnGroupOrder(selectedMobUnits, camera.MouseWorldPos.X, camera.MouseWorldPos.Y);
116            }
117        }
118
119        public override Unit SelectUnit(Team team)
120        {
121            float mouseX = InputHandler.MouseX + camera.XLeft;
122            float mouseY = InputHandler.MouseY + camera.YTop;
123
124            float r = 1.0F;
125            List<Unit> units = level.GetUnitsWithinScreenSpace(mouseX - r, mouseY - r, mouseX + r, mouseY + r, team);
126
127            Unit current = null;
128            float dist = 0.0F;
129            foreach (Unit u in units)
130            {
131                float udist = u.DistanceFromScreenSpaceSqr(mouseX, mouseY);
132                if (current == null || udist < dist)
133                {
134                    current = u;
135                    dist = udist;
136                }
137            }
138
139            return current;
140        }
141    }
142}
Note: See TracBrowser for help on using the repository browser.