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; } }