public RCameraComponent(Game game)
: base(game)
{
camera = new RCamera();
camera.CurrentBehavior = RCamera.Behavior.Spectator;
movingAlongPosX = false;
movingAlongNegX = false;
movingAlongPosY = false;
movingAlongNegY = false;
movingAlongPosZ = false;
movingAlongNegZ = false;
savedMousePosX = -1;
savedMousePosY = -1;
rotationSpeed = DEFAULT_SPEED_ROTATION;
orbitRollSpeed = DEFAULT_SPEED_ORBIT_ROLL;
flightYawSpeed = DEFAULT_SPEED_FLIGHT_YAW;
mouseWheelSpeed = DEFAULT_SPEED_MOUSE_WHEEL;
mouseSmoothingSensitivity = DEFAULT_MOUSE_SMOOTHING_SENSITIVITY;
acceleration = new Vector3(DEFAULT_ACCELERATION_X, DEFAULT_ACCELERATION_Y, DEFAULT_ACCELERATION_Z);
velocity = new Vector3(DEFAULT_VELOCITY_X, DEFAULT_VELOCITY_Y, DEFAULT_VELOCITY_Z);
mouseSmoothingCache = new Vector2[MOUSE_SMOOTHING_CACHE_SIZE];
mouseIndex = 0;
mouseMovement = new Vector2[2];
mouseMovement[0].X = 0.0f;
mouseMovement[0].Y = 0.0f;
mouseMovement[1].X = 0.0f;
mouseMovement[1].Y = 0.0f;
Rectangle clientBounds = game.Window.ClientBounds;
float aspect = (float)clientBounds.Width / (float)clientBounds.Height;
Perspective(RCamera.DEFAULT_FOVX, aspect, RCamera.DEFAULT_ZNEAR, RCamera.DEFAULT_ZFAR);
actionKeys = new Dictionary<Actions, Keys>();
actionKeys.Add(Actions.FlightYawLeftPrimary, Keys.Left);
actionKeys.Add(Actions.FlightYawLeftAlternate, Keys.A);
actionKeys.Add(Actions.FlightYawRightPrimary, Keys.Right);
actionKeys.Add(Actions.FlightYawRightAlternate, Keys.D);
actionKeys.Add(Actions.MoveForwardsPrimary, Keys.Up);
actionKeys.Add(Actions.MoveForwardsAlternate, Keys.W);
actionKeys.Add(Actions.MoveBackwardsPrimary, Keys.Down);
actionKeys.Add(Actions.MoveBackwardsAlternate, Keys.S);
actionKeys.Add(Actions.MoveDownPrimary, Keys.Q);
actionKeys.Add(Actions.MoveDownAlternate, Keys.PageDown);
actionKeys.Add(Actions.MoveUpPrimary, Keys.E);
actionKeys.Add(Actions.MoveUpAlternate, Keys.PageUp);
actionKeys.Add(Actions.OrbitRollLeftPrimary, Keys.Left);
actionKeys.Add(Actions.OrbitRollLeftAlternate, Keys.A);
actionKeys.Add(Actions.OrbitRollRightPrimary, Keys.Right);
actionKeys.Add(Actions.OrbitRollRightAlternate, Keys.D);
actionKeys.Add(Actions.StrafeRightPrimary, Keys.Right);
actionKeys.Add(Actions.StrafeRightAlternate, Keys.D);
actionKeys.Add(Actions.StrafeLeftPrimary, Keys.Left);
actionKeys.Add(Actions.StrafeLeftAlternate, Keys.A);
Game.Activated += new EventHandler<System.EventArgs>(HandleGameActivatedEvent);
Game.Deactivated += new EventHandler<System.EventArgs>(HandleGameDeactivatedEvent);
UpdateOrder = 1;
}