using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Beyond { [RequireComponent(typeof(BoxCollider))] public class BoxVolume : StreamingAsset { // DODANE: Licznik koliderów wewnątrz woluminu private int enteredCollidersCount = 0; protected override void Draw() { if (collider == null) { collider = GetComponent(); } BoxCollider boxCollider = collider.GetComponent(); if (boxCollider) { Vector3 size = new Vector3(boxCollider.size.x * transform.localScale.x, boxCollider.size.y * transform.localScale.y, boxCollider.size.z * transform.localScale.z); GizmosExtensions.DrawCube(transform.position + boxCollider.center, size, transform.rotation); } } protected override void DrawWire() { if (collider == null) { collider = GetComponent(); } BoxCollider boxCollider = collider.GetComponent(); if (boxCollider) { Vector3 size = new Vector3(boxCollider.size.x * transform.localScale.x, boxCollider.size.y * transform.localScale.y, boxCollider.size.z * transform.localScale.z); GizmosExtensions.DrawWireCube(transform.position + boxCollider.center, size, transform.rotation); } } private void CancelDeactivationCoroutine() { if (deactivation != null) { Debug.Log("StopCoroutine deactivation"); StopCoroutine(deactivation); deactivation = null; } } protected override void OnTriggerEnter(Collider other) { // Sprawdzenie warunków kolizji if (collisionLayer == 1 << other.gameObject.layer && tagMask.IsInTagMask(other.tag)) { enteredCollidersCount++; // Aktywacja następuje tylko przy pierwszym wejściu (licznik = 1) if (enteredCollidersCount == 1) { CancelDeactivationCoroutine(); SetActive(true); } } } protected override void OnTriggerExit(Collider other) { // Sprawdzenie warunków kolizji if (collisionLayer == 1 << other.gameObject.layer && tagMask.IsInTagMask(other.tag)) { enteredCollidersCount--; // Zabezpieczenie na wypadek błędu fizyki if (enteredCollidersCount < 0) enteredCollidersCount = 0; // Dezaktywacja następuje tylko, gdy ostatni obiekt opuści wolumin (licznik = 0) if (enteredCollidersCount == 0) { SetActive(false); } } } } }