Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace WindowsGame1
- {
- /// <summary>
- /// This is the main type for your game
- /// </summary>
- public class Game1 : Microsoft.Xna.Framework.Game
- {
- // system objects
- GraphicsDeviceManager graphics;
- SpriteFont font;
- SpriteBatch spritebatch;
- //FOR SKINNED ANIMATED CHARACTER//////////
- GameModels[] enemies = new GameModels[4];
- AnimationPlayer animationPlayer;
- //ClipPlayer clipPlayer;
- SkinningData skinningData;
- //added world
- //Vector3 position = new Vector3(-47.0f, 5.0f, -100.0f);
- Matrix rotation = Matrix.Identity;
- //Vector3 scale = new Vector3(0.0f, 0.0f, 0.0f);
- /////////////////////////////////////////
- GameModels floor; //floor
- GameModels building; //building
- GameModels door; // door
- GameModels bullet = new GameModels(); //bullets
- //Camera
- Vector3 cameraPosition = new Vector3(-47.0f, 12.0f, -100.0f);
- Vector3 cameraLookAtRelative = new Vector3(0.0f, -10.0f, -160.0f);
- float cameraRotation = 3.17f;
- Matrix cameraProjectionMatrix;
- Matrix cameraViewMatrix;
- //random
- Random random;
- //points variable
- int points = 0;
- //check if enemy is hit
- bool enemyhit = false;
- public Game1()
- {
- graphics = new GraphicsDeviceManager(this);
- Content.RootDirectory = "Content";
- //create new random number
- random = new Random();
- //initialize stuff
- floor = new GameModels();
- building = new GameModels();
- door = new GameModels();
- for (int k = 0; k < enemies.Length; k++)
- enemies[k] = new GameModels();
- }
- protected override void Initialize()
- {
- base.Initialize();
- }
- //load any model
- private Model LoadModel(string name)
- {
- Model model = Content.Load<Model>(name);
- return model;
- }
- //floaty random number thing
- private float Randfloaty(float max)
- {
- return (float)random.NextDouble() * max;
- }
- // Random Function
- private int RandNum(int min, int max)
- {
- return random.Next(min, max);
- }
- protected override void LoadContent()
- {
- //load everything
- floor.model = LoadModel("floor");
- floor.position = new Vector3(0.0f, -2.0f, 0.0f);
- building.model = LoadModel("building");
- building.position = new Vector3(0.0f, 25.0f, 0.0f);
- building.scale = 10.0f;
- door.model = LoadModel("door");
- door.position = new Vector3(-47.5f, 26.0f, -56.0f);
- door.scale = 10.0f;
- bullet.model = Content.Load<Model>("x");
- bullet.rotation = new Vector3(-90, 0, 0);
- bullet.scale = 0.05f;
- bullet.visible = false; //start off not seen
- spritebatch = new SpriteBatch(this.graphics.GraphicsDevice);
- // Loading sprite font
- font = Content.Load<SpriteFont>("SpriteFont1");
- cameraViewMatrix = Matrix.CreateLookAt(cameraPosition, cameraLookAtRelative, Vector3.Up);
- cameraProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), (float)graphics.GraphicsDevice.Viewport.Width /
- (float)graphics.GraphicsDevice.Viewport.Height, 1.0f, 10000.0f);
- //////////////////////FOR SKINNED ANIMATED MODEL///////////////////
- // Load the model.
- for (int k = 0; k < enemies.Length; k++)
- {
- enemies[k].model = LoadModel("dude");
- enemies[k].scale = 0.24f;
- enemies[k].position = new Vector3(RandNum(-64, 64), 1.0f, RandNum(-2, 54)); //position enemies randomly
- enemies[k].rotation = new Vector3(0.0f, Randfloaty(MathHelper.TwoPi), 0.0f); //set random rotation
- Vector3 velocity = new Vector3(0,0,-0.16f); //set speed vector
- enemies[k].speed = Vector3.Transform(velocity, Matrix.CreateRotationY(enemies[k].rotation.Y)); //set velocity vector (yes I know speed and velocity name's should be switched around)
- skinningData = enemies[k].model.Tag as SkinningData;
- if (skinningData == null)
- throw new InvalidOperationException
- ("This model does not contain a SkinningData tag.");
- animationPlayer = new AnimationPlayer(skinningData);
- AnimationClip clip = skinningData.AnimationClips["Take 001"];
- animationPlayer.StartClip(clip);
- }
- UpdateCamera();
- }
- //camera stuff
- protected void UpdateCamera()
- {
- Matrix rotationMatrix = Matrix.CreateRotationY(cameraRotation);
- Vector3 cameraLookAtRelativeXformed = Vector3.Transform(cameraLookAtRelative, rotationMatrix);
- Vector3 cameraLookAt = cameraPosition + cameraLookAtRelativeXformed;
- cameraViewMatrix = Matrix.CreateLookAt(
- cameraPosition,
- cameraLookAt,
- Vector3.Up);
- cameraProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(
- MathHelper.ToRadians(45.0f),
- (float)graphics.GraphicsDevice.Viewport.Width /
- (float)graphics.GraphicsDevice.Viewport.Height,
- 1.0f,
- 10000.0f);
- }
- //HI ALI
- protected override void UnloadContent()
- {
- }
- /// <param name="gameTime">Provides a snapshot of timing values.</param>
- protected override void Update(GameTime gameTime)
- {
- bool enemycollide = false; //heck if enemy collides with wall
- // Allows the game to exit
- if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
- this.Exit();
- //check if player in range of door
- if (cameraPosition.Z > -90 && cameraPosition.Z < -35)
- {
- if (door.position.Y < 55.0f)
- door.position.Y += 1.3f; //open door
- }
- else
- {
- if (door.position.Y > 26.0f) //check if player is farther from door
- door.position.Y -= 1.3f; //close door
- }
- for (int i = 0; i < enemies.Length; i++)
- {
- //check target position of enemies
- Vector3 EcurrentPos = new Vector3(enemies[i].position.X, enemies[i].position.Y, enemies[i].position.Z);
- Matrix EforwardMovement = Matrix.CreateRotationY(enemies[i].rotation.Y);
- Vector3 Evel = new Vector3(0, 0, -1.0f);
- Evel = Vector3.Transform(Evel, EforwardMovement);
- Vector3 Etarget = EcurrentPos + Evel;
- enemies[i].position += enemies[i].speed; //move enemy
- //check if enemies hit walls
- if (Etarget.Z > 53 || Etarget.X < -64 || Etarget.X > 66 || (Etarget.X > -30 && Etarget.Z < -1))
- enemycollide = true;
- if (Etarget.Z < -1 && (Etarget.X > -32 || Etarget.X < -64 || Etarget.Z < -102))
- enemycollide = true;
- if (enemycollide == true)
- {
- enemies[i].rotation.Y += (float)Math.PI; //turn enemy 180 degrees
- enemies[i].speed *= -1; //reverse speed
- enemycollide = false; //reset collision boolean
- }
- }
- #if !XBOX
- animationPlayer.Update(gameTime.ElapsedGameTime, true, Matrix.Identity);
- //clipPlayer.update(gameTime.ElapsedGameTime, true, Matrix.Identity);
- KeyboardState keyboardState = Keyboard.GetState();
- if (keyboardState.IsKeyDown(Keys.Left))
- {
- cameraRotation += 0.01f;
- cameraLookAtRelative.Y -= 0.0f;
- UpdateCamera();
- }
- if (keyboardState.IsKeyDown(Keys.Right))
- {
- //rotation.Y -= 0.05f;
- cameraRotation -= 0.01f;
- cameraLookAtRelative.Y += 0.0f;
- UpdateCamera();
- }
- if (keyboardState.IsKeyDown(Keys.Up))
- {
- bool collide = false; //collision check
- //get target position
- Vector3 currentPos = new Vector3(cameraPosition.X, cameraPosition.Y, cameraPosition.Z);
- Matrix forwardMovement = Matrix.CreateRotationY(cameraRotation);
- Vector3 vel = new Vector3(0, 0, -1.0f);
- vel = Vector3.Transform(vel, forwardMovement);
- Vector3 target = currentPos + vel;
- //check if camera hits wall
- if (target.Z > 53 || target.X < -64 || target.X > 66 || (target.X > -30 && target.Z < -1))
- collide = true;
- if (target.Z < -1 && (target.X > -32 || target.X < -64 || target.Z < -102))
- collide = true;
- if (collide == true || enemyhit == true) //if camera hits wall or enemy stop movement
- {
- currentPos.Z += 0.0f;
- currentPos.X += 0.0f;
- }
- else
- {
- currentPos.Z += vel.Z;//move
- currentPos.X += vel.X;
- }
- //update camera position
- cameraPosition.Z = currentPos.Z;
- cameraPosition.X = currentPos.X;
- UpdateCamera();
- }
- if (keyboardState.IsKeyDown(Keys.Down))
- {
- bool collide = false; //collision check
- //get target position
- Vector3 currentPos = new Vector3(cameraPosition.X, cameraPosition.Y, cameraPosition.Z);
- Matrix forwardMovement = Matrix.CreateRotationY(cameraRotation);
- Vector3 vel = new Vector3(0, 0, 1.0f);
- vel = Vector3.Transform(vel, forwardMovement);
- Vector3 target = currentPos + vel;
- //check collision
- if (target.Z > 53 || target.X < -64 || target.X > 66 || (target.X > -30 && target.Z <-2))
- collide = true;
- if (target.Z < -2 && (target.X > -32 || target.X < -64 || target.Z < -102))
- collide = true;
- //if camera hits wall or enemy stop movement
- if (collide == true || enemyhit == true)
- {
- currentPos.Z += 0.0f;
- currentPos.X += 0.0f;
- }
- else
- {
- currentPos.Z += vel.Z; //move
- currentPos.X += vel.X;
- }
- //update camera
- cameraPosition.Z = currentPos.Z;
- cameraPosition.X = currentPos.X;
- UpdateCamera();
- }
- if (!bullet.visible && keyboardState.IsKeyDown(Keys.Space))
- {
- bullet.position = cameraPosition;
- bullet.position -= new Vector3(0, 1, 0);
- bullet.speed = Vector3.Transform(new Vector3(0, 0, -2), Matrix.CreateRotationY(cameraRotation));
- bullet.visible = true;
- }
- //move bullet if fired
- bullet.Update(gameTime);
- //destroy bullet if it hits a wall
- if (bullet.position.Z > 53 || bullet.position.X < -64 || bullet.position.X > 66 || (bullet.position.X > -30 && bullet.position.Z < -2))
- bullet.visible = false;
- if (bullet.position.Z < -2 && (bullet.position.X > -32 || bullet.position.X < -64 || bullet.position.Z < -102))
- bullet.visible = false;
- #endif
- //check enemies target position
- Vector3 currentPos2 = new Vector3(cameraPosition.X, cameraPosition.Y, cameraPosition.Z);
- Matrix forwardMovement2 = Matrix.CreateRotationY(cameraRotation);
- Vector3 vel2 = new Vector3(0, 0, 1.0f);
- vel2 = Vector3.Transform(vel2, forwardMovement2);
- Vector3 target2 = currentPos2 + vel2;
- for (int j = 0; j < enemies.Length; j++)
- {
- float distance2 = Vector3.Distance(enemies[j].position, target2); //distance between enemies and camera
- float distance3 = Vector3.Distance(enemies[j].position, bullet.position); //distance between enemies and bullets
- if (distance2 < 15)
- {
- enemies[j].visible = false; //destroy enemy
- enemies[j].position.X = -100; //reset enemy position
- enemyhit = true; //set enemy to being hit
- }
- if (distance3 < 13)
- {
- enemies[j].visible = false; //destroy
- bullet.visible = false; //destroy bullet
- enemies[j].position.X = -100; //reset enemy position
- points++; //increase point (max 4)
- }
- }
- base.Update(gameTime);
- }
- //draw floor
- private void DrawFloor()
- {
- foreach (ModelMesh mesh in floor.model.Meshes)
- {
- foreach (BasicEffect effect in mesh.Effects)
- {
- effect.EnableDefaultLighting();
- effect.PreferPerPixelLighting = true;
- effect.World =
- Matrix.CreateScale(10) *
- Matrix.CreateTranslation(floor.position);
- effect.Projection = cameraProjectionMatrix;
- effect.View = cameraViewMatrix;
- }
- mesh.Draw();
- }
- }
- //draw building
- private void DrawBuilding()
- {
- foreach (ModelMesh mesh in building.model.Meshes)
- {
- foreach (BasicEffect effect in mesh.Effects)
- {
- effect.EnableDefaultLighting();
- effect.PreferPerPixelLighting = true;
- effect.World =
- Matrix.CreateScale(building.scale) *
- Matrix.CreateTranslation(building.position);
- effect.Projection = cameraProjectionMatrix;
- effect.View = cameraViewMatrix;
- }
- mesh.Draw();
- }
- }
- //draw door
- private void DrawDoor()
- {
- foreach (ModelMesh mesh in door.model.Meshes)
- {
- foreach (BasicEffect effect in mesh.Effects)
- {
- effect.EnableDefaultLighting();
- effect.PreferPerPixelLighting = true;
- effect.World =
- Matrix.CreateScale(door.scale) *
- Matrix.CreateTranslation(door.position);
- effect.Projection = cameraProjectionMatrix;
- effect.View = cameraViewMatrix;
- }
- mesh.Draw();
- }
- }
- //draw bullet
- private void DrawBullet()
- {
- foreach (ModelMesh mesh in bullet.model.Meshes)
- {
- foreach (BasicEffect effect in mesh.Effects)
- {
- effect.EnableDefaultLighting();
- effect.PreferPerPixelLighting = true;
- effect.World =
- Matrix.CreateScale(bullet.scale) *
- Matrix.CreateTranslation(bullet.position);
- effect.Projection = cameraProjectionMatrix;
- effect.View = cameraViewMatrix;
- }
- mesh.Draw();
- }
- }
- /// <summary>
- /// This is called when the game should draw itself.
- /// </summary>
- /// <param name="gameTime">Provides a snapshot of timing values.</param>
- protected override void Draw(GameTime gameTime)
- {
- graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
- //draw stuff
- DrawFloor();
- DrawBuilding();
- DrawDoor();
- if(bullet.visible == true) //only draw bullet if its set to visible
- DrawBullet();
- // Render the skinned mesh.
- for (int i = 0; i < enemies.Length; i++)
- {
- if (enemies[i].visible == true)
- {
- Matrix world = (Matrix.CreateRotationX(enemies[i].rotation.X) * Matrix.CreateRotationY(enemies[i].rotation.Y) * Matrix.CreateRotationZ(enemies[i].rotation.Z)) * Matrix.CreateScale(enemies[i].scale) * Matrix.CreateTranslation(enemies[i].position);
- Matrix[] bones = animationPlayer.GetSkinTransforms();
- foreach (ModelMesh mesh in enemies[i].model.Meshes)
- {
- foreach (Effect effect in mesh.Effects)
- {
- effect.Parameters["Bones"].SetValue(bones);
- effect.Parameters["View"].SetValue(cameraViewMatrix);
- effect.Parameters["Projection"].SetValue(cameraProjectionMatrix);
- effect.Parameters["World"].SetValue(world);
- }
- mesh.Draw();
- }
- }
- //Lose condition
- if (enemyhit == true)
- {
- spritebatch.Begin(SpriteBlendMode.Additive, SpriteSortMode.Texture, SaveStateMode.SaveState);
- string lose = "you LOSE!";
- spritebatch.DrawString(font, lose, new Vector2(300, 100), Color.White);
- spritebatch.End();
- }
- //draw points to screen
- spritebatch.Begin(SpriteBlendMode.Additive, SpriteSortMode.Texture, SaveStateMode.SaveState);
- string str = "Points: ";
- str += points.ToString();
- spritebatch.DrawString(font, str, new Vector2(10, 10), Color.White);
- spritebatch.End();
- //win condition
- if (points == 4)
- {
- spritebatch.Begin(SpriteBlendMode.Additive, SpriteSortMode.Texture, SaveStateMode.SaveState);
- string win = "you WON!";
- spritebatch.DrawString(font, win, new Vector2(300, 100), Color.White);
- spritebatch.End();
- }
- }
- base.Draw(gameTime);
- }
- }
- }
- //YAY DONE!!! WOOT!
Add Comment
Please, Sign In to add comment