- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- [CreateAssetMenu(menuName = "Finite State Machine/Condition/Camera View")]
- public class CameraViewCondition : Condition
- {
- Camera cam;
- [SerializeField] float viewAngle;
- [SerializeField] float viewDistance;
- protected override bool Test(FiniteStateMachine fsm)
- {
- cam = Camera.main;
- Debug.Log(cam);
- Vector3 viewportPoint = cam.WorldToViewportPoint(fsm.transform.position);
-
- if (viewportPoint.x > 0 && viewportPoint.x < 1 && viewportPoint.y > 0 && viewportPoint.y < 1) {
-
-
- Vector3 newVector = new Vector3(fsm.target.position.x - cam.transform.position.x,0, fsm.target.position.z - cam.transform.position.z);
- Debug.DrawRay(fsm.target.transform.position, newVector, Color.green);
- float distance = newVector.magnitude;
- float angle = Vector3.Angle(Vector3.Normalize(fsm.transform.position - fsm.target.position), newVector.normalized);
- Debug.Log(angle);
- if (angle < viewAngle && distance < viewDistance)
- {
- Debug.Log("Entered Raycast");
- return Raycast(newVector, fsm);
- } else
- {
- return false;
- }
- } else
- {
- return false;
- }
- }
- private bool Raycast(Vector3 direction, FiniteStateMachine fsm)
- {
- RaycastHit hit;
- if (Physics.Raycast(new Ray(fsm.target.position, fsm.transform.position), out hit, direction.magnitude)) {
- if (hit.collider.CompareTag("Stalker"))
- return true;
- else return false;
- } else
- {
- return true;
- }
- }
- }