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(); base.OnStart(); fish = transform.GetComponent(); 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; } }