public static Collider[] GetEntitiesInSight(int mask, Transform transform, float radius, float degrees, float heightOffset, float maxHeightDifference, bool useHeightDifference = true) { Collider[] colliders = Environment.GetObjectsInRadius(transform.position, radius, mask); List <Collider> results = new List <Collider>(); float halfDegrees = degrees / 2.0f; for (int loop1 = 0; loop1 < colliders.Length; loop1++) { GameObject candidate = GameObjectUtilities.GetGameObject(colliders[loop1]); if (halfDegrees <= Direction.GetAngle(transform, candidate.transform)) { continue; } Vector3 eyePos = candidate.transform.position + Vector3.up * heightOffset; Vector3 toPlayer = transform.position - eyePos; // If the enemy is too high or too low ignore him. if (useHeightDifference && Mathf.Abs(toPlayer.y + heightOffset) > maxHeightDifference) { continue; } EntityController entity = candidate.GetComponent <EntityController>(); if (null == entity || entity.Dead) { continue; } results.Add(colliders[loop1]); } return(results.ToArray()); }
protected virtual void OnTriggerEnter(Collider other) { GameObject go = GameObjectUtilities.GetGameObject(other); PlayerController player = go.GetComponent <PlayerController>(); if (null == player) { return; } PlayerVisited = true; }
protected virtual void OnTriggerEnter(Collider other) { GameObject go = GameObjectUtilities.GetGameObject(other); if (go.CompareTag("Pickup")) { AbstractPickup pickup = go.GetComponent <AbstractPickup>(); if (null == pickup) { return; } pickup.ExecutePickup(this); Destroy(go); } }
public static Collider[] GetClimbables(Transform transform) { Collider[] colliders = Environment.GetObjectsInRadius(transform.position, 1.0f, "Climbable", LayerMaskValues.LEVEL); List <Collider> results = new List <Collider>(); for (int loop = 0; loop < colliders.Length; loop++) { GameObject candidate = GameObjectUtilities.GetGameObject(colliders[loop]); if ((0 < Direction.GetForwardOrBehind(transform, candidate.transform)) && (Direction.AreParallel(transform.forward, candidate.transform.forward, 5.0f))) { results.Add(colliders[loop]); } } return(results.ToArray()); }
public static Collider[] GetEntitiesInFront(int mask, Transform transform, float radius, float degrees, float heightOffset, float maxHeightDifference, bool useHeightDifference = true) { Collider[] colliders = Environment.GetEntitiesInSight(mask, transform, radius, degrees, heightOffset, maxHeightDifference, useHeightDifference); List <Collider> results = new List <Collider>(); for (int loop = 0; loop < colliders.Length; loop++) { GameObject candidate = GameObjectUtilities.GetGameObject(colliders[loop]); EntityController entity = candidate.GetComponent <EntityController>(); if (null == entity || entity.Dead) { continue; } if (0 < Direction.GetForwardOrBehind(transform, candidate.transform)) { results.Add(colliders[loop]); } } return(results.ToArray()); }