Skip to content

Commit

Permalink
详见描述
Browse files Browse the repository at this point in the history
- 修复跟随按钮未注册时导致的NRE错误
- 优化摄像机位置更新
  • Loading branch information
will258012 committed Sep 16, 2024
1 parent 4687f82 commit 18d8732
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 10 deletions.
23 changes: 16 additions & 7 deletions FPSCamera/Code/Cam/Controller/FPSCamController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ private void EnableCam()
StartCoroutine(LodManager.ToggleLODOpt(true));
if (ModSettings.ShadowsOpt)
StartCoroutine(ShadowsManager.ToggleShadowsOpt(true));
FollowButtons.Instance.enabled = false;
if (FollowButtons.Instance != null)
FollowButtons.Instance.enabled = false;
GameCamController.Instance.Initialize();
}

Expand All @@ -46,7 +47,8 @@ private void DisableCam()
Logging.KeyMessage("Disabling FPS Camera");
FPSCam?.StopCam();
FPSCam = null;
FollowButtons.Instance.enabled = true;
if (FollowButtons.Instance != null)
FollowButtons.Instance.enabled = true;
if (ModSettings.ShowInfoPanel)
CamInfoPanel.Instance.DisableCamInfoPanel();
if (ModSettings.LodOpt)
Expand Down Expand Up @@ -378,15 +380,18 @@ private void UpdateFollowCamPos()
// Apply the calculated position and rotation to the camera.
if (ModSettings.SmoothTransition)
{
cameraTransform.position = cameraTransform.position.DistanceTo(instancePos) > ModSettings.MinTransDistance &&

GameCamController.Instance.CameraController.m_targetPosition = cameraTransform.position = cameraTransform.position.DistanceTo(instancePos) > ModSettings.MinTransDistance &&
cameraTransform.position.DistanceTo(instancePos) <= ModSettings.MaxTransDistance
? Vector3.Lerp(cameraTransform.position, instancePos, Time.deltaTime * ModSettings.TransSpeed)
: instancePos;
cameraTransform.rotation = Quaternion.Slerp(cameraTransform.rotation, instanceRotation, Time.deltaTime * ModSettings.TransSpeed);
}
else
{
cameraTransform.position = instancePos;
GameCamController.Instance.CameraController.m_targetPosition =
cameraTransform.position =
instancePos;
cameraTransform.rotation = instanceRotation;
}
}
Expand Down Expand Up @@ -439,15 +444,18 @@ private void UpdateFreeCamPos()
// Apply the calculated position and rotation to the camera.
if (ModSettings.SmoothTransition)
{
cameraTransform.position = freecam._positioning.pos = cameraTransform.position.DistanceTo(instancePos) > ModSettings.MinTransDistance &&
GameCamController.Instance.CameraController.m_targetPosition = cameraTransform.position = freecam._positioning.pos = cameraTransform.position.DistanceTo(instancePos) > ModSettings.MinTransDistance &&
cameraTransform.position.DistanceTo(instancePos) <= ModSettings.MaxTransDistance
? Vector3.Lerp(cameraTransform.position, instancePos, Time.deltaTime * ModSettings.TransSpeed)
: instancePos;
cameraTransform.rotation = freecam._positioning.rotation = Quaternion.Slerp(cameraTransform.rotation, instanceRotation, Time.deltaTime * ModSettings.TransSpeed);
}
else
{
cameraTransform.position = freecam._positioning.pos = instancePos;
GameCamController.Instance.CameraController.m_targetPosition =
cameraTransform.position =
freecam._positioning.pos =
instancePos;
cameraTransform.rotation = freecam._positioning.rotation = instanceRotation;
}

Expand All @@ -472,7 +480,8 @@ private void UpdatTransitionPos()
return;
}
// Apply the calculated position and rotation to the camera.
cameraTransform.position = Vector3.Lerp(cameraTransform.position, _endPos.pos, Time.deltaTime * ModSettings.TransSpeed);
cameraTransform.position =
Vector3.Lerp(cameraTransform.position, _endPos.pos, Time.deltaTime * ModSettings.TransSpeed);
cameraTransform.rotation = Quaternion.Slerp(cameraTransform.rotation, _endPos.rotation, Time.deltaTime * ModSettings.TransSpeed);
}
private bool _isTransitioning = false;
Expand Down
15 changes: 12 additions & 3 deletions FPSCamera/Code/Cam/Controller/GameCamController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,11 @@ public void Initialize()
if (_camDoF != null && IsDoFEnabled)
_camDoF.enabled = false;
}
if (ModSettings.SetBackCamera) _cachedPositioning = new Positioning(MainCamera.transform.position, MainCamera.transform.rotation);
if (ModSettings.SetBackCamera)
{
_cachedPositioning = new Positioning(MainCamera.transform.position, MainCamera.transform.rotation);
_cachedTargetPos = CameraController.m_targetPosition;
}

_cachedfieldOfView = MainCamera.fieldOfView;
MainCamera.fieldOfView = ModSettings.CamFieldOfView;
Expand All @@ -65,12 +69,15 @@ public void Restore()
if (_camTiltEffect != null) _camTiltEffect.enabled = IsTiltEffectEnabled;
MainCamera.fieldOfView = _cachedfieldOfView;
MainCamera.nearClipPlane = _cachednearClipPlane;

if (!ModSettings.SetBackCamera)
{
CameraController.m_currentPosition = CameraController.m_targetPosition = MainCamera.transform.position;
CameraController.m_currentAngle = CameraController.m_targetAngle = new Vector2(MainCamera.transform.eulerAngles.y, MainCamera.transform.eulerAngles.x).ClampEulerAngles();
CameraController.m_currentHeight = CameraController.m_targetHeight = MainCamera.transform.position.y;
CameraController.m_currentHeight = CameraController.m_targetHeight = MainCamera.transform.position.y - MapUtils.GetMinHeightAt(MainCamera.transform.position);
}
else
{
CameraController.m_targetPosition = _cachedTargetPos;
}
CameraController.enabled = true;
}
Expand All @@ -85,7 +92,9 @@ private GameCamController()
private readonly TiltShiftEffect _camTiltEffect;

internal Positioning _cachedPositioning;
internal Vector3 _cachedTargetPos;
private float _cachedfieldOfView;
private float _cachednearClipPlane;

}
}

0 comments on commit 18d8732

Please sign in to comment.