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