using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DW.Stream; using DWGame.Globals; using System.Diagnostics; namespace DWGame.Player { public class Human { public struct playerShip { public Vector2 position; public int score; public Texture2D ship; public Rectangle shipBox; public Rectangle playerBox; } public struct missle { public Vector2 mPosition; public Rectangle mBox; public Texture2D mTex; } //instances of player ship and missles public static playerShip human = new playerShip(); public static missle missle1 = new missle(); //list used to hold missles public static List missles = new List(); //variables used to create spritesheet animation public static Vector2 origin; public static float timer = 0f; public static float interval = 1000f; public static int curFrame = 0; public static int shipWidth = 61; public static int shipHeight = 40; public static int curFrameHolder = 0; public static int missleCounter = 0; //constructor public Human() { human.position = new Vector2(200, 300); human.ship = Renderer.content.Load("ships/ShipAnime1"); missle1.mTex = Renderer.content.Load("ships/Missle"); } //method used to move player ship up public static void moveUp() { human.position.Y -= 2; if (human.position.Y < 35) human.position.Y = 35; } //method used to move player ship down public static void moveDown() { human.position.Y += 2; if (human.position.Y > Renderer.Dimensions.CLIENTBOUNDS.Height - 20) human.position.Y = Renderer.Dimensions.CLIENTBOUNDS.Height - 20; } //method used to move player ship left public static void moveLeft() { human.position.X -= 2; if (human.position.X < 25) human.position.X = 25; } //method used to move player ship right public static void moveRight() { human.position.X += 2; if (human.position.X > Renderer.Dimensions.CLIENTBOUNDS.Width - 30) human.position.X = Renderer.Dimensions.CLIENTBOUNDS.Width - 30; } //method used to create a missle at the user's current location public static void fire() { if (missleCounter % 10 == 0) { missle1.mPosition.X = (int)(human.position.X + 30); missle1.mPosition.Y = (int)(human.position.Y - 7); missle1.mBox = new Rectangle((int)missle1.mPosition.X, (int)missle1.mPosition.Y , (int)missle1.mTex.Width, (int)missle1.mTex.Height); missles.Add(missle1); } } //method used to pass player ship to Collision public static playerShip getShip() { return human; } //method used to pass missle list to Collision public static List getMissles() { return missles; } //method used to set missle list to values passed from Collision public static void setMissles() { missles = Collision.getHMissles(); } //method used to update player status, score, and missle list public static void Update(Stopwatch inTimer, GameTime inGameTime) { if (Statics.playerState == Enums_Engine.PlayerState.ALIVE) { human.shipBox = new Rectangle(curFrame * shipWidth, 0, shipWidth, shipHeight); origin = new Vector2(human.shipBox.Width / 2, human.shipBox.Height / 2); human.playerBox = new Rectangle((int)human.position.X, (int)human.position.Y, (int)human.shipBox.Width / 4, (int)human.shipBox.Height / 4); for (int i = 0; i < missles.Count; i++) { missle temp = missles[i]; temp.mPosition.X = temp.mPosition.X + 3; temp.mBox.X = (int)temp.mPosition.X; missles[i] = temp; if (missles[i].mPosition.X >= Renderer.Dimensions.CLIENTBOUNDS.Width - 30) missles.RemoveAt(i); } if (missleCounter >= 100) missleCounter = 0; if (missles.Count >= 1) Human.getMissles(); missleCounter++; human.score = Collision.getScore(); } if (Statics.playerState == Enums_Engine.PlayerState.DEAD) { curFrame++; human.shipBox = new Rectangle(curFrame * shipWidth, 0, shipWidth, shipHeight); origin = new Vector2(human.shipBox.Width / 2, human.shipBox.Height / 2); human.playerBox = new Rectangle((int)human.position.X, (int)human.position.Y, (int)human.shipBox.Width / 4, (int)human.shipBox.Height / 4); inTimer.Stop(); } } //method used to draw player ship and missles public static void Draw() { Renderer.spriteBatch.Draw(human.ship, human.position, human.shipBox, Color.White, 0f, origin, 1.0f, SpriteEffects.None, 0); for(int i = 0; i < missles.Count; i++) { Renderer.spriteBatch.Draw(missles[i].mTex, missles[i].mBox, Color.White); } } } }