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

Revision 4646, 4.5 KB checked in by dezhidki, 6 years ago (diff)

Muokattu sotilaita viimeiseen muotoon.

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.IsSelected = false;
74                        selectedUnit = null;
75                    }
76                    selectedMobUnits.Add((Mob)u);
77                    u.IsSelected = true;
78                }
79                else
80                {
81                    selectedMobUnits.ForEach(m => m.IsSelected = false);
82                    selectedMobUnits.Clear();
83
84                    if (selectedUnit != null)
85                        selectedUnit.IsSelected = false;
86                    selectedUnit = null;
87                    if (u != null)
88                    {
89                        if (!(u is Mob))
90                            selectedUnit = u;
91                        else
92                            selectedMobUnits.Add((Mob)u);
93
94                        u.IsSelected = true;
95                    }
96                }
97            }
98
99            if (InputHandler.HasMouseButtonBeenPressed(MouseButtons.Left))
100            {
101                if (selectedUnit != null)
102                    selectedUnit.OnFunctionClick(camera.MouseWorldPos.X, camera.MouseWorldPos.Y, 1, false);
103                else if (selectedMobUnits.Count > 0)
104                    selectedMobUnits[0].OnGroupOrder(selectedMobUnits, camera.MouseWorldPos.X, camera.MouseWorldPos.Y);
105            }
106        }
107
108        public override Unit SelectUnit(Team team)
109        {
110            float mouseX = InputHandler.MouseX + camera.XLeft;
111            float mouseY = InputHandler.MouseY + camera.YTop;
112
113            float r = 1.0F;
114            List<Unit> units = level.GetUnitsWithinScreenSpace(mouseX - r, mouseY - r, mouseX + r, mouseY + r, team);
115
116            Unit current = null;
117            float dist = 0.0F;
118            foreach (Unit u in units)
119            {
120                float udist = u.DistanceFromScreenSpaceSqr(mouseX, mouseY);
121                if (current == null || udist < dist)
122                {
123                    current = u;
124                    dist = udist;
125                }
126            }
127
128            return current;
129        }
130    }
131}
Note: See TracBrowser for help on using the repository browser.