| using System; |
| using System.Collections.Generic; |
| using Microsoft.Xna.Framework; |
| using Microsoft.Xna.Framework.Audio; |
| using Microsoft.Xna.Framework.Content; |
| using Microsoft.Xna.Framework.GamerServices; |
| using Microsoft.Xna.Framework.Graphics; |
| using Microsoft.Xna.Framework.Input; |
| using Microsoft.Xna.Framework.Net; |
| using Microsoft.Xna.Framework.Storage; |
| |
| namespace TestGame |
| { |
| /// <summary> |
| /// This is the main type for your game |
| /// </summary> |
| public class Game1 : Microsoft.Xna.Framework.Game |
| { |
| GraphicsDeviceManager graphics; |
| SpriteBatch spriteBatch; |
| Model pirateHat; |
| Matrix[] boneTransforms; |
| Vector3 cameraPosition = new Vector3(0.0f, 0.0f, 15.0f); |
| float aspectRatio; |
| Vector3 hatPosition; |
| float hatRotation; |
| |
| public Game1() |
| { |
| graphics = new GraphicsDeviceManager(this); |
| Content.RootDirectory = "Content"; |
| } |
| |
| /// <summary> |
| /// Allows the game to perform any initialization it needs to before starting to run. |
| /// This is where it can query for any required services and load any non-graphic |
| /// related content. Calling base.Initialize will enumerate through any components |
| /// and initialize them as well. |
| /// </summary> |
| protected override void Initialize() |
| { |
| aspectRatio = (float)graphics.GraphicsDevice.Viewport.Width / (float)graphics.GraphicsDevice.Viewport.Height; |
| hatPosition = Vector3.Zero; |
| hatRotation = 0.0f; |
| |
| base.Initialize(); |
| } |
| |
| /// <summary> |
| /// LoadContent will be called once per game and is the place to load |
| /// all of your content. |
| /// </summary> |
| protected override void LoadContent() |
| { |
| // Create a new SpriteBatch, which can be used to draw textures. |
| spriteBatch = new SpriteBatch(GraphicsDevice); |
| |
| pirateHat = Content.Load<Model>("Models\\Pirate3"); |
| boneTransforms = new Matrix[pirateHat.Bones.Count]; |
| |
| // TODO: use this.Content to load your game content here |
| } |
| |
| /// <summary> |
| /// UnloadContent will be called once per game and is the place to unload |
| /// all content. |
| /// </summary> |
| protected override void UnloadContent() |
| { |
| // TODO: Unload any non ContentManager content here |
| } |
| |
| /// <summary> |
| /// Allows the game to run logic such as updating the world, |
| /// checking for collisions, gathering input, and playing audio. |
| /// </summary> |
| /// <param name="gameTime">Provides a snapshot of timing values.</param> |
| protected override void Update(GameTime gameTime) |
| { |
| // Allows the game to exit |
| if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) |
| this.Exit(); |
| |
| hatRotation += (float)gameTime.ElapsedGameTime.TotalMilliseconds * MathHelper.ToRadians(0.1f); |
| |
| base.Update(gameTime); |
| } |
| |
| /// <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.White); |
| |
| pirateHat.CopyAbsoluteBoneTransformsTo(boneTransforms); |
| |
| foreach (ModelMesh mesh in pirateHat.Meshes) |
| { |
| foreach (BasicEffect effect in mesh.Effects) |
| { |
| effect.World = boneTransforms[mesh.ParentBone.Index] * Matrix.CreateRotationY(hatRotation) * Matrix.CreateTranslation(hatPosition); |
| effect.View = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up); |
| effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10000); |
| |
| effect.EnableDefaultLighting(); |
| } |
| mesh.Draw(); |
| } |
| |
| base.Draw(gameTime); |
| } |
| } |
| } |
| |