mirror of
https://github.com/tym1116/BH3.git
synced 2025-12-12 22:44:35 +01:00
99 lines
2.2 KiB
C#
99 lines
2.2 KiB
C#
using UnityEngine;
|
|
|
|
namespace MoleMole
|
|
{
|
|
public class FollowAvatarPoleState : BaseFollowBaseState
|
|
{
|
|
private float _enteringLerpDuration;
|
|
|
|
private bool _enteringLerp;
|
|
|
|
private float _startPolar;
|
|
|
|
private float _startForwardDelta;
|
|
|
|
private float _targetPolar;
|
|
|
|
private float _targetForwardDelta;
|
|
|
|
private float _lerpTimer;
|
|
|
|
public FollowAvatarPoleState(MainCameraFollowState followState)
|
|
: base(followState)
|
|
{
|
|
}
|
|
|
|
public void SetEnteringLerpTarget(float targetPolar)
|
|
{
|
|
_targetPolar = targetPolar;
|
|
maskedShortStates.Add(_owner.rotateToAvatarFacingState);
|
|
}
|
|
|
|
public void CancelEnteringLerp()
|
|
{
|
|
_enteringLerp = false;
|
|
}
|
|
|
|
public override void Enter()
|
|
{
|
|
if (_owner.lastBaseState == _owner.followAvatarAndTargetState)
|
|
{
|
|
_enteringLerp = true;
|
|
_lerpTimer = 0f;
|
|
_startPolar = _owner.anchorPolar;
|
|
_startForwardDelta = _owner.forwardDeltaAngle;
|
|
_targetForwardDelta = 0f;
|
|
_enteringLerpDuration = Miscs.AbsAngleDiff(_startPolar, _targetPolar) * 0.1f;
|
|
base.cannotBeSkipped = true;
|
|
}
|
|
}
|
|
|
|
private float GetPoleFollowAnchor()
|
|
{
|
|
Vector3 vector = _owner.followData.anchorPosition - _owner.followCenterXZPosition;
|
|
return Mathf.Atan2(vector.z, vector.x) * 57.29578f;
|
|
}
|
|
|
|
public override void Update()
|
|
{
|
|
if (_enteringLerp)
|
|
{
|
|
_lerpTimer += Time.deltaTime * _owner.mainCamera.TimeScale;
|
|
if (_lerpTimer > _enteringLerpDuration)
|
|
{
|
|
_owner.anchorPolar = _targetPolar;
|
|
_owner.forwardDeltaAngle = _targetForwardDelta;
|
|
_enteringLerp = false;
|
|
maskedShortStates.Remove(_owner.rotateToAvatarFacingState);
|
|
base.cannotBeSkipped = false;
|
|
}
|
|
else
|
|
{
|
|
float t = _lerpTimer / _enteringLerpDuration;
|
|
_owner.anchorPolar = Mathf.Lerp(_startPolar, _targetPolar, t);
|
|
_owner.forwardDeltaAngle = Mathf.Lerp(_startForwardDelta, _targetForwardDelta, t);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_owner.anchorPolar = GetPoleFollowAnchor();
|
|
}
|
|
}
|
|
|
|
public override void Exit()
|
|
{
|
|
if (maskedShortStates.Contains(_owner.rotateToAvatarFacingState))
|
|
{
|
|
maskedShortStates.Remove(_owner.rotateToAvatarFacingState);
|
|
}
|
|
_enteringLerp = false;
|
|
_owner.forwardDeltaAngle = 0f;
|
|
}
|
|
|
|
public override void ResetState()
|
|
{
|
|
_enteringLerp = false;
|
|
}
|
|
}
|
|
}
|