/// <summary>
 /// Attaches this controller to a user
 /// </summary>
 /// <param name="user">User to attach to</param>
 /// <param name="camera">Camera to control. Can be null</param>
 public FirstPersonCameraController( ICommandUser user, FirstPersonCamera camera )
 {
     Arguments.CheckNotNull( user, "user" );
     user.CommandTriggered += HandleCommand;
     InteractionUpdateTimer.Instance.Update += OnInteractionUpdate;
     Camera = camera;
 }
        /// <summary>
        /// Creates the camera used by the main display
        /// </summary>
        private ICamera CreateCamera( ICommandUser user )
        {
            FirstPersonCamera camera = new FirstPersonCamera( );
            camera.PerspectiveZNear = 1.0f;
            camera.PerspectiveZFar = 15000.0f;

            Units.Metres cameraPos = BuilderState.Instance.SpherePlanet.PlanetModel.Radius;
            if ( BuilderState.Instance.SpherePlanet.PlanetModel.TerrainModel != null )
            {
                cameraPos += BuilderState.Instance.SpherePlanet.PlanetModel.TerrainModel.MaximumHeight;
            }
            else
            {
                cameraPos += new Units.Metres( 1000000 );
            }

            camera.Position = new UniPoint3( cameraPos.ToUniUnits, 0, 0 );
            new FirstPersonCameraController( user, camera );

            testDisplay.OnBeginRender += delegate { InteractionUpdateTimer.Instance.OnUpdate( ); };

            CommandControlInputSource.StartMonitoring( user, testDisplay, FirstPersonCameraCommands.DefaultBindings );

            return camera;
        }