89 lines
2.1 KiB
C#
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;
|
|
}
|
|
}
|