55 lines
2.2 KiB
C#
55 lines
2.2 KiB
C#
using UnityEngine;
|
||
|
||
public class ImpactWave : MonoBehaviour
|
||
{
|
||
[Header("Настройки эхолокации")]
|
||
[Tooltip("Минимальная сила удара, при которой появится волна")]
|
||
public float minImpactForce = 2f;
|
||
|
||
[Tooltip("Префаб звуковой волны (или источника света)")]
|
||
public GameObject wavePrefab;
|
||
|
||
[Header("Настройки слуха врагов")]
|
||
[Tooltip("Радиус, в котором мутанты услышат падение предмета")]
|
||
public float soundRadius = 15f;
|
||
|
||
private void OnCollisionEnter(Collision collision)
|
||
{
|
||
float impactForce = collision.relativeVelocity.magnitude;
|
||
Debug.Log("УДАР! Сила: " + impactForce);
|
||
|
||
if (impactForce >= minImpactForce)
|
||
{
|
||
ContactPoint contact = collision.contacts[0];
|
||
|
||
// 1. ТВОЯ ЛОГИКА: Отрисовка света и волны через EchoTrigger
|
||
if (wavePrefab != null)
|
||
{
|
||
Instantiate(wavePrefab, contact.point, Quaternion.identity);
|
||
}
|
||
|
||
if (EchoTrigger.Instance != null)
|
||
{
|
||
// Вычисляем интенсивность и радиус волны в зависимости от силы удара
|
||
float intensity = Mathf.Clamp(impactForce / 5f, 0.5f, 3.0f);
|
||
float radius = Mathf.Clamp(impactForce * 2f, 5f, 25f);
|
||
|
||
EchoTrigger.Instance.TriggerExternalWave(contact.point, radius, intensity);
|
||
}
|
||
|
||
// 2. НОВАЯ ЛОГИКА: Оповещение мутантов о шуме
|
||
Collider[] colliders = Physics.OverlapSphere(contact.point, soundRadius);
|
||
|
||
foreach (Collider hit in colliders)
|
||
{
|
||
BlindMutantAI mutant = hit.GetComponent<BlindMutantAI>();
|
||
|
||
if (mutant != null)
|
||
{
|
||
// Заставляем мутанта бежать в точку удара
|
||
mutant.HearSound(contact.point);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} |