Guest User

Untitled

a guest
Jul 15th, 2018
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.79 KB | None | 0 0
  1. namespace WindowsGame1
  2. {
  3. /// <summary>
  4. /// This is the main type for your game
  5. /// </summary>
  6. public class Game1 : Microsoft.Xna.Framework.Game
  7. {
  8. // system objects
  9. GraphicsDeviceManager graphics;
  10. SpriteFont font;
  11. SpriteBatch spritebatch;
  12.  
  13. //FOR SKINNED ANIMATED CHARACTER//////////
  14. GameModels[] enemies = new GameModels[4];
  15. AnimationPlayer animationPlayer;
  16. //ClipPlayer clipPlayer;
  17. SkinningData skinningData;
  18. //added world
  19. //Vector3 position = new Vector3(-47.0f, 5.0f, -100.0f);
  20. Matrix rotation = Matrix.Identity;
  21. //Vector3 scale = new Vector3(0.0f, 0.0f, 0.0f);
  22. /////////////////////////////////////////
  23.  
  24. GameModels floor; //floor
  25.  
  26. GameModels building; //building
  27.  
  28. GameModels door; // door
  29.  
  30. GameModels bullet = new GameModels(); //bullets
  31.  
  32.  
  33. //Camera
  34. Vector3 cameraPosition = new Vector3(-47.0f, 12.0f, -100.0f);
  35. Vector3 cameraLookAtRelative = new Vector3(0.0f, -10.0f, -160.0f);
  36. float cameraRotation = 3.17f;
  37. Matrix cameraProjectionMatrix;
  38. Matrix cameraViewMatrix;
  39.  
  40. //random
  41. Random random;
  42.  
  43. //points variable
  44. int points = 0;
  45.  
  46. //check if enemy is hit
  47. bool enemyhit = false;
  48.  
  49. public Game1()
  50. {
  51. graphics = new GraphicsDeviceManager(this);
  52. Content.RootDirectory = "Content";
  53.  
  54. //create new random number
  55. random = new Random();
  56.  
  57. //initialize stuff
  58. floor = new GameModels();
  59. building = new GameModels();
  60. door = new GameModels();
  61. for (int k = 0; k < enemies.Length; k++)
  62. enemies[k] = new GameModels();
  63.  
  64. }
  65.  
  66.  
  67. protected override void Initialize()
  68. {
  69. base.Initialize();
  70. }
  71.  
  72. //load any model
  73. private Model LoadModel(string name)
  74. {
  75. Model model = Content.Load<Model>(name);
  76. return model;
  77. }
  78.  
  79.  
  80. //floaty random number thing
  81. private float Randfloaty(float max)
  82. {
  83. return (float)random.NextDouble() * max;
  84. }
  85.  
  86. // Random Function
  87. private int RandNum(int min, int max)
  88. {
  89. return random.Next(min, max);
  90. }
  91.  
  92.  
  93. protected override void LoadContent()
  94. {
  95. //load everything
  96. floor.model = LoadModel("floor");
  97. floor.position = new Vector3(0.0f, -2.0f, 0.0f);
  98.  
  99. building.model = LoadModel("building");
  100. building.position = new Vector3(0.0f, 25.0f, 0.0f);
  101. building.scale = 10.0f;
  102.  
  103. door.model = LoadModel("door");
  104. door.position = new Vector3(-47.5f, 26.0f, -56.0f);
  105. door.scale = 10.0f;
  106.  
  107. bullet.model = Content.Load<Model>("x");
  108. bullet.rotation = new Vector3(-90, 0, 0);
  109. bullet.scale = 0.05f;
  110. bullet.visible = false; //start off not seen
  111.  
  112. spritebatch = new SpriteBatch(this.graphics.GraphicsDevice);
  113. // Loading sprite font
  114. font = Content.Load<SpriteFont>("SpriteFont1");
  115.  
  116. cameraViewMatrix = Matrix.CreateLookAt(cameraPosition, cameraLookAtRelative, Vector3.Up);
  117. cameraProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), (float)graphics.GraphicsDevice.Viewport.Width /
  118. (float)graphics.GraphicsDevice.Viewport.Height, 1.0f, 10000.0f);
  119.  
  120. //////////////////////FOR SKINNED ANIMATED MODEL///////////////////
  121. // Load the model.
  122.  
  123. for (int k = 0; k < enemies.Length; k++)
  124. {
  125. enemies[k].model = LoadModel("dude");
  126. enemies[k].scale = 0.24f;
  127. enemies[k].position = new Vector3(RandNum(-64, 64), 1.0f, RandNum(-2, 54)); //position enemies randomly
  128. enemies[k].rotation = new Vector3(0.0f, Randfloaty(MathHelper.TwoPi), 0.0f); //set random rotation
  129.  
  130. Vector3 velocity = new Vector3(0,0,-0.16f); //set speed vector
  131. 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)
  132.  
  133.  
  134.  
  135. skinningData = enemies[k].model.Tag as SkinningData;
  136. if (skinningData == null)
  137. throw new InvalidOperationException
  138. ("This model does not contain a SkinningData tag.");
  139.  
  140. animationPlayer = new AnimationPlayer(skinningData);
  141. AnimationClip clip = skinningData.AnimationClips["Take 001"];
  142. animationPlayer.StartClip(clip);
  143. }
  144.  
  145.  
  146. UpdateCamera();
  147. }
  148.  
  149.  
  150. //camera stuff
  151. protected void UpdateCamera()
  152. {
  153. Matrix rotationMatrix = Matrix.CreateRotationY(cameraRotation);
  154. Vector3 cameraLookAtRelativeXformed = Vector3.Transform(cameraLookAtRelative, rotationMatrix);
  155. Vector3 cameraLookAt = cameraPosition + cameraLookAtRelativeXformed;
  156. cameraViewMatrix = Matrix.CreateLookAt(
  157. cameraPosition,
  158. cameraLookAt,
  159. Vector3.Up);
  160.  
  161. cameraProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(
  162. MathHelper.ToRadians(45.0f),
  163. (float)graphics.GraphicsDevice.Viewport.Width /
  164. (float)graphics.GraphicsDevice.Viewport.Height,
  165. 1.0f,
  166. 10000.0f);
  167. }
  168.  
  169.  
  170.  
  171. //HI ALI
  172.  
  173.  
  174. protected override void UnloadContent()
  175. {
  176.  
  177. }
  178.  
  179.  
  180. /// <param name="gameTime">Provides a snapshot of timing values.</param>
  181. protected override void Update(GameTime gameTime)
  182. {
  183. bool enemycollide = false; //heck if enemy collides with wall
  184. // Allows the game to exit
  185. if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
  186. this.Exit();
  187.  
  188. //check if player in range of door
  189. if (cameraPosition.Z > -90 && cameraPosition.Z < -35)
  190. {
  191. if (door.position.Y < 55.0f)
  192. door.position.Y += 1.3f; //open door
  193.  
  194. }
  195. else
  196. {
  197. if (door.position.Y > 26.0f) //check if player is farther from door
  198.  
  199. door.position.Y -= 1.3f; //close door
  200. }
  201.  
  202. for (int i = 0; i < enemies.Length; i++)
  203. {
  204. //check target position of enemies
  205. Vector3 EcurrentPos = new Vector3(enemies[i].position.X, enemies[i].position.Y, enemies[i].position.Z);
  206. Matrix EforwardMovement = Matrix.CreateRotationY(enemies[i].rotation.Y);
  207. Vector3 Evel = new Vector3(0, 0, -1.0f);
  208. Evel = Vector3.Transform(Evel, EforwardMovement);
  209. Vector3 Etarget = EcurrentPos + Evel;
  210.  
  211. enemies[i].position += enemies[i].speed; //move enemy
  212.  
  213. //check if enemies hit walls
  214. if (Etarget.Z > 53 || Etarget.X < -64 || Etarget.X > 66 || (Etarget.X > -30 && Etarget.Z < -1))
  215. enemycollide = true;
  216.  
  217. if (Etarget.Z < -1 && (Etarget.X > -32 || Etarget.X < -64 || Etarget.Z < -102))
  218. enemycollide = true;
  219.  
  220. if (enemycollide == true)
  221. {
  222. enemies[i].rotation.Y += (float)Math.PI; //turn enemy 180 degrees
  223. enemies[i].speed *= -1; //reverse speed
  224. enemycollide = false; //reset collision boolean
  225. }
  226. }
  227.  
  228.  
  229.  
  230.  
  231. #if !XBOX
  232. animationPlayer.Update(gameTime.ElapsedGameTime, true, Matrix.Identity);
  233. //clipPlayer.update(gameTime.ElapsedGameTime, true, Matrix.Identity);
  234.  
  235. KeyboardState keyboardState = Keyboard.GetState();
  236.  
  237. if (keyboardState.IsKeyDown(Keys.Left))
  238. {
  239. cameraRotation += 0.01f;
  240. cameraLookAtRelative.Y -= 0.0f;
  241. UpdateCamera();
  242. }
  243. if (keyboardState.IsKeyDown(Keys.Right))
  244. {
  245. //rotation.Y -= 0.05f;
  246. cameraRotation -= 0.01f;
  247. cameraLookAtRelative.Y += 0.0f;
  248. UpdateCamera();
  249. }
  250.  
  251.  
  252. if (keyboardState.IsKeyDown(Keys.Up))
  253. {
  254. bool collide = false; //collision check
  255. //get target position
  256. Vector3 currentPos = new Vector3(cameraPosition.X, cameraPosition.Y, cameraPosition.Z);
  257. Matrix forwardMovement = Matrix.CreateRotationY(cameraRotation);
  258. Vector3 vel = new Vector3(0, 0, -1.0f);
  259. vel = Vector3.Transform(vel, forwardMovement);
  260. Vector3 target = currentPos + vel;
  261.  
  262. //check if camera hits wall
  263. if (target.Z > 53 || target.X < -64 || target.X > 66 || (target.X > -30 && target.Z < -1))
  264. collide = true;
  265.  
  266. if (target.Z < -1 && (target.X > -32 || target.X < -64 || target.Z < -102))
  267. collide = true;
  268.  
  269.  
  270. if (collide == true || enemyhit == true) //if camera hits wall or enemy stop movement
  271. {
  272. currentPos.Z += 0.0f;
  273. currentPos.X += 0.0f;
  274. }
  275.  
  276. else
  277. {
  278. currentPos.Z += vel.Z;//move
  279. currentPos.X += vel.X;
  280. }
  281.  
  282. //update camera position
  283. cameraPosition.Z = currentPos.Z;
  284. cameraPosition.X = currentPos.X;
  285.  
  286.  
  287. UpdateCamera();
  288. }
  289.  
  290. if (keyboardState.IsKeyDown(Keys.Down))
  291. {
  292. bool collide = false; //collision check
  293. //get target position
  294. Vector3 currentPos = new Vector3(cameraPosition.X, cameraPosition.Y, cameraPosition.Z);
  295. Matrix forwardMovement = Matrix.CreateRotationY(cameraRotation);
  296. Vector3 vel = new Vector3(0, 0, 1.0f);
  297. vel = Vector3.Transform(vel, forwardMovement);
  298. Vector3 target = currentPos + vel;
  299.  
  300. //check collision
  301. if (target.Z > 53 || target.X < -64 || target.X > 66 || (target.X > -30 && target.Z <-2))
  302. collide = true;
  303.  
  304. if (target.Z < -2 && (target.X > -32 || target.X < -64 || target.Z < -102))
  305. collide = true;
  306.  
  307. //if camera hits wall or enemy stop movement
  308. if (collide == true || enemyhit == true)
  309. {
  310. currentPos.Z += 0.0f;
  311. currentPos.X += 0.0f;
  312. }
  313.  
  314. else
  315. {
  316. currentPos.Z += vel.Z; //move
  317. currentPos.X += vel.X;
  318. }
  319.  
  320. //update camera
  321. cameraPosition.Z = currentPos.Z;
  322. cameraPosition.X = currentPos.X;
  323.  
  324. UpdateCamera();
  325. }
  326.  
  327. if (!bullet.visible && keyboardState.IsKeyDown(Keys.Space))
  328. {
  329. bullet.position = cameraPosition;
  330. bullet.position -= new Vector3(0, 1, 0);
  331. bullet.speed = Vector3.Transform(new Vector3(0, 0, -2), Matrix.CreateRotationY(cameraRotation));
  332. bullet.visible = true;
  333. }
  334. //move bullet if fired
  335. bullet.Update(gameTime);
  336.  
  337. //destroy bullet if it hits a wall
  338. if (bullet.position.Z > 53 || bullet.position.X < -64 || bullet.position.X > 66 || (bullet.position.X > -30 && bullet.position.Z < -2))
  339. bullet.visible = false;
  340.  
  341.  
  342. if (bullet.position.Z < -2 && (bullet.position.X > -32 || bullet.position.X < -64 || bullet.position.Z < -102))
  343. bullet.visible = false;
  344.  
  345.  
  346.  
  347.  
  348. #endif
  349.  
  350. //check enemies target position
  351. Vector3 currentPos2 = new Vector3(cameraPosition.X, cameraPosition.Y, cameraPosition.Z);
  352. Matrix forwardMovement2 = Matrix.CreateRotationY(cameraRotation);
  353. Vector3 vel2 = new Vector3(0, 0, 1.0f);
  354. vel2 = Vector3.Transform(vel2, forwardMovement2);
  355. Vector3 target2 = currentPos2 + vel2;
  356.  
  357.  
  358. for (int j = 0; j < enemies.Length; j++)
  359. {
  360.  
  361. float distance2 = Vector3.Distance(enemies[j].position, target2); //distance between enemies and camera
  362. float distance3 = Vector3.Distance(enemies[j].position, bullet.position); //distance between enemies and bullets
  363.  
  364. if (distance2 < 15)
  365. {
  366. enemies[j].visible = false; //destroy enemy
  367. enemies[j].position.X = -100; //reset enemy position
  368. enemyhit = true; //set enemy to being hit
  369.  
  370. }
  371.  
  372. if (distance3 < 13)
  373. {
  374. enemies[j].visible = false; //destroy
  375. bullet.visible = false; //destroy bullet
  376. enemies[j].position.X = -100; //reset enemy position
  377. points++; //increase point (max 4)
  378. }
  379.  
  380. }
  381.  
  382.  
  383. base.Update(gameTime);
  384.  
  385. }
  386. //draw floor
  387. private void DrawFloor()
  388. {
  389. foreach (ModelMesh mesh in floor.model.Meshes)
  390. {
  391. foreach (BasicEffect effect in mesh.Effects)
  392. {
  393. effect.EnableDefaultLighting();
  394. effect.PreferPerPixelLighting = true;
  395. effect.World =
  396. Matrix.CreateScale(10) *
  397. Matrix.CreateTranslation(floor.position);
  398.  
  399. effect.Projection = cameraProjectionMatrix;
  400. effect.View = cameraViewMatrix;
  401. }
  402. mesh.Draw();
  403. }
  404.  
  405. }
  406. //draw building
  407. private void DrawBuilding()
  408. {
  409. foreach (ModelMesh mesh in building.model.Meshes)
  410. {
  411. foreach (BasicEffect effect in mesh.Effects)
  412. {
  413. effect.EnableDefaultLighting();
  414. effect.PreferPerPixelLighting = true;
  415. effect.World =
  416. Matrix.CreateScale(building.scale) *
  417. Matrix.CreateTranslation(building.position);
  418.  
  419. effect.Projection = cameraProjectionMatrix;
  420. effect.View = cameraViewMatrix;
  421. }
  422. mesh.Draw();
  423. }
  424.  
  425. }
  426. //draw door
  427. private void DrawDoor()
  428. {
  429. foreach (ModelMesh mesh in door.model.Meshes)
  430. {
  431. foreach (BasicEffect effect in mesh.Effects)
  432. {
  433. effect.EnableDefaultLighting();
  434. effect.PreferPerPixelLighting = true;
  435. effect.World =
  436. Matrix.CreateScale(door.scale) *
  437. Matrix.CreateTranslation(door.position);
  438.  
  439. effect.Projection = cameraProjectionMatrix;
  440. effect.View = cameraViewMatrix;
  441. }
  442. mesh.Draw();
  443. }
  444.  
  445. }
  446. //draw bullet
  447. private void DrawBullet()
  448. {
  449. foreach (ModelMesh mesh in bullet.model.Meshes)
  450. {
  451. foreach (BasicEffect effect in mesh.Effects)
  452. {
  453. effect.EnableDefaultLighting();
  454. effect.PreferPerPixelLighting = true;
  455. effect.World =
  456. Matrix.CreateScale(bullet.scale) *
  457. Matrix.CreateTranslation(bullet.position);
  458.  
  459. effect.Projection = cameraProjectionMatrix;
  460. effect.View = cameraViewMatrix;
  461. }
  462. mesh.Draw();
  463. }
  464.  
  465. }
  466. /// <summary>
  467. /// This is called when the game should draw itself.
  468. /// </summary>
  469. /// <param name="gameTime">Provides a snapshot of timing values.</param>
  470. protected override void Draw(GameTime gameTime)
  471. {
  472. graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
  473.  
  474. //draw stuff
  475. DrawFloor();
  476. DrawBuilding();
  477. DrawDoor();
  478.  
  479. if(bullet.visible == true) //only draw bullet if its set to visible
  480. DrawBullet();
  481.  
  482.  
  483. // Render the skinned mesh.
  484. for (int i = 0; i < enemies.Length; i++)
  485. {
  486. if (enemies[i].visible == true)
  487. {
  488. 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);
  489.  
  490. Matrix[] bones = animationPlayer.GetSkinTransforms();
  491.  
  492. foreach (ModelMesh mesh in enemies[i].model.Meshes)
  493. {
  494. foreach (Effect effect in mesh.Effects)
  495. {
  496. effect.Parameters["Bones"].SetValue(bones);
  497. effect.Parameters["View"].SetValue(cameraViewMatrix);
  498. effect.Parameters["Projection"].SetValue(cameraProjectionMatrix);
  499. effect.Parameters["World"].SetValue(world);
  500. }
  501.  
  502. mesh.Draw();
  503. }
  504. }
  505.  
  506.  
  507. //Lose condition
  508. if (enemyhit == true)
  509. {
  510. spritebatch.Begin(SpriteBlendMode.Additive, SpriteSortMode.Texture, SaveStateMode.SaveState);
  511. string lose = "you LOSE!";
  512. spritebatch.DrawString(font, lose, new Vector2(300, 100), Color.White);
  513. spritebatch.End();
  514. }
  515.  
  516. //draw points to screen
  517. spritebatch.Begin(SpriteBlendMode.Additive, SpriteSortMode.Texture, SaveStateMode.SaveState);
  518. string str = "Points: ";
  519. str += points.ToString();
  520. spritebatch.DrawString(font, str, new Vector2(10, 10), Color.White);
  521. spritebatch.End();
  522.  
  523. //win condition
  524. if (points == 4)
  525. {
  526. spritebatch.Begin(SpriteBlendMode.Additive, SpriteSortMode.Texture, SaveStateMode.SaveState);
  527. string win = "you WON!";
  528. spritebatch.DrawString(font, win, new Vector2(300, 100), Color.White);
  529. spritebatch.End();
  530. }
  531.  
  532. }
  533.  
  534. base.Draw(gameTime);
  535. }
  536. }
  537. }
  538.  
  539.  
  540. //YAY DONE!!! WOOT!
Add Comment
Please, Sign In to add comment