using UnityEngine; namespace Beyond { public class DestinationPoint : MonoBehaviour { [Header("References")] [SerializeField] private DestinationPoint nextPoint; // Nast�pny punkt docelowy [SerializeField] private Collider triggerCollider; // Collider, kt�ry wyzwala zmian� punktu [SerializeField] private AudioClip destinationSound; // D�wi�k do odtworzenia [SerializeField] private AudioSource audioSource; // �r�d�o d�wi�ku [Header("Settings")] [SerializeField] private bool activateOnStart = true; [SerializeField] private bool switchOnParentDeactivation = false; // Czy prze��cza� na nast�pny punkt, gdy obiekt nadrz�dny jest dezaktywowany private bool isActive = false; // Czy punkt jest aktywny private bool isDestroyed = false; private bool wasParentActive = true; //private void OnEnable() //{ // Upewnij si�, �e widoczno�� jest poprawnie ustawiona zanim wszystko si� zainicjalizuje // UpdateVisibility(); //} private void Awake() { // Upewnij si�, �e collider jest ustawiony jako trigger if (triggerCollider != null) { triggerCollider.isTrigger = true; } // Upewnij si�, �e audioSource jest przypisany if (audioSource == null) { audioSource = gameObject.AddComponent(); } // Sprawd�, czy obiekt nadrz�dny jest aktywny na pocz�tku if (switchOnParentDeactivation && transform.parent != null) { wasParentActive = transform.parent.gameObject.activeInHierarchy; } } /* private void Update() { // Sprawd�, czy obiekt nadrz�dny zmieni� sw�j stan if (switchOnParentDeactivation && transform.parent != null) { bool isParentActive = transform.parent.gameObject.activeInHierarchy; if (wasParentActive && !isParentActive) { // Obiekt nadrz�dny zosta� dezaktywowany HandleParentDeactivated(); } wasParentActive = isParentActive; } } */ private void OnTriggerEnter(Collider other) { // Zak�adamy, �e gracz ma tag "Player" if (isActive && other.CompareTag("Player")) { // Odtw�rz d�wi�k, je�li jest przypisany if (destinationSound != null && audioSource != null) { audioSource.PlayOneShot(destinationSound); } // Prze��cz na nast�pny punkt //DestinationTargetManager.Instance.SwitchToNextPoint(nextPoint); // Dezaktywuj ten punkt Deactivate(); } } private void OnEnable() { // Aktywuj punkt, gdy skrypt jest w��czony if (activateOnStart) Activate(); } private void OnDisable() { // Dezaktywuj punkt, gdy skrypt jest wy��czony Deactivate(); } /* // Funkcja sprawdzaj�ca, czy obiekt nadrz�dny jest aktywny i czy wska�nik powinien by� widoczny private void UpdateVisibility() { if (isActive && IsParentActive() && DestinationTargetManager.Instance != null) { DestinationTargetManager.Instance.SetTargetVisibility(true); } else if (DestinationTargetManager.Instance != null) { DestinationTargetManager.Instance.SetTargetVisibility(false); } } // Sprawdza, czy obiekt nadrz�dny jest aktywny private bool IsParentActive() { return transform.parent == null || transform.parent.gameObject.activeInHierarchy; } */ public void Activate() { if (!isActive) { isActive = true; if (triggerCollider != null) { triggerCollider.enabled = true; } Compass.Instance.AddQuestMarker(transform, null); } } public void Deactivate() { if (isActive) { isActive = false; if (triggerCollider != null) { triggerCollider.enabled = false; } Compass.Instance.RemoveQuestMarker(transform); if (nextPoint) { nextPoint.Activate(); } // Ukryj wska�nik, gdy skrypt jest wy��czony //if (DestinationTargetManager.Instance != null) //{ // DestinationTargetManager.Instance.SetTargetVisibility(false); // DestinationTargetManager.Instance.SwitchToNextPoint(nextPoint); //} } } /* // Funkcja wywo�ywana, gdy obiekt nadrz�dny zostaje dezaktywowany private void HandleParentDeactivated() { if (switchOnParentDeactivation && !isDestroyed) { isDestroyed = true; // Prze��cz na nast�pny punkt, je�li obiekt nadrz�dny zosta� dezaktywowany DestinationTargetManager.Instance.SwitchToNextPoint(nextPoint); // Dezaktywuj ten punkt Deactivate(); } } */ } }