public void Evaluate(int SpreadMax) { var qrot = Quaternion.RotationYawPitchRoll( (float)(FDefRot[0].y * Math.PI * 2), (float)(FDefRot[0].x * Math.PI * 2), (float)(FDefRot[0].z * Math.PI * 2) ); var defcam = new CameraProperties( FTrIn[0], FDefTrans[0], qrot, FDefPivotDist[0], FDefFov[0], FDefNear[0], FDefFar[0] ); if (FKeyboard.IsChanged || FMouse.IsChanged) { _mouseMan.SelectDevice(FMouse[0]); _keyMan.SelectDevice(FKeyboard[0]); } if (_camera == null) { _camera = new ModularCam() { Default = defcam, Properties = defcam, RotationSpeed = FRotSpeed[0] }; } if (_resetter == null) { _resetter = new CameraDelta(); } _resetter.ResetTranslation = FDefTrans.IsChanged || FResetAll[0]; _resetter.ResetRotation = FDefRot.IsChanged || FResetAll[0]; _resetter.ResetPivotDistance = FDefPivotDist.IsChanged || FResetAll[0]; _resetter.ResetFov = FDefFov.IsChanged || FResetAll[0]; _resetter.ResetNear = FDefNear.IsChanged || FResetAll[0]; _resetter.ResetFar = FDefFar.IsChanged || FResetAll[0]; _camera.InputAspect = FAspectIn[0]; if (FRotSpeed.IsChanged || FResetAll[0]) { _camera.RotationSpeed = FRotSpeed[0]; } _camera.Default = defcam; _camera.Properties = new CameraProperties(_camera.Properties, defcam, _resetter); if (FDeltas.SliceCount > 0 && FDeltas[0] != null) { if (FDeltas.Any(delta => delta.LockCursor)) { SetCursorPos(_cursorPos.X, _cursorPos.Y); } else { GetCursorPos(out _cursorPos); } var hoverhandle = WindowFromPoint(_cursorPos); var parenthandle = GetParent((IntPtr)FHandle[0]); for (int i = 0; i < FDeltas.SliceCount; i++) { var delta = FDeltas[i]; delta.InputMouse = _mouseMan.Devices[0]; delta.InputKeyboard = _keyMan.Devices[0]; delta.ConnectedCamera = _camera; if (FHandle[0] > 0) { delta.InteractUpstream = FHandle[0] == hoverhandle.ToInt32() || parenthandle == hoverhandle; } else { delta.InteractUpstream = true; } _camera.Move(delta, FHDEHost.FrameTime - _prevFrameTime); } } FCameraOut[0] = _camera; FViewOut[0] = _camera.View; FProjectionOut[0] = _camera.Projection; FProjectionWithAspectOut[0] = _camera.ProjectionWithAspect; _prevFrameTime = FHDEHost.FrameTime; }
public void SetCameraDelta(CameraDelta delta) { currentCamera.SetCameraDetal(delta); }