]> Dogcows Code - chaz/carfire/blob - CarFire/CarFire/CarFire/Human.cs
0d68d302d07c6d4b186a5d1d36d6c08317622ef1
[chaz/carfire] / CarFire / CarFire / CarFire / Human.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using Microsoft.Xna.Framework;
6 using Microsoft.Xna.Framework.Content;
7 using Microsoft.Xna.Framework.Graphics;
8 using Microsoft.Xna.Framework.Input;
9
10 namespace CarFire
11 {
12 public class Human : IPlayer
13 {
14 public enum State
15 {
16 left,
17 right,
18 up,
19 down
20 };
21 //The number of frames between each projectile is spawned.
22 const int shootCoolDown = 10;
23 State state;
24 String CharName;
25 Map theMap;
26 Texture2D charModel;
27 Texture2D projectileModel;
28 int health;
29 int damage;
30 int range;
31 int score;
32
33 MovementManager mMotion;
34
35 bool visible;
36 Display theDisplay;
37
38 //Used to draw projectiles
39 int projectileSpeed;
40 int projectileCoolDown;
41
42
43 public Human(Map _theMap, String Name, Texture2D model, Texture2D projectile, Display mDisplay, Point position)
44 {
45 theMap = _theMap;
46 CharName = Name;
47 theDisplay = mDisplay;
48 health = 100;
49 score = 0;
50 visible = false;
51 //default state
52 state = State.up;
53 charModel = model;
54 projectileModel = projectile;
55 projectileSpeed = 30;
56
57 // Speed is the number of grid cells you can move through per second.
58 mMotion = new MovementManager(position, 5.0f);
59 }
60
61 public void LoadContent(ContentManager contentManager)
62 {
63 charModel = contentManager.Load<Texture2D>("deselectBox"); //change to charModel when designed
64 projectileModel = contentManager.Load<Texture2D>("emptySelectBox"); //change to a projectile model later
65
66 }
67
68 public void UnloadContent()
69 {
70
71 }
72
73 public long Update(GameTime gameTime, NetworkManager networkGame)
74 {
75 return 0;
76
77 }
78 /// <summary>
79 /// This method will draw a character to the screen.
80 /// </summary>
81 /// <param name="spriteBatch"></param>
82 /// <returns></returns>
83 public long Draw(SpriteBatch spriteBatch)
84 {
85 Rectangle position = theMap.GetRectangleFromCoordinates(mMotion.Position);
86 spriteBatch.Draw(charModel, position, Color.White);
87 return 0;
88 }
89
90 public int Health { get { return health; } }
91 public int Score { get { return score; } }
92 public bool alive { get { return health > 0; } }
93
94 public Vector2 Position { get { return mMotion.Position; } }
95 public Point Coordinates { get { return mMotion.Coordinates; } }
96
97 public void causeDamageTo(int amount)
98 {
99 health -= amount;
100 }
101
102 /// <summary>
103 /// Moves the current player being controlled based on a given set of key presses.
104 /// The player can only move one grid space per movePlayer call. Thus this method
105 /// is made to be called ever update. The player will only move if the grid space
106 /// that is being moved to is an open space.
107 /// </summary>
108 /// <param name="keysPressed">A general list of keys that are pressed. Other keys can be included but only direction keys will be used</param>
109 public void MovePlayer(TimeSpan timeSpan, List<Keys> keysPressed)
110 {
111 bool moveLeft = keysPressed.Contains(Keys.Left);
112 bool moveRight = keysPressed.Contains(Keys.Right);
113 bool moveUp = keysPressed.Contains(Keys.Up);
114 bool moveDown = keysPressed.Contains(Keys.Down);
115 if (moveLeft)
116 state = State.left;
117 else if (moveRight)
118 state = State.right;
119 else if (moveUp)
120 state = State.up;
121 else if (moveDown)
122 state = State.down;
123
124 Point destination = MovementManager.GetNeighborCell(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown);
125 if (theMap.IsCellOpen(destination))
126 {
127 mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown);
128 }
129 else
130 {
131 mMotion.Update(timeSpan);
132 }
133
134
135 if (projectileCoolDown > 0)
136 projectileCoolDown--;
137 else if (projectileCoolDown == 0)
138 {
139 if (keysPressed.Contains<Keys>(Keys.Space))
140 {
141 //TODO spawn projectile... needs to be added to display though
142 if (state == State.up)
143 {
144 projectileCoolDown = shootCoolDown;
145 theDisplay.AddProjectiles(new Projectile(theMap, projectileModel,
146 new Vector2(0, -projectileSpeed), Coordinates.X, Coordinates.Y - 1));
147 }
148 if (state == State.down)
149 {
150 projectileCoolDown = shootCoolDown;
151 theDisplay.AddProjectiles(new Projectile(theMap, projectileModel,
152 new Vector2(0, projectileSpeed), Coordinates.X, Coordinates.Y + 1));
153 }
154 if (state == State.right)
155 {
156 projectileCoolDown = shootCoolDown;
157 theDisplay.AddProjectiles(new Projectile(theMap, projectileModel,
158 new Vector2(projectileSpeed, 0), Coordinates.X + 1, Coordinates.Y));
159 }
160 if (state == State.left)
161 {
162 projectileCoolDown = shootCoolDown;
163 theDisplay.AddProjectiles(new Projectile(theMap, projectileModel,
164 new Vector2(-projectileSpeed, 0), Coordinates.X - 1, Coordinates.Y));
165 }
166 }
167 }
168 }
169
170
171 public void powerUp(int amount)
172 {
173 health += amount;
174 }
175
176 public void Spawn(Vector2 spawn)
177 {
178 //gridX = (int)spawn.X;
179 //gridY = (int)spawn.Y;
180 visible = true;
181 }
182
183
184 }
185 }
This page took 0.03952 seconds and 3 git commands to generate.