Beispiel #1
0
 public void DeviceAttached(Device dev)
 {
     Game.GameManager.GraphicsThread.GraphicsManager.Device.SetTransform(TransformState.Projection, mMatProjection);
     mDevice.SetTransform(TransformState.View, Matrix.LookAtLH(mPosition, mTarget, mUp));
     ShaderCollection.CameraChanged(this);
     Game.GameManager.WorldManager.Update(this);
     ViewFrustum.BuildViewFrustum(mDevice.GetTransform(TransformState.View), mDevice.GetTransform(TransformState.Projection));
     Game.GameManager.InformPropertyChanged(Game.GameProperties.CameraPosition);
 }
Beispiel #2
0
        public void UpdateCamera(Device dev, TimeSpan diff)
        {
            if (Input.InputManager.Input.HasFocus == false)
            {
                return;
            }

            bool  changed     = false;
            var   inp         = Input.InputManager.Input;
            float sensitivity = Game.GameManager.GameWindow.PropertyPanel.CameraSensitivity;

            if (inp[Keys.W])
            {
                mPosition += (float)diff.TotalSeconds * 50.0f * Vector3.UnitX;
                mTarget   += (float)diff.TotalSeconds * 50.0f * Vector3.UnitX;
                changed    = true;
            }
            if (inp[Keys.S])
            {
                mPosition -= (float)diff.TotalSeconds * 50.0f * Vector3.UnitX;
                mTarget   -= (float)diff.TotalSeconds * 50.0f * Vector3.UnitX;
                changed    = true;
            }
            if (inp[Keys.D])
            {
                var change = (float)diff.TotalSeconds * 50.0f * Vector3.UnitY;
                mPosition += change;
                mTarget   += change;
                changed    = true;
            }
            if (inp[Keys.A])
            {
                var change = (float)diff.TotalSeconds * 50.0f * Vector3.UnitY;
                mPosition -= change;
                mTarget   -= change;
                changed    = true;
            }
            if (inp[Keys.Q])
            {
                MouseWheelTurned(127);
            }
            if (inp[Keys.E])
            {
                MouseWheelTurned(-127);
            }

            if (changed)
            {
                dev.SetTransform(TransformState.View, Matrix.LookAtLH(mPosition, mTarget, mUp));
                ShaderCollection.CameraChanged(this);
                Game.GameManager.WorldManager.Update(this);
                ViewFrustum.BuildViewFrustum(dev.GetTransform(TransformState.View), dev.GetTransform(TransformState.Projection));
                Game.GameManager.InformPropertyChanged(Game.GameProperties.CameraPosition);
            }
        }
Beispiel #3
0
 public void SetPosition(Vector3 position, bool nonUpdate = false)
 {
     mPosition = position;
     mTarget   = mPosition + mFront;
     mDevice.SetTransform(TransformState.View, Matrix.LookAtLH(mPosition, mTarget, mUp));
     ShaderCollection.CameraChanged(this);
     if (nonUpdate == false)
     {
         Game.GameManager.WorldManager.Update(this);
         ViewFrustum.BuildViewFrustum(mDevice.GetTransform(TransformState.View), mDevice.GetTransform(TransformState.Projection));
         Game.GameManager.InformPropertyChanged(Game.GameProperties.CameraPosition);
     }
 }
Beispiel #4
0
        void MouseWheelTurned(int delta)
        {
            if (Game.GameManager.GraphicsThread.GraphicsManager.IsIn2D == false)
            {
                return;
            }

            int   realTurn = delta / 127;
            float newZoom  = mZoomFactor + realTurn * 0.01f;

            if (newZoom < 0.1f)
            {
                newZoom = 0.1f;
            }
            if (newZoom > 1.0f)
            {
                newZoom = 1.0f;
            }

            mZoomFactor = newZoom;

            float aspect =
                (float)Game.GameManager.GraphicsThread.GraphicsManager.RenderWindow.ClientSize.Width /
                (float)Game.GameManager.GraphicsThread.GraphicsManager.RenderWindow.ClientSize.Height;

            mMatProjection = Matrix.OrthoOffCenterLH(
                -(Utils.Metrics.Tilesize * mZoomFactor * aspect / 2.0f),
                Utils.Metrics.Tilesize * mZoomFactor * aspect / 2.0f,
                -(Utils.Metrics.Tilesize * mZoomFactor / 2.0f),
                Utils.Metrics.Tilesize * mZoomFactor / 2.0f,
                0.1f,
                10000.0f
                );

            Game.GameManager.GraphicsThread.GraphicsManager.Device.SetTransform(TransformState.Projection, mMatProjection);
            var dev = Game.GameManager.GraphicsThread.GraphicsManager.Device;

            dev.SetTransform(TransformState.View, Matrix.LookAtLH(mPosition, mTarget, mUp));
            ShaderCollection.CameraChanged(this);
            Game.GameManager.WorldManager.Update(this);
            Game.GameManager.InformPropertyChanged(Game.GameProperties.CameraPosition);

            ViewFrustum.BuildViewFrustum(dev.GetTransform(TransformState.View), mMatProjection);
        }
Beispiel #5
0
        public void UpdateCamera(Device dev, TimeSpan diff)
        {
            if (Input.InputManager.Input.HasFocus == false)
            {
                return;
            }

            bool  changed     = false;
            var   inp         = Input.InputManager.Input;
            float sensitivity = Game.GameManager.GameWindow.PropertyPanel.CameraSensitivity;

            if (inp[Keys.W])
            {
                mPosition += (float)diff.TotalSeconds * mFront * 50;
                mTarget   += (float)diff.TotalSeconds * mFront * 50;
                changed    = true;
            }
            if (inp[Keys.S])
            {
                mPosition -= (float)diff.TotalSeconds * mFront * 50;
                mTarget   -= (float)diff.TotalSeconds * mFront * 50;
                changed    = true;
            }
            if (inp[Keys.D])
            {
                var change = (float)diff.TotalSeconds * mRight * 50;
                mPosition += change;
                mTarget   += change;
                changed    = true;
            }
            if (inp[Keys.A])
            {
                var change = (float)diff.TotalSeconds * mRight * 50;
                mPosition -= change;
                mTarget   -= change;
                changed    = true;
            }
            if (inp[Keys.Q])
            {
                var change = (float)diff.TotalSeconds * Vector3.UnitZ * 50;
                mPosition += change;
                mTarget   += change;
                changed    = true;
            }
            if (inp[Keys.E])
            {
                var change = (float)diff.TotalSeconds * Vector3.UnitZ * 50;
                mPosition -= change;
                mTarget   -= change;
                changed    = true;
            }

            var state = Input.InputManager.Input.Mouse.State;

            if (state.IsPressed((int)SlimDX.DirectInput.MouseObject.Button2) && Game.GameManager.SelectionManager.IsModelMovement == false)
            {
                if (state.X != 0 || state.Y != 0)
                {
                    if (state.X != 0)
                    {
                        int    fac = (state.X < 0) ? -1 : 1;
                        Matrix rot = Matrix.RotationZ(state.X * 0.005f * sensitivity);
                        mFront = Vector3.TransformCoordinate(mFront, rot);
                        mFront.Normalize();
                        mTarget = mPosition + mFront;
                        mRight  = Vector3.TransformCoordinate(mRight, rot);
                        mRight.Normalize();
                        mUp = Vector3.TransformCoordinate(mUp, rot);
                        mUp.Normalize();
                        changed = true;
                    }
                    if (state.Y != 0)
                    {
                        int    fac = (state.Y < 0) ? -1 : 1;
                        Matrix rot = Matrix.RotationAxis(mRight, state.Y * 0.005f * sensitivity);
                        mFront = Vector3.TransformCoordinate(mFront, rot);
                        mFront.Normalize();
                        mTarget = mPosition + mFront;
                        mUp     = Vector3.TransformCoordinate(mUp, rot);
                        mUp.Normalize();
                        changed = true;
                    }
                }
            }


            if (changed)
            {
                dev.SetTransform(TransformState.View, Matrix.LookAtLH(mPosition, mTarget, mUp));
                ShaderCollection.CameraChanged(this);
                Game.GameManager.WorldManager.Update(this);
                ViewFrustum.BuildViewFrustum(dev.GetTransform(TransformState.View), dev.GetTransform(TransformState.Projection));
                Game.GameManager.InformPropertyChanged(Game.GameProperties.CameraPosition);
            }
        }