Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/FishCheckDirection.cs
2026-02-21 16:45:37 +08:00

89 lines
2.1 KiB
C#

using BehaviorDesigner.Runtime.Tasks;
using UnityEngine;
public class FishCheckDirection : Action
{
private Fish fish;
private float nextTerrainCheck = -1f;
private float terrainCheckFrequency = 2f;
private float nextDirectionChangeTimer;
private string onWrongTerrain;
private float distanceToSpawnpoint;
[HideInInspector]
public new Transform transform;
public override void OnStart()
{
transform = GetComponent<Transform>();
base.OnStart();
fish = transform.GetComponent<Fish>();
fish.SelectRandDirection();
nextDirectionChangeTimer = Time.time + Random.Range(7f, 10f);
}
public override TaskStatus OnUpdate()
{
if (Time.timeScale == 0f)
{
return TaskStatus.Running;
}
if (fish.isBaitUpdate)
{
return TaskStatus.Running;
}
if (fish.isBoatUpdate)
{
return TaskStatus.Running;
}
if (Fish.disableLogic2)
{
return TaskStatus.Running;
}
if (Time.time < nextDirectionChangeTimer)
{
return TaskStatus.Running;
}
if ((bool)fish.fishSpawner)
{
distanceToSpawnpoint = (transform.position - fish.Origin).magnitude;
if (distanceToSpawnpoint > fish.fishSpawner.maxFishAwayDistance)
{
fish.targetDirection = (fish.Origin - transform.position).normalized;
nextDirectionChangeTimer = Time.time + Random.Range(7f, 10f);
return TaskStatus.Running;
}
}
if ((Fish.useAvoidance && fish.useCollisionRaycasts && Physics.Raycast(new Vector3(transform.position.x, 0f, transform.position.z), -Vector3.up, 1.5f, LayerMask.GetMask("Terrain", "Default"))) || fish.IsUnderGround() || (!fish.isFighting && fish.TerrainCollision()))
{
if (fish.debugLog)
{
Debug.Log("too shallow water");
}
fish.targetDirection = (fish.Origin - transform.position).normalized;
nextDirectionChangeTimer = Time.time + Random.Range(7f, 10f);
}
else if (!fish.isSeeingBait)
{
if (fish.isJumping)
{
if (fish.jumpTarget.y < 0f)
{
nextDirectionChangeTimer = Time.time + Random.Range(5f, 8f);
}
}
else
{
fish.SelectRandDirection();
nextDirectionChangeTimer = Time.time + Random.Range(3f, 5f);
}
}
return TaskStatus.Running;
}
}