예제 #1
0
        private float rotationRate = MathHelper.Pi; // Number of radians per second the camera can turn.

        #endregion Fields

        #region Constructors

        public PlayerController(Viewport viewPort)
        {
            mCamera = new StaticCamera(viewPort);
            //mCamera.TargetPosition = mCreature.Position;
            //mCamera.DesiredPositionLocal = new Vector3(0.0f, 2.0f, 10.0f);
            //mCamera.LookAtLocal = new Vector3(0.0f, 1.5f, 0.0f);
            //mCamera.TargetDirection = Vector3.Forward;
            //mCamera.MaxRopeLengthSquared = mCamera.DesiredPositionLocal.LengthSquared();
            //mCamera.MinRopeLengthSquared = mCamera.MaxRopeLengthSquared * 0.75f;

            //mCamera.TrackTarget = true;

            mMoveForward  = new GamePadThumbStickInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, InputAction.GamePadThumbStick.Left, InputAction.GamePadThumbStickAxis.Y, GamePadDeadZone.Circular, -0.2f, 0.2f);
            mMoveRight    = new GamePadThumbStickInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, InputAction.GamePadThumbStick.Left, InputAction.GamePadThumbStickAxis.X, GamePadDeadZone.Circular, -0.2f, 0.2f);

            mLookForward  = new GamePadThumbStickInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, InputAction.GamePadThumbStick.Right, InputAction.GamePadThumbStickAxis.Y, GamePadDeadZone.Circular, -0.2f, 0.2f);
            mLookRight    = new GamePadThumbStickInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, InputAction.GamePadThumbStick.Right, InputAction.GamePadThumbStickAxis.X, GamePadDeadZone.Circular, -0.2f, 0.2f);

            mMoveForwardKey  = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.W);
            mMoveBackwardKey = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.S);
            mMoveRightKey    = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.D);
            mMoveLeftKey     = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.A);

            mLookForwardMouse  = new MouseMovementInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, InputAction.MouseAxis.Y, 4.0f, 0f, 0f);
            mLookRightMouse    = new MouseMovementInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, InputAction.MouseAxis.X, 4.0f, 0f, 0f);

            mPressPart1 = new GamePadButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Buttons.X);
            mPressPart2 = new GamePadButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Buttons.Y);
            mPressPart3 = new GamePadButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Buttons.B);
            mReleasePart1 = new GamePadButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Buttons.X);
            mReleasePart2 = new GamePadButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Buttons.Y);
            mReleasePart3 = new GamePadButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Buttons.B);
            mPressJump = new GamePadButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Buttons.A);

            mUse = new List<InputAction>(NumParts);
            mUse.Add(mPressPart1);
            mUse.Add(mPressPart2);
            mUse.Add(mPressPart3);
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D1));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D2));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D3));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D4));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D5));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D6));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D7));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D8));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D9));
            mUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.D0));

            mFinishUse = new List<InputAction>(NumParts);
            mFinishUse.Add(mReleasePart1);
            mFinishUse.Add(mReleasePart2);
            mFinishUse.Add(mReleasePart3);
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D1));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D2));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D3));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D4));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D5));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D6));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D7));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D8));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D9));
            mFinishUse.Add(new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, Keys.D0));

            mJumpKey = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.Space);

            mStealPressMouse = new MouseButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, InputAction.MouseButton.Left);
            mStealReleaseMouse = new MouseButtonInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, InputAction.MouseButton.Left);

            mStealPress = new GamePadTriggerInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, InputAction.GamePadTrigger.Right, GamePadDeadZone.Circular, 0.0f, 0.0f);
            mStealRelease = new GamePadTriggerInputAction(PlayerIndex.One, InputAction.ButtonAction.Released, InputAction.GamePadTrigger.Right, GamePadDeadZone.Circular, 0.0f, 0.0f);

            mPressDecBoneYaw = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.T);
            mPressIncBoneYaw = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.Y);
            mPressDecBonePitch = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.U);
            mPressIncBonePitch = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.I);
            mPressIncBoneRoll = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.O);
            mPressDecBoneRoll = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.P);
            mPressIncBoneIndex = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.OemPlus);
            mPressDecBoneIndex = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.OemMinus);

            mPressDecTransX = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.F);
            mPressIncTransX = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.G);
            mPressDecTransY = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.H);
            mPressIncTransY = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.J);
            mPressIncTransZ = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.K);
            mPressDecTransZ = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Keys.L);

            mSaveBoneTransforms = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Keys.OemQuestion);
        }
예제 #2
0
        public ChimeraGame(string firstLevel)
        {
            mFirstLevelName = firstLevel;

            this.Window.AllowUserResizing = true;
            this.Window.ClientSizeChanged += ResizedWindow;

            Game = this;
            Graphics = new GraphicsDeviceManager(this);
            Graphics.PreferredBackBufferWidth = 1280;
            Graphics.PreferredBackBufferHeight = 720;
            Graphics.PreferMultiSampling = true;
            //Graphics.ToggleFullScreen();

            Content.RootDirectory = "Content";

            forward = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Down, Microsoft.Xna.Framework.Input.Keys.W);
            celShading = new KeyInputAction(PlayerIndex.One, InputAction.ButtonAction.Pressed, Microsoft.Xna.Framework.Input.Keys.F2);

            // DEBUG
            mDebugScreen = new Nuclex.UserInterface.Screen(Graphics.PreferredBackBufferWidth, Graphics.PreferredBackBufferHeight);
            mDebugGUI = new GuiManager(Services);
            mDebugGUI.Screen = mDebugScreen;
            DebugConsole debugConsole = new DebugConsole();
            mDebugScreen.Desktop.Children.Add(debugConsole);
            mDebugInput = new InputManager(Services, Window.Handle);

            Components.Add(mDebugInput);
            Components.Add(mDebugGUI);
            mDebugGUI.DrawOrder = 1000;

            mDebugScreen.FocusedControl = DebugConsole.ConsoleInput;
            DebugConsole.AddCommand("exit", new DebugConsole.ConsoleCommand(ExitConsoleCommand));
            DebugConsole.AddCommand("enableAllParts", new DebugConsole.ConsoleCommand(EnableParts));
            DebugConsole.AddCommand("partMenu", new DebugConsole.ConsoleCommand(PartMenuCommand));
            DebugConsole.AddCommand("resizeShadowCascade", new DebugConsole.ConsoleCommand(ResizeShadowCascadesCommand));
            DebugConsole.AddCommand("collisions", new DebugConsole.ConsoleCommand(CollisionMeshCommand));
            DebugConsole.AddCommand("debug", new DebugConsole.ConsoleCommand(DebugConsoleCommand));
            DebugConsole.AddCommand("visualizeCascades", new DebugConsole.ConsoleCommand(VisualizeCascadesCommand));
            DebugConsole.AddCommand("celShading", new DebugConsole.ConsoleCommand(CelShadingCommand));
            DebugConsole.AddCommand("outlining", new DebugConsole.ConsoleCommand(OutliningCommand));
            DebugConsole.AddCommand("drawBoundingBoxes", new DebugConsole.ConsoleCommand(BoundingBoxCommand));
            DebugConsole.AddCommand("BirdsEyeView", new DebugConsole.ConsoleCommand(BirdsEyeViewCommand));
            DebugConsole.AddCommand("BEV", new DebugConsole.ConsoleCommand(BirdsEyeViewCommand));
            DebugConsole.AddCommand("level", new DebugConsole.ConsoleCommand(LoadLevel));
            DebugConsole.AddCommand("toggleShadows", new DebugConsole.ConsoleCommand(ToggleShadows));
            DebugConsole.AddCommand("wireframe", new DebugConsole.ConsoleCommand(WireframeCommand));
            DebugConsole.Hide();
            // END

            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Sensor.SensorGroup, CollisionRules.DefaultDynamicCollisionGroup), CollisionRule.NoSolver);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Sensor.SensorGroup, CollisionRules.DefaultKinematicCollisionGroup), CollisionRule.NoSolver);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Sensor.SensorGroup, Projectile.ProjectileGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Sensor.SensorGroup, Sensor.SensorGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Sensor.SensorGroup, TerrainPhysics.TerrainPhysicsGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Sensor.SensorGroup, InvisibleWall.InvisibleWallGroup), CollisionRule.NoBroadPhase);

            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Projectile.SensorProjectileGroup, CollisionRules.DefaultDynamicCollisionGroup), CollisionRule.NoSolver);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Projectile.SensorProjectileGroup, CollisionRules.DefaultKinematicCollisionGroup), CollisionRule.NoSolver);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Projectile.SensorProjectileGroup, Projectile.ProjectileGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Projectile.SensorProjectileGroup, Sensor.SensorGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Projectile.SensorProjectileGroup, Projectile.SensorProjectileGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Projectile.SensorProjectileGroup, InvisibleWall.InvisibleWallGroup), CollisionRule.NoBroadPhase);

            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Wormhole.WormholeGroup, CollisionRules.DefaultDynamicCollisionGroup), CollisionRule.NoSolver);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Wormhole.WormholeGroup, CollisionRules.DefaultKinematicCollisionGroup), CollisionRule.NoSolver);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Wormhole.WormholeGroup, Projectile.ProjectileGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Wormhole.WormholeGroup, Wormhole.WormholeGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Wormhole.WormholeGroup, TerrainPhysics.TerrainPhysicsGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(Wormhole.WormholeGroup, InvisibleWall.InvisibleWallGroup), CollisionRule.NoBroadPhase);
        }