public Viewport.CameraSettingsClass GetCameraSettings() { var result = OnGetCameraSettings(); GetCameraSettingsEvent?.Invoke(this, ref result); return(result); }
public virtual Viewport.CameraSettingsClass GetCameraSettings(Component_GameMode gameMode, Viewport viewport, Component_Camera cameraDefault) { //event Viewport.CameraSettingsClass result = null; GetCameraSettingsEvent?.Invoke(this, gameMode, viewport, cameraDefault, ref result); //default behavior if (result == null) { result = new Viewport.CameraSettingsClass(viewport, cameraDefault.AspectRatio, cameraDefault.FieldOfView, cameraDefault.NearClipPlane, cameraDefault.FarClipPlane, gameMode.FreeCameraPosition, gameMode.FreeCameraDirection.GetVector(), Vector3.ZAxis, ProjectionType.Perspective, 1, cameraDefault.Exposure, cameraDefault.EmissiveFactor); } return(result); }
public virtual Viewport.CameraSettingsClass GetCameraSettings(Viewport viewport, Component_Camera cameraDefault) { Viewport.CameraSettingsClass result = null; GetCameraSettingsEvent?.Invoke(this, viewport, cameraDefault, ref result); if (result == null) { if (FreeCamera) { //free camera result = new Viewport.CameraSettingsClass(viewport, cameraDefault.AspectRatio, cameraDefault.FieldOfView, cameraDefault.NearClipPlane, cameraDefault.FarClipPlane, freeCameraPosition, freeCameraDirection.GetVector(), Vector3.ZAxis, ProjectionType.Perspective, 1, cameraDefault.Exposure, cameraDefault.EmissiveFactor); } else if (UseBuiltInCamera.Value == BuiltInCameraEnum.FirstPerson) { //first person camera //Character var character = ObjectControlledByPlayer.Value as Component_Character; if (character != null) { character.GetFirstPersonCameraPosition(out var position, out var forward, out var up); var eyePosition = character.TransformV * character.EyePosition.Value; var direction = character.LookToDirection.GetVector(); result = new Viewport.CameraSettingsClass(viewport, cameraDefault.AspectRatio, cameraDefault.FieldOfView, cameraDefault.NearClipPlane, cameraDefault.FarClipPlane, eyePosition, direction, up, ProjectionType.Perspective, 1, cameraDefault.Exposure, cameraDefault.EmissiveFactor); } } else if (UseBuiltInCamera.Value == BuiltInCameraEnum.ThirdPerson) { //third person camera //Character if (Scene.Mode.Value == Component_Scene.ModeEnum._3D) { var character = ObjectControlledByPlayer.Value as Component_Character; if (character != null) { var lookAt = character.TransformV.Position; var d = new SphericalDirection(MathEx.DegreeToRadian(ThirdPersonCameraHorizontalAngle.Value), MathEx.DegreeToRadian(ThirdPersonCameraVerticalAngle.Value)); var direction = -d.GetVector(); var from = lookAt - direction * ThirdPersonCameraDistance.Value; result = new Viewport.CameraSettingsClass(viewport, cameraDefault.AspectRatio, cameraDefault.FieldOfView, cameraDefault.NearClipPlane, cameraDefault.FarClipPlane, from, direction, Vector3.ZAxis, ProjectionType.Perspective, 1, cameraDefault.Exposure, cameraDefault.EmissiveFactor); } } //Character2D if (Scene.Mode.Value == Component_Scene.ModeEnum._2D) { var character = ObjectControlledByPlayer.Value as Component_Character2D; if (character != null) { var lookAt = character.TransformV.Position; var from = lookAt + new Vector3(0, 0, 10); result = new Viewport.CameraSettingsClass(viewport, cameraDefault.AspectRatio, cameraDefault.FieldOfView, cameraDefault.NearClipPlane, cameraDefault.FarClipPlane, from, -Vector3.ZAxis, Vector3.YAxis, ProjectionType.Orthographic, cameraDefault.Height, cameraDefault.Exposure, cameraDefault.EmissiveFactor); } } } } //Component_CameraManagement if (result == null) { var m = GetCurrentCameraManagement(); if (m != null) { result = m.GetCameraSettings(this, viewport, cameraDefault); } } return(result); }