]> Dogcows Code - chaz/carfire/blobdiff - CarFire/CarFire/CarFire/Ranged.cs
Split human class into Melee and ranged... probably should do some sort
[chaz/carfire] / CarFire / CarFire / CarFire / Ranged.cs
diff --git a/CarFire/CarFire/CarFire/Ranged.cs b/CarFire/CarFire/CarFire/Ranged.cs
new file mode 100644 (file)
index 0000000..b859cd6
--- /dev/null
@@ -0,0 +1,174 @@
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using Microsoft.Xna.Framework;\r
+using Microsoft.Xna.Framework.Content;\r
+using Microsoft.Xna.Framework.Graphics;\r
+using Microsoft.Xna.Framework.Input;\r
+\r
+namespace CarFire\r
+{\r
+    public class Ranged : IPlayer\r
+    {\r
+        //The number of frames between each projectile is spawned.\r
+        const int shootCoolDown = 18;\r
+        String CharName;\r
+        Game game;\r
+        Texture2D charModel;\r
+        Texture2D projectileModel;\r
+        int health;\r
+        int damage;\r
+        int range;\r
+        int score;\r
+\r
+        MovementManager mMotion;\r
+        bool visible;\r
+\r
+        //Used to draw projectiles\r
+        int projectileSpeed;\r
+        int projectileCoolDown;\r
+        int mPlayerIndex;\r
+        \r
+\r
+        public Ranged(Game theGame, String Name, Point position, int playerIndex)\r
+        {\r
+            game = theGame;\r
+            CharName = Name;\r
+            health = 100;\r
+            score = 0;\r
+            visible = false;\r
+            projectileSpeed = 8;\r
+            mPlayerIndex = playerIndex;\r
+\r
+            // Speed is the number of grid cells you can move through per second.\r
+            mMotion = new MovementManager(position, 4.0f);\r
+        }\r
+\r
+        public void LoadContent(ContentManager contentManager)\r
+        {\r
+            charModel = contentManager.Load<Texture2D>("cs"); //change to charModel when designed\r
+            projectileModel = contentManager.Load<Texture2D>("projectile"); //change to a projectile model later\r
+\r
+        }\r
+\r
+\r
+        public void Update(TimeSpan timeSpan)\r
+        {\r
+        }\r
+        /// <summary>\r
+        /// This method will draw a character to the screen.\r
+        /// </summary>\r
+        /// <param name="spriteBatch"></param>\r
+        public void Draw(SpriteBatch spriteBatch)\r
+        {\r
+            Rectangle position = game.State.Map.GetRectangleFromCoordinates(mMotion.Position);\r
+            spriteBatch.Draw(charModel, position, Color.White);\r
+        }\r
+\r
+        public int Health { get { return health; } }\r
+        public int Score { get { return score; } }\r
+        public bool alive { get { return health > 0; } }\r
+\r
+        public Vector2 Position { get { return mMotion.Position; } }\r
+        public Point Coordinates { get { return mMotion.Coordinates; } }\r
+\r
+        public void causeDamageTo(int amount)\r
+        {\r
+            health -= amount;\r
+        }\r
+\r
+        /// <summary>\r
+        /// Moves the current player being controlled based on a given set of key presses.\r
+        /// The player can only move one grid space per movePlayer call. Thus this method\r
+        /// is made to be called ever update. The player will only move if the grid space\r
+        /// that is being moved to is an open space.\r
+        /// </summary>\r
+        /// <param name="keysPressed">A general list of keys that are pressed. Other keys can be included but only direction keys will be used</param>\r
+        public void UpdateInput(TimeSpan timeSpan, List<Keys> keysPressed)\r
+        {\r
+\r
+            UpdatePosition(timeSpan, keysPressed);\r
+\r
+            if (projectileCoolDown > 0)\r
+                projectileCoolDown--;\r
+            else if (projectileCoolDown == 0)\r
+            {\r
+                if (keysPressed.Contains<Keys>(Keys.Space))\r
+                {\r
+                    Attack();\r
+                }\r
+            }\r
+        }\r
+        public void UpdatePosition(TimeSpan timeSpan, List<Keys> keysPressed)\r
+        {\r
+            bool moveLeft = keysPressed.Contains(Keys.Left);\r
+            bool moveRight = keysPressed.Contains(Keys.Right);\r
+            bool moveUp = keysPressed.Contains(Keys.Up);\r
+            bool moveDown = keysPressed.Contains(Keys.Down);\r
+            Point destination = MovementManager.GetNeighborCell(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown);\r
+            if (!keysPressed.Contains(Keys.LeftControl))\r
+            {\r
+                if (game.IsCellOpen(destination))\r
+                {\r
+                    mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
+                }\r
+                else\r
+                {\r
+                    mMotion.Update(timeSpan);\r
+                }\r
+            }\r
+            else\r
+            {\r
+                mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
+            }\r
+        }\r
+        public void Attack()\r
+        {\r
+             float velocityX = 0;\r
+                    float velocityY = 0;\r
+                    int startX = Coordinates.X;\r
+                    int startY = Coordinates.Y;\r
+                    if (mMotion.Direction == Direction.Down || mMotion.Direction == Direction.LowerLeft || mMotion.Direction == Direction.LowerRight)\r
+                    {\r
+                        velocityY = 1;\r
+                        startY = Coordinates.Y + 1;\r
+                    }\r
+                    else if (mMotion.Direction == Direction.Up || mMotion.Direction == Direction.UpperLeft || mMotion.Direction == Direction.UpperRight)\r
+                    {\r
+                        velocityY = -1;\r
+                        startY = Coordinates.Y - 1;\r
+                    }\r
+                    if (mMotion.Direction == Direction.Right || mMotion.Direction == Direction.LowerRight || mMotion.Direction == Direction.UpperRight)\r
+                    {\r
+                        velocityX = 1;\r
+                        startX = Coordinates.X + 1;\r
+                    }\r
+                    else if (mMotion.Direction == Direction.Left || mMotion.Direction == Direction.LowerLeft || mMotion.Direction == Direction.UpperLeft)\r
+                    {\r
+                        velocityX = -1;\r
+                        startX = Coordinates.X - 1;\r
+                    }\r
+                    Vector2 toShoot = new Vector2(velocityX, velocityY);\r
+                    toShoot.Normalize();\r
+                    toShoot *= projectileSpeed;\r
+                    projectileCoolDown = shootCoolDown;\r
+                    game.State.mDisplay.AddProjectiles(new Projectile(game, projectileModel,\r
+                        toShoot, new Point(startX, startY), mPlayerIndex, damage));\r
+                \r
+        }\r
+        public void powerUp(int amount)\r
+        {\r
+            health += amount;\r
+        }\r
+\r
+        public void Spawn(Vector2 spawn)\r
+        {\r
+            //gridX = (int)spawn.X;\r
+            //gridY = (int)spawn.Y;\r
+            visible = true;\r
+        }\r
+\r
+\r
+    }\r
+}
\ No newline at end of file
This page took 0.020982 seconds and 4 git commands to generate.