KinPortal/Game/Game.cs
2020-05-15 12:18:51 +02:00

165 lines
5.3 KiB
C#
Executable File

using System;
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.Media;
namespace KinPortal {
public class Game : Microsoft.Xna.Framework.Game {
private GraphicsDeviceManager Graphics {get; set;}
private Cursor m_leftCursor;
private Cursor m_rightCursor;
public Scene Scene {get; private set;}
public HandsTracker HandsTracker {get; private set;}
public Game() {
Graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Resources";
}
protected override void Initialize() {
Window.AllowUserResizing = true;
Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged);
Graphics.PreferredBackBufferWidth = 900;
Graphics.PreferredBackBufferHeight = 512;
Graphics.ApplyChanges();
HandsTracker = new HandsTracker(900, 512);
//HandsTracker.Run();
Scene = new Scene(this, new Camera(this, new Vector3(-15, -15, 15), 45, -30, 0, 70, 0.1f, 1000));
this.Components.Add(Scene);
base.Initialize();
}
protected override void LoadContent() {
Scene.AddComponent(new DynamicObject(
"models\\cube",
new Vector3(0, 0, 5f), Quaternion.Identity,
Scene, ShapeType.BOX, false, new GrabStrategy()
));
Scene.AddComponent(new DynamicObject(
"models\\monkey",
new Vector3(0, 4, 5f), Quaternion.Identity,
Scene, ShapeType.SPHERE, false, new GrabStrategy()
));
Scene.AddComponent(new DynamicObject(
"models\\cube",
new Vector3(3, 0, 5f), Quaternion.Identity,
Scene, ShapeType.BOX, false, new GrabStrategy()
));
Scene.AddComponent(new DynamicObject(
"models\\monkey",
new Vector3(0, -4, 5f), Quaternion.Identity,
Scene, ShapeType.SPHERE, false, new GrabStrategy()
));
Scene.AddComponent(new DynamicObject(
"models\\sphere",
new Vector3(-3, 0, 5f), Quaternion.Identity,
Scene, ShapeType.SPHERE, false, new GrabStrategy()
));
Scene.AddComponent(new DynamicObject("models\\level",
new Vector3(0, 0, 0), Quaternion.Identity, Scene, ShapeType.TRIANGULATE, true, new DrawPortalStrategy()
));
Scene.AddComponent(new InterruptorObject(
"models\\target",
new Vector3(19.8f, 0, 10f), Quaternion.CreateFromYawPitchRoll(0, 0, MathHelper.ToRadians(180)),
Scene, ShapeType.TRIANGULATE, true, new NoTargetingStrategy(), new TargetCollisionStrategy()
));
m_leftCursor = new Cursor(this, new SpriteBatch(GraphicsDevice), "textures\\tex_cursor_red", new Point(48, 48), HandsTracker.LeftHand);
this.Components.Add(m_leftCursor);
m_rightCursor = new Cursor(this, new SpriteBatch(GraphicsDevice), "textures\\tex_cursor_blue", new Point(48, 48), HandsTracker.RightHand);
this.Components.Add(m_rightCursor);
}
protected override void UnloadContent() {}
protected override void Update(GameTime gameTime) {
/* Quit Game */
if(Keyboard.GetState().IsKeyDown(Keys.Escape)) {
Exit();
}
/* Move Forward */
if(Keyboard.GetState().IsKeyDown(Keys.Z)) {
Scene.Camera.MoveForward(0.08f);
}
/* Move Backware */
if(Keyboard.GetState().IsKeyDown(Keys.S)) {
Scene.Camera.MoveBackward(0.08f);
}
/* Move Left */
if(Keyboard.GetState().IsKeyDown(Keys.Q)) {
Scene.Camera.MoveLeft(0.08f);
}
/* Move Right */
if(Keyboard.GetState().IsKeyDown(Keys.D)) {
Scene.Camera.MoveRight(0.08f);
}
/* Move Up */
if(Keyboard.GetState().IsKeyDown(Keys.Space)) {
Scene.Camera.MoveUp(0.08f);
}
/* Move Down */
if(Keyboard.GetState().IsKeyDown(Keys.LeftShift)) {
Scene.Camera.MoveDown(0.08f);
}
/* Rotate Up */
if(Keyboard.GetState().IsKeyDown(Keys.Up)) {
Scene.Camera.Rotate(0, 1.8f, 0);
}
/* Rotate Down */
if(Keyboard.GetState().IsKeyDown(Keys.Down)) {
Scene.Camera.Rotate(0, -1.8f, 0);
}
/* Rotate Left */
if(Keyboard.GetState().IsKeyDown(Keys.Left)) {
Scene.Camera.Rotate(1.8f, 0, 0);
}
/* Rotate Right */
if(Keyboard.GetState().IsKeyDown(Keys.Right)) {
Scene.Camera.Rotate(-1.8f, 0, 0);
}
MouseState ms = Mouse.GetState();
HandsTracker.LeftHand.Pos = new Point(ms.X, ms.Y);
HandsTracker.RightHand.Pos = new Point(ms.X, ms.Y);
HandsTracker.LeftHand.PrevIsClosed = HandsTracker.LeftHand.IsClosed;
HandsTracker.LeftHand.IsClosed = (ms.LeftButton == ButtonState.Pressed);
HandsTracker.RightHand.PrevIsClosed = HandsTracker.RightHand.IsClosed;
HandsTracker.RightHand.IsClosed = (ms.RightButton == ButtonState.Pressed);
HandsTracker.LeftHand.Depth = (double) ms.ScrollWheelValue / 1000.0f;
HandsTracker.RightHand.Depth = (double) ms.ScrollWheelValue / 1000.0f;
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime) {
GraphicsDevice.Clear(Color.SkyBlue);
Scene.Draw(gameTime);
m_leftCursor.Draw(gameTime);
m_rightCursor.Draw(gameTime);
base.Draw(gameTime);
}
public void Window_ClientSizeChanged(object sender, EventArgs e) {
HandsTracker.InteractionRegionWidth = GraphicsDevice.Viewport.Width;
HandsTracker.InteractionRegionHeight = GraphicsDevice.Viewport.Height;
}
}
}