72 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|