Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/FishMoveState.cs
2026-03-04 10:03:45 +08:00

72 lines
1.7 KiB
C#

using UFS2.Gameplay;
using UnityEngine;
public class FishMoveState : IState
{
private FishEntity entity;
private Vector3 targetDir;
private bool isFastMove;
private bool isScarredTimer;
private bool isAttractedTimer;
private float startSpeed;
private float enterTime;
private float maxSpeedTime = 1.25f;
private float normalSpeed => Mathf.Clamp(entity.Data.MoveSpeed, 0.1f, 1.5f);
public FishMoveState(FishEntity entity)
{
this.entity = entity;
}
public void Enter()
{
enterTime = Time.time;
isFastMove = Random.Range(0f, 100f) > 0.25f;
entity.SetRandomWaypoint(entity.MoveSpeed);
bool flag = Vector3.Distance(entity.Target.position, entity.transform.position) < 3f;
float num = Mathf.Lerp(entity.Data.MoveSpeed, entity.Data.MoveMaxSpeed, Random.Range(0.25f, 0.5f));
startSpeed = ((isFastMove && flag) ? num : normalSpeed);
entity.MoveSpeed = startSpeed;
entity.SetAnimatorFloat("speed", entity.GetMoveSpeedAnimation());
entity.Physics.OnExitWater += Physics_OnExitWater;
entity.Physics.OnEnterWater += Physics_OnEnterWater;
entity.ResetBaitRefferences();
}
public void Execute()
{
if (enterTime + maxSpeedTime < Time.time)
{
entity.MoveSpeed = Mathf.MoveTowards(entity.MoveSpeed, normalSpeed, Time.deltaTime);
}
entity.SetAnimatorFloat("speed", entity.GetMoveSpeedAnimation());
}
public void Exit()
{
entity.Physics.OnExitWater -= Physics_OnExitWater;
entity.Physics.OnEnterWater -= Physics_OnEnterWater;
}
private void Physics_OnEnterWater()
{
entity.SetRandomWaypoint(entity.MoveSpeed);
entity.MoveSpeed = startSpeed;
}
private void Physics_OnExitWater()
{
entity.SetRandomWaypoint(entity.MoveSpeed);
startSpeed = entity.MoveSpeed;
entity.MoveSpeed = 0f;
}
}