コード例 #1
0
ファイル: Cannonball.cs プロジェクト: ruicaridade/IP3D
        public override void Update(GameTime gameTime)
        {
            Velocity = new Vector3(Velocity.X, Velocity.Y - Physics.Physics.GravityAcceleration, Velocity.Z);
            Position += Velocity*gameTime.GetDeltaTime();

            base.Update(gameTime);
        }
コード例 #2
0
        /// <summary>
        /// JigLibX の PhysicsSystem のインテグレーションを実行します。
        /// </summary>
        /// <param name="gameTime">前回の Update が呼び出されてからの経過時間。</param>
        /// <remarks>
        /// インテグレーション実行の前後では登録された IIntegrationListener が呼び出されます。
        /// </remarks>
        public override void Update(GameTime gameTime)
        {
            if (IntegrationListeners.Count != 0)
            {
                foreach (var listener in integrationListeners)
                {
                    listener.PreIntegration(gameTime);
                }
            }

            physicsSystem.Integrate(gameTime.GetDeltaTime());

            if (IntegrationListeners.Count != 0)
            {
                foreach (var listener in integrationListeners)
                {
                    listener.PostIntegration(gameTime);
                }
            }
        }
コード例 #3
0
ファイル: TankSim.cs プロジェクト: ruicaridade/IP3D
        /// <summary>
        ///     Allows the game to run logic such as updating the world,
        ///     checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            IsActive = base.IsActive;
            if (!IsActive) return;

            if (Input.IsKeyPressed(Keys.F1))
            {
                Debugging = !Debugging;
                DebugHud.DebugStringPanels[0].Get("toggle_debug").Text = "Debug Mode (F1): " + Debugging;
            }

            if (Input.IsKeyPressed(Keys.P))
            {
                spectating = !spectating;
                DebugHud.DebugStringPanels[0].Get("spectate_info").Text = "Spectator Camera (P): " + spectating;
            }

            OnGameUpdate(gameTime);

            MainCamera.Update(gameTime);
            tank.Update(gameTime, map);
            MainCamera.Position = new Vector3(tank.Position.X - tank.Front.X * 8.0f, tank.Position.Y + 8.0f,
                tank.Position.Z - tank.Front.Z * 8.0f);

            SpectatorCamera.Update(gameTime);
            aiTank.Update(gameTime, map);
            SpectatorCamera.Position = new Vector3(aiTank.Position.X - aiTank.Front.X * 8.0f, aiTank.Position.Y + 8.0f,
                aiTank.Position.Z - aiTank.Front.Z * 8.0f);

            float camAngle = tank.Yaw + 90.0f;
            if (camAngle > 360.0f)
            {
                camAngle = camAngle - 360.0f;
            }

            MainCamera.Yaw = camAngle;

            camAngle = aiTank.Yaw + 90.0f;
            if (camAngle > 360.0f)
            {
                camAngle = camAngle - 360.0f;
            }

            SpectatorCamera.Yaw = camAngle;

            rainEmitter.Update(gameTime);

            dustEmitter.Start = tank.Position - tank.Right * 2 - tank.Front * 3.5f;
            dustEmitter.End = tank.Position + tank.Right * 2 - tank.Front * 3.5f;
            dustEmitter.Velocity = new Vector3(10.0f * -tank.Front.X,
                25.0f, 10.0f * -tank.Front.Z);
            dustEmitter.Interval = tank.IsMoving ? 0.01f : float.MaxValue;
            dustEmitter.Update(gameTime);

            effect.Projection = MainCamera.Projection;
            effect.View = MainCamera.View;

            DebugHud.DebugStringPanels[0].Get("fps").Text = "FPS: " + gameTime.GetFramesPerSecond();
            DebugHud.DebugStringPanels[0].Get("delta_time").Text = "Delta Time: " + gameTime.GetDeltaTime();

            if (Input.IsKeyPressed(Keys.Escape))
            {
                Exit();
            }

            base.Update(gameTime);
        }
コード例 #4
0
 public override void Update(GameTime gameTime)
 {
     var sceneSettings = ControllerContext.Scene.SceneSettings;
     sceneSettings.Time += gameTime.GetDeltaTime() * sceneSettings.TimeScale;
 }
コード例 #5
0
        public override void Update(GameTime gameTime)
        {
            if (!camera.Active) return;

            var dt = gameTime.GetDeltaTime();

            var newPosition = camera.Position;
            var newOrientation = camera.Orientation;

            var deltaRotation = new Vector2();

            var mouse = InputDevice.GetMouse();
            if (mouse.IsMouseMoved)
            {
                deltaRotation.X += mouse.DeltaX;
                deltaRotation.Y += mouse.DeltaY;
                mouse.ResetPosition();
            }

            var pad = InputDevice.GetGamePad(PlayerIndex);
            {
                const float padRotationAmount = 10.0f;

                var stickPosition = pad.CurrentState.ThumbSticks.Right;
                deltaRotation.X += stickPosition.X * padRotationAmount;
                deltaRotation.Y += -stickPosition.Y * padRotationAmount;
            }

            {
                float yaw;
                float pitch;
                float roll;
                camera.Orientation.ToYawPitchRoll(out yaw, out pitch, out roll);

                yaw -= RotationVelocity * deltaRotation.X * dt % (2 * MathHelper.Pi);
                pitch -= RotationVelocity * deltaRotation.Y * dt;

                if (MathHelper.PiOver2 < pitch)
                {
                    pitch = MathHelper.PiOver2;
                }
                else if (pitch < -MathHelper.PiOver2)
                {
                    pitch = -MathHelper.PiOver2;
                }

                newOrientation = Matrix.CreateFromYawPitchRoll(yaw, pitch, roll);
            }

            var moveDirection = new Vector3(0, 0, 0);

            var keyboard = InputDevice.GetKeybord(PlayerIndex);
            if (keyboard.IsKeyDown(Keys.W))
            {
                moveDirection.Z = -1;
            }
            if (keyboard.IsKeyDown(Keys.S))
            {
                moveDirection.Z = 1;
            }
            if (keyboard.IsKeyDown(Keys.D))
            {
                moveDirection.X = 1;
            }
            if (keyboard.IsKeyDown(Keys.A))
            {
                moveDirection.X = -1;
            }
            if (keyboard.IsKeyDown(Keys.Q))
            {
                moveDirection.Y = 1;
            }
            if (keyboard.IsKeyDown(Keys.Z))
            {
                moveDirection.Y = -1;
            }

            {
                var delta = pad.CurrentState.ThumbSticks.Left;
                moveDirection.X += delta.X;
                moveDirection.Z += -delta.Y;

                if (pad.IsButtonDown(Buttons.LeftShoulder))
                {
                    moveDirection.Y += 1;
                }
                if (pad.IsButtonDown(Buttons.RightShoulder))
                {
                    moveDirection.Y += -1;
                }
            }

            if (!moveDirection.IsZero())
            {
                moveDirection.Normalize();
                newPosition += MoveVelocity * dt * Vector3.Transform(moveDirection, newOrientation);
            }

            camera.Position = newPosition;
            camera.Orientation = newOrientation;
        }
コード例 #6
0
        void UpdateCameraByThirdPersonPov(GameTime gameTime)
        {
            //
            // Decide the offset vector from inputs
            //
            float deltaYaw = 0;
            float deltaPitch = 0;

            var keyboard = InputDevice.GetKeybord(PlayerIndex);
            if (keyboard.IsKeyDown(Keys.Up))
            {
                deltaPitch += 1;
            }
            if (keyboard.IsKeyDown(Keys.Down))
            {
                deltaPitch -= 1;
            }
            if (keyboard.IsKeyDown(Keys.Left))
            {
                deltaYaw += 1;
            }
            if (keyboard.IsKeyDown(Keys.Right))
            {
                deltaYaw -= 1;
            }

            var pad = InputDevice.GetGamePad(PlayerIndex);
            {
                var stickPosition = pad.CurrentState.ThumbSticks.Right;
                deltaYaw += -stickPosition.X;
                deltaPitch += stickPosition.Y;
            }

            float deltaTime = gameTime.GetDeltaTime();

            //const float amount = 0.05f;
            const float amount = 1.0f;
            deltaYaw *= amount * deltaTime;
            deltaPitch *= amount * deltaTime;

            // rotate the offset vector around Y axis
            if (deltaYaw != 0)
            {
                Matrix rotation;
                Matrix.CreateRotationY(deltaYaw, out rotation);
                Vector3.Transform(ref offsetVector, ref rotation, out offsetVector);
            }
            // rotate the offset vector around the right vector of the camera
            if (deltaPitch != 0)
            {
                Vector3 pitchAxis;
                Vector3 up = Vector3.Up;
                Vector3.Cross(ref offsetVector, ref up, out pitchAxis);

                Matrix rotation;
                Matrix.CreateFromAxisAngle(ref pitchAxis, deltaPitch, out rotation);
                Vector3.Transform(ref offsetVector, ref rotation, out offsetVector);
            }

            //
            // Manual zoom
            //
            if (keyboard.IsKeyDown(Keys.PageUp) && keyboard.IsKeyDown(Keys.PageDown))
            {
                cameraDistance = InitialOffsetDistance;
            }
            else
            {
                if (keyboard.IsKeyDown(Keys.PageUp))
                {
                    cameraDistance -= ManualZoomVelocity * gameTime.GetDeltaTime();
                    // reset auto zoom
                    oldAdjustedCameraDistance = cameraDistance;
                }
                if (keyboard.IsKeyDown(Keys.PageDown))
                {
                    cameraDistance += ManualZoomVelocity * gameTime.GetDeltaTime();
                }
            }
            // clamp [ZoomMinCameraDistance, MaxCameraDistance]
            cameraDistance = MathExtension.Clamp(cameraDistance, ZoomMinCameraDistance, MaxCameraDistance);

            //
            // try to adjust the offset distance with models blocking the ray from the camera to the actor
            //
            float adjustedOffsetDistance = CalculateAdjustedOffsetDistance(ref character.Position);

            //
            // Auto zoom
            //
            // interpolate from the adjusted offset distance to the desired offset one
            //
            if (cameraDistance <= adjustedOffsetDistance)
            {
                if (oldAdjustedCameraDistance < cameraDistance)
                {
                    adjustedOffsetDistance = oldAdjustedCameraDistance + AutoZoomVelocity * deltaTime;
                    adjustedOffsetDistance = MathHelper.Min(adjustedOffsetDistance, cameraDistance);
                    oldAdjustedCameraDistance = adjustedOffsetDistance;
                }
                else
                {
                    oldAdjustedCameraDistance = cameraDistance;
                }
            }
            else
            {
                oldAdjustedCameraDistance = adjustedOffsetDistance;
            }

            //
            // decide and set the camera position
            //
            camera.Position = character.Position + offsetVector * adjustedOffsetDistance;

            // update the camera orientation and the view matrix
            LookAtActor(ref character.Position);

            //
            // adjust focus distance to focus the actor
            //
            Vector3 focusPosition;
            Vector3.Transform(ref character.Position, ref camera.Pov.View, out focusPosition);
            camera.Pov.FocusDistance = focusPosition.Length();
        }
コード例 #7
0
        void UpdateCameraByFirstPersonPov(GameTime gameTime)
        {
            float deltaYaw = 0;
            float deltaPitch = 0;

            //
            // Decide the offset vector from inputs
            //
            var keyboard = InputDevice.GetKeybord(PlayerIndex);
            if (keyboard.IsKeyDown(Keys.Up))
            {
                deltaPitch += 1;
            }
            if (keyboard.IsKeyDown(Keys.Down))
            {
                deltaPitch -= 1;
            }
            if (keyboard.IsKeyDown(Keys.Left))
            {
                deltaYaw += 1;
            }
            if (keyboard.IsKeyDown(Keys.Right))
            {
                deltaYaw -= 1;
            }

            var pad = InputDevice.GetGamePad(PlayerIndex);
            {
                var delta = pad.CurrentState.ThumbSticks.Right;
                deltaYaw += -delta.X;
                deltaPitch += delta.Y;
            }

            float deltaTime = gameTime.GetDeltaTime();

            const float amount = 5.0f;
            if (deltaYaw != 0)
            {
                deltaYaw *= amount * deltaTime;
                firstPersonCameraDeltaYaw += deltaYaw;
                firstPersonCameraDeltaYaw = MathExtension.Clamp(
                    firstPersonCameraDeltaYaw,
                    -MathHelper.PiOver2,
                    MathHelper.PiOver2);
            }
            else
            {
                if (firstPersonCameraDeltaYaw < 0)
                {
                    firstPersonCameraDeltaYaw += amount * deltaTime;
                    firstPersonCameraDeltaYaw = MathHelper.Min(firstPersonCameraDeltaYaw, 0);
                }
                else if (0 < firstPersonCameraDeltaYaw)
                {
                    firstPersonCameraDeltaYaw -= amount * deltaTime;
                    firstPersonCameraDeltaYaw = MathHelper.Max(0, firstPersonCameraDeltaYaw);
                }
            }

            if (deltaPitch != 0)
            {
                deltaPitch *= amount * deltaTime;
                firstPersonCameraDeltaPitch += deltaPitch;
                firstPersonCameraDeltaPitch = MathExtension.Clamp(
                    firstPersonCameraDeltaPitch,
                    -MathHelper.PiOver2,
                    MathHelper.PiOver2);
            }
            else
            {
                if (firstPersonCameraDeltaPitch < 0)
                {
                    firstPersonCameraDeltaPitch += amount * deltaTime;
                    firstPersonCameraDeltaPitch = MathHelper.Min(firstPersonCameraDeltaPitch, 0);
                }
                else if (0 < firstPersonCameraDeltaPitch)
                {
                    firstPersonCameraDeltaPitch -= amount * deltaTime;
                    firstPersonCameraDeltaPitch = MathHelper.Max(0, firstPersonCameraDeltaPitch);
                }
            }

            // calculate the relative orientation from the actor orientation
            float actorYaw = character.Orientation.GetYaw();
            float actorPitch = 0;
            float yaw = actorYaw + firstPersonCameraDeltaYaw;
            float pitch = actorPitch + firstPersonCameraDeltaPitch;

            // set the camera orientation
            Matrix.CreateFromYawPitchRoll(yaw, pitch, 0, out camera.Orientation);

            float adjustedOffsetDistance = 0;
            if (0 < oldAdjustedCameraDistance)
            {
                adjustedOffsetDistance = oldAdjustedCameraDistance - AutoZoomVelocity * deltaTime;
                adjustedOffsetDistance = MathHelper.Max(adjustedOffsetDistance, 0);
                oldAdjustedCameraDistance = adjustedOffsetDistance;
            }
            else
            {
                character.Visible = false;
            }

            //
            // decide and set the camera position
            //
            camera.Position = character.Position + offsetVector * adjustedOffsetDistance;

            //
            // adjust focus distance to the default
            //
            camera.Pov.FocusDistance = Pov.DefaultFocusDistance;
        }
コード例 #8
0
        void UpdateActorByFirstPersonPov(GameTime gameTime)
        {
            float deltaYaw = 0;

            #region Control the orientation for the keyboard

            var keyboard = InputDevice.GetKeybord(PlayerIndex);
            if (keyboard.IsKeyDown(Keys.A))
            {
                deltaYaw += 1.0f;
            }
            if (keyboard.IsKeyDown(Keys.D))
            {
                deltaYaw += -1.0f;
            }

            #endregion

            #region Control the orientation for the gamepad

            var pad = InputDevice.GetGamePad(PlayerIndex);
            {
                var stickPosition = pad.CurrentState.ThumbSticks.Left;
                deltaYaw += -stickPosition.X;
            }

            #endregion

            #region Decide the orientation

            // calculate and set the new orientation
            if (deltaYaw != 0)
            {
                float newYaw = character.Orientation.GetYaw() + deltaYaw * gameTime.GetDeltaTime();
                Matrix.CreateRotationY(newYaw, out character.Orientation);
            }

            #endregion

            // 重力加速度。
            Vector3 gravity;
            character.RigidBody.GetGravity(out gravity);

            // 進行方向ベクトル。
            var moveDirection = Vector3.Zero;
            float moveVelocityFactor = 1.0f;

            #region Control the direction for the keyboard

            if (keyboard.IsKeyDown(Keys.W))
            {
                moveDirection.Z += -1;
            }
            if (keyboard.IsKeyDown(Keys.S))
            {
                moveDirection.Z += 1;
            }

            #endregion

            #region Control the direction for the gamepad

            {
                var stickPosition = pad.CurrentState.ThumbSticks.Left;
                moveDirection.Z += -stickPosition.Y;
                var degree = Math.Abs(stickPosition.Y);
                if (degree != 0)
                {
                    moveVelocityFactor = degree;
                }
            }

            #endregion

            // rotate the move direction
            Vector3.Transform(ref moveDirection, ref character.Orientation, out moveDirection);
            Vector3Extension.NormalizeSafe(ref moveDirection, out moveDirection);

            // 重力方向に対して衝突があるかどうかを判定します。
            bool isStanding = character.CollisionBounds.IsCollidedForDirection(ref gravity);

            #region Control the autorun

            if (keyboard.IsKeyPressed(Keys.R) ||
                keyboard.IsKeyPressed(Keys.NumPad7) ||
                pad.IsButtonPressed(Buttons.LeftShoulder))
            {
                if (!autorunActivated)
                {
                    // try to activate autorun
                    if (!moveDirection.IsZero() && isStanding)
                    {
                        autorunActivated = true;
                    }
                }
                else
                {
                    autorunActivated = false;
                }
            }

            if (autorunActivated)
            {
                if (moveDirection.IsZero())
                {
                    moveDirection = character.Orientation.Forward;
                }
                else
                {
                    // decide either to stop or hold autorun
                    if (Vector3.Dot(character.Orientation.Forward, moveDirection) < -0.75f)
                    {
                        autorunActivated = false;
                    }
                }
            }

            #endregion

            #region Control the dash

            bool dashEnabled = false;
            if (keyboard.IsKeyDown(Keys.LeftShift) ||
                pad.IsButtonDown(Buttons.RightShoulder))
            {
                dashEnabled = true;
            }

            #endregion

            #region Control the slowdown (keyboard only)

            // keyboard only
            if (keyboard.IsKeyDown(Keys.RightShift))
            {
                moveVelocityFactor = SlowlyMoveVelocityFactor;
            }

            #endregion

            #region Decide the velocity

            if (dashEnabled)
            {
                desiredVelocity = moveDirection * DashVelocity;
            }
            else
            {
                desiredVelocity = moveDirection * (MoveVelocity * moveVelocityFactor);
            }

            #endregion

            #region Control jumping

            var totalSeconds = (float) gameTime.TotalGameTime.TotalSeconds;

            if (keyboard.IsKeyDown(Keys.Space) || pad.IsButtonDown(Buttons.A))
            {
                if (isStanding)
                {
                    desiredVelocity.Y = JumpVelocity;

                    jumpTime = totalSeconds;
                    jumping = true;
                }
                else if (jumping && totalSeconds < jumpTime + jumpInterval)
                {
                    desiredVelocity.Y = JumpVelocity;
                }
            }

            if (jumping && jumpTime + jumpInterval <= totalSeconds)
            {
                jumping = false;
            }

            #endregion

            Character.RigidBody.Activate();
        }
コード例 #9
0
ファイル: FirstPersonCamera.cs プロジェクト: ruicaridade/IP3D
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            if (Input.IsKeyDown(Keys.W))
            {
                MoveForward(WalkSpeed, gameTime.GetDeltaTime());
            }
            if (Input.IsKeyDown(Keys.S))
            {
                MoveForward(-WalkSpeed, gameTime.GetDeltaTime());
            }
            if (Input.IsKeyDown(Keys.A))
            {
                MoveRight(StrafeSpeed, gameTime.GetDeltaTime());
            }
            if (Input.IsKeyDown(Keys.D))
            {
                MoveRight(-StrafeSpeed, gameTime.GetDeltaTime());
            }

            mouseState = Mouse.GetState();

            mousePosition = new Vector2(mouseState.Position.X, mouseState.Position.Y);
            Yaw -= (viewport.GetCenter().X - mousePosition.X) * Sensitivity;
            Pitch += (viewport.GetCenter().Y - mousePosition.Y)*Sensitivity;
            Pitch = MathHelper.Clamp(Pitch, -89.0f, 89.0f);

            Mouse.SetPosition((int)Math.Round(viewport.GetCenter().X), (int)Math.Round(viewport.GetCenter().Y));

            UpdateMatrices();
        }
コード例 #10
0
        public override void Update(GameTime gameTime)
        {
            var dt = gameTime.GetDeltaTime();
            const float OpenSpeed = 8.0f;
            const float CloseSpeed = 8.0f;

            switch (state)
            {
                case DebugCommandState.Closed:
                    if (InputDevice.GetKeybord(PlayerIndex.One).IsKeyDown(Keys.Tab))
                    {
                        state = DebugCommandState.Opening;

                        if (Activated != null)
                        {
                            Activated(this, EventArgs.Empty);
                        }
                    }
                    break;
                case DebugCommandState.Opening:
                    stateTransition += dt * OpenSpeed;
                    if (stateTransition > 1.0f)
                    {
                        stateTransition = 1.0f;
                        state = DebugCommandState.Opened;
                    }
                    break;
                case DebugCommandState.Opened:
                    ProcessKeyInputs(dt);
                    break;
                case DebugCommandState.Closing:
                    stateTransition -= dt * CloseSpeed;
                    if (stateTransition < 0.0f)
                    {
                        stateTransition = 0.0f;
                        state = DebugCommandState.Closed;

                        if (Deactivated != null)
                        {
                            Deactivated(this, EventArgs.Empty);
                        }
                    }
                    break;
            }
        }