Files
HauntedBloodlines/Assets/Scripts/AI/StatueDetection.cs
2025-05-29 22:31:40 +03:00

70 lines
2.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using System.Collections.Generic;
public class StatueDetection : MonoBehaviour
{
public List<Transform> statues; // Λίστα με όλα τα αγάλματα
[SerializeField] private float viewRadius = 10f; // Πόσο μακριά μπορεί να δει ο παίκτης
[SerializeField] private float viewAngle = 90f; // Γωνία οπτικού πεδίου του παίκτη
private void Update()
{
CheckStatuesInView();
}
// Έλεγχος αν κάποιο άγαλμα είναι εντός οπτικού πεδίου
public bool CheckStatuesInView()
{
foreach (Transform statue in statues)
{
if (IsLookingAtStatue(statue))
{
Debug.Log($"Looking at statue: {statue.name}");
return true;
}
}
return false;
}
// Μέθοδος για να ελέγξουμε αν ο παίκτης κοιτάζει συγκεκριμένο άγαλμα
private bool IsLookingAtStatue(Transform statue)
{
// Υπολογισμός κατεύθυνσης από τον παίκτη προς το άγαλμα
Vector3 dirToStatue = (statue.position - transform.position).normalized;
// Υπολογισμός απόστασης προς το άγαλμα
float distToStatue = Vector3.Distance(transform.position, statue.position);
// Έλεγχος αν το άγαλμα είναι εντός του radius και της γωνίας θέασης
if (distToStatue <= viewRadius && Vector3.Angle(transform.forward, dirToStatue) < viewAngle / 2)
{
return true;
}
return false;
}
// Για debugging - σχεδιάζουμε το οπτικό πεδίο
private void OnDrawGizmos()
{
Gizmos.color = Color.blue;
// Σχεδίαση σφαίρας που αντιπροσωπεύει το radius
Gizmos.DrawWireSphere(transform.position, viewRadius);
// Σχεδίαση γραμμών που αντιπροσωπεύουν τη γωνία θέασης
Vector3 viewAngleA = DirFromAngle(-viewAngle / 2);
Vector3 viewAngleB = DirFromAngle(viewAngle / 2);
Gizmos.DrawLine(transform.position, transform.position + viewAngleA * viewRadius);
Gizmos.DrawLine(transform.position, transform.position + viewAngleB * viewRadius);
}
// Βοηθητική συνάρτηση για υπολογισμό κατεύθυνσης
public Vector3 DirFromAngle(float angleInDegrees)
{
angleInDegrees += transform.eulerAngles.y;
return new Vector3(Mathf.Sin(angleInDegrees * Mathf.Deg2Rad), 0, Mathf.Cos(angleInDegrees * Mathf.Deg2Rad));
}
}