float getDistanceThreat(Perception_Player player) { //distance to player float distance = (transform.position - player.Player.position).magnitude; //is player out of view distance? if (distance > i_ViewDist) { return(0.0f); } // is the player behind something? RaycastHit raycastData; if (!Physics.Raycast(transform.position, player.Player.position - transform.position, out raycastData, distance + 1.0f, ~LayerMask.GetMask(Constants.ENEMY_STRING)))// TODO: replace with constant { //Debug.DrawLine(transform.position, player.Player.position - transform.position, Color.red); return(0.0f); } else { //did we hit the player? if (raycastData.collider.tag != Constants.PLAYER_STRING) { //Debug.DrawLine(transform.position, player.Player.position - transform.position, Color.black); //return 0.0f; } } //in the field of view? float dot = Vector3.Dot(transform.forward.normalized, (player.Player.position - transform.position).normalized); float angle = Mathf.Acos(dot / (transform.forward.normalized.magnitude * (player.Player.position - transform.position).normalized.magnitude)) * ANGLE_MULTIPLIER; if (i_FieldOfView < angle) { //return 0.0f; } //Debug.Log (player.PlayerInfo.gameObject.name + " in range/sight"); //we can see the player player.playerSeen(i_ResidualThreatTimerSight); return(Mathf.Clamp(((i_ViewDist * i_PerfectVisionPercent) / distance), 0.0f, 1.0f)); }
float getDistanceThreat(Perception_Player player) { //distance to player float distance = (transform.position - player.Player.position).magnitude; //is player out of view distance? if (distance > i_ViewDist) { return 0.0f; } // is the player behind something? RaycastHit raycastData; if (!Physics.Raycast(transform.position, player.Player.position - transform.position, out raycastData, distance +1.0f, ~LayerMask.GetMask(Constants.ENEMY_STRING)))// TODO: replace with constant { //Debug.DrawLine(transform.position, player.Player.position - transform.position, Color.red); return 0.0f; } else { //did we hit the player? if (raycastData.collider.tag != Constants.PLAYER_STRING) { //Debug.DrawLine(transform.position, player.Player.position - transform.position, Color.black); //return 0.0f; } } //in the field of view? float dot = Vector3.Dot(transform.forward.normalized, (player.Player.position - transform.position).normalized); float angle = Mathf.Acos(dot / (transform.forward.normalized.magnitude * (player.Player.position - transform.position).normalized.magnitude)) * ANGLE_MULTIPLIER; if (i_FieldOfView < angle) { //return 0.0f; } //Debug.Log (player.PlayerInfo.gameObject.name + " in range/sight"); //we can see the player player.playerSeen(i_ResidualThreatTimerSight); return Mathf.Clamp(((i_ViewDist * i_PerfectVisionPercent) / distance), 0.0f, 1.0f); }