protected override void Initialize() { mMaterial = new Material("shader.fx", Window.Device); mRefugeeBinding = new MeshMaterialBinding(Window.Device, mMaterial, new Cube(Window.Device, new Vector4(0.8f, 0, 0, 0))); mSeekerBinding = new MeshMaterialBinding(Window.Device, mMaterial, new Cube(Window.Device, new Vector4(0, 0, 0.8f, 0))); mArriveBinding = new MeshMaterialBinding(Window.Device, mMaterial, new Cube(Window.Device, new Vector4(0, 0.8f, 0, 0))); mGroundBinding = new MeshMaterialBinding(Window.Device, mMaterial, new Quad(Window.Device, new Vector4(0.2f, 0.2f, 0.2f, 0))); mKeyboard = new Keyboard(); var stand = new Stand(); stand.Position = new Vector3(0, 140, 0); stand.Direction = -Vector3.YAxis; stand.Up = -Vector3.ZAxis; var lens = new PerspectiveProjectionLens(); mCamera = new Camera(stand, lens); var commands = new CommandManager(); commands.Add(ESCAPE, Exit); commands.Add(TAKE_SCREENSHOT, Window.TakeScreenshot); mInputCommandBinder = new InputCommandBinder(commands, mKeyboard); mInputCommandBinder.Bind(Button.Escape, ESCAPE); mInputCommandBinder.Bind(Button.PrintScreen, TAKE_SCREENSHOT); mCameraCommandManager = new CameraCommandManager(commands, mInputCommandBinder, stand); mSeekSteering = new SeekSteering(mSeekerKinematic, mRefugeeKinematic, 15); mArriveSteering = new ArrivingSteering(mArriveKinematic, mRefugeeKinematic, maxAcceleration: 15, slowRadius: 4, satisfactionRadius: 2); mRefugeeSteering = new RefugeeSteering(mRefugeeKinematic, mSeekerKinematic, 15); }
public CameraCommandManager(ICommandManager commandManager, InputCommandBinder inputCommandBinder, Stand stand) { commandManager.Add(MOVE_FORWARD, () => stand.Position += stand.Direction * mFrameTime * mSpeedFactor); commandManager.Add(MOVE_BACKWARD, () => stand.Position -= stand.Direction* mFrameTime * mSpeedFactor); commandManager.Add(STRAFE_RIGHT, () => stand.Position += stand.Direction.Cross(stand.Up) * mFrameTime * mSpeedFactor); commandManager.Add(STRAFE_LEFT, () => stand.Position -= stand.Direction.Cross(stand.Up) * mFrameTime * mSpeedFactor); commandManager.Add(UP, () => stand.Position += stand.Up * mFrameTime * mSpeedFactor); commandManager.Add(DOWN, () => stand.Position -= stand.Up* mFrameTime * mSpeedFactor); commandManager.Add(SPEEDFACTOR, () => mSpeedFactor = 20); inputCommandBinder.Bind(Button.LeftShift, SPEEDFACTOR); inputCommandBinder.Bind(Button.W, MOVE_FORWARD); inputCommandBinder.Bind(Button.S, MOVE_BACKWARD); inputCommandBinder.Bind(Button.D, STRAFE_RIGHT); inputCommandBinder.Bind(Button.A, STRAFE_LEFT); inputCommandBinder.Bind(Button.R, UP); inputCommandBinder.Bind(Button.F, DOWN); }