public override bool CheckPreCondition(GameObject agent) { m_goTarget = GetComponent <CS_Spy>().GetCurrentSearchPoint(); CS_SpySight cSpySight = GetComponent <CS_SpySight>(); if (cSpySight.m_bCanSeeGuard || cSpySight.m_bCanSeeIntel) { return(false); } if (m_goTarget != null) { return(true); } return(false); }
private void OnSceneGUI() { CS_SpySight GuardRef = (CS_SpySight)target; Handles.color = Color.white; Handles.DrawWireArc(GuardRef.transform.position, Vector3.up, Vector3.forward, 360, GuardRef.m_fViewRadius); Vector3 v3FOVAngleA = GuardRef.DirectionFromAngle(-GuardRef.m_fViewAngle / 2, false); Vector3 v3FOVAngleB = GuardRef.DirectionFromAngle(GuardRef.m_fViewAngle / 2, false); Handles.DrawLine(GuardRef.transform.position, GuardRef.transform.position + v3FOVAngleA * GuardRef.m_fViewRadius); Handles.DrawLine(GuardRef.transform.position, GuardRef.transform.position + v3FOVAngleB * GuardRef.m_fViewRadius); Handles.color = Color.red; foreach (Transform visibleTarget in GuardRef.m_ltVisibleTargets) { Handles.DrawLine(GuardRef.transform.position, visibleTarget.position); } }
public override bool CheckPreCondition(GameObject agent) { CS_SpySight cSpySightref = GetComponent <CS_SpySight>(); GameObject goVisibleGuard = cSpySightref.GetVisibleGuard(); if (goVisibleGuard == null) { return(false); } float fDotProduct = Vector3.Dot(goVisibleGuard.transform.forward, (transform.position - goVisibleGuard.transform.position).normalized); if (fDotProduct < 0.5f) { return(false); } //Idea for raycast from Callum Pertoldi RaycastHit rcHit; Transform tTarget = GetComponent <CS_Spy>().GetSpyTarget().transform; float fLeftDist, fRightDist, fBackDist; float fFurthest; Ray rLeftRay = new Ray(transform.position, Vector3.left); Ray rBackRay = new Ray(transform.position, Vector3.back); Ray rRightRay = new Ray(transform.position, Vector3.right); Physics.Raycast(rLeftRay, out rcHit); tTarget.position = rcHit.point; fLeftDist = rcHit.distance; fFurthest = fLeftDist; Physics.Raycast(rRightRay, out rcHit); fRightDist = rcHit.distance; if (fRightDist > fFurthest) { fFurthest = fRightDist; tTarget.position = rcHit.point; } Physics.Raycast(rBackRay, out rcHit); fBackDist = rcHit.distance; if (fBackDist > fFurthest) { fFurthest = fBackDist; tTarget.position = rcHit.point; } NavMeshHit nmHit; if (NavMesh.SamplePosition(tTarget.position, out nmHit, Mathf.Infinity, NavMesh.AllAreas)) { } tTarget.transform.position = nmHit.position; GetComponent <CS_Spy>().MoveTarget(nmHit.position); m_goTarget = tTarget.gameObject; Debug.Log("Avoiding! "); if (m_goTarget != null) { return(true); } return(false); }