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

101 lines
2.3 KiB
C#

using UFS2.Gameplay;
using UnityEngine;
public class FishMultiplayerMoveToWaypointState : IState
{
private FishEntity entity;
private bool isFastMove;
private float startSpeed;
private float enterTime;
private float maxSpeedTime = 1.25f;
private float normalSpeed => Mathf.Clamp(entity.Data.MoveSpeed, 0.1f, 1.5f);
public FishMultiplayerMoveToWaypointState(FishEntity entity)
{
this.entity = entity;
}
public void Enter()
{
entity.Physics.OnExitWater += Physics_OnExitWater;
entity.Physics.OnEnterWater += Physics_OnEnterWater;
if (MultiplayerFishSpawner.IsSlave)
{
entity.Target = entity.networkedTarget;
}
else
{
entity.SetRandomWaypoint(entity.MoveSpeed);
}
enterTime = Time.time;
isFastMove = Random.Range(0f, 100f) <= 0.25f;
bool flag = entity.Target != null && 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.ResetBaitRefferences();
}
public void Execute()
{
if (MultiplayerFishSpawner.IsSlave)
{
float distanceToTarget = entity.GetDistanceToTarget();
if (distanceToTarget < 1f)
{
entity.MoveSpeed = normalSpeed * 0.3f;
}
else if (distanceToTarget < 2f)
{
entity.MoveSpeed = normalSpeed;
}
else if (distanceToTarget < 5f)
{
entity.MoveSpeed = normalSpeed * 2f;
}
else if (distanceToTarget < 10f)
{
entity.MoveSpeed = normalSpeed * 3f;
}
else
{
entity.transform.position = entity.Target.position;
}
}
else if (entity.MoveSpeed > normalSpeed && enterTime + maxSpeedTime < Time.time)
{
entity.MoveSpeed = Mathf.MoveTowards(entity.MoveSpeed, normalSpeed, Time.deltaTime);
}
}
public void Exit()
{
entity.Physics.OnExitWater -= Physics_OnExitWater;
entity.Physics.OnEnterWater -= Physics_OnEnterWater;
}
private void Physics_OnEnterWater()
{
if (!MultiplayerFishSpawner.IsSlave)
{
entity.SetRandomWaypoint(entity.MoveSpeed);
entity.MoveSpeed = startSpeed;
}
}
private void Physics_OnExitWater()
{
if (!MultiplayerFishSpawner.IsSlave)
{
entity.SetRandomWaypoint(entity.MoveSpeed);
entity.MoveSpeed = 0f;
}
}
}