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); }
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); } }
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); } }
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); }
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); } }