Files
2026-03-04 10:03:45 +08:00

71 lines
1.4 KiB
C#

using System;
using FS_Atmo;
using UnityEngine;
public class DoorTrigger : MonoBehaviour
{
private SphereCollider trigger;
private BoxCollider boxCollider;
private SimpleOpenClose simpleOpenClose;
private bool playerInTrigger;
public static event Action<DoorTrigger> OnDoorOpen;
public static event Action<DoorTrigger> OnDoorClose;
private void Start()
{
trigger = GetComponent<SphereCollider>();
if (trigger == null)
{
Debug.LogWarning("SphereCollider not found on " + base.gameObject.name);
}
else
{
trigger.isTrigger = true;
}
boxCollider = GetComponent<BoxCollider>();
simpleOpenClose = GetComponent<SimpleOpenClose>();
if (simpleOpenClose == null)
{
Debug.LogError("SimpleOpenClose component not found on " + base.gameObject.name);
}
}
private void Update()
{
if (playerInTrigger)
{
if (!simpleOpenClose.objectOpen)
{
simpleOpenClose.BroadcastMessage("ObjectClicked");
DoorTrigger.OnDoorOpen?.Invoke(this);
}
}
else if (simpleOpenClose.objectOpen)
{
simpleOpenClose.BroadcastMessage("ObjectClicked");
DoorTrigger.OnDoorClose?.Invoke(this);
}
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.layer == LayerMask.NameToLayer("Player"))
{
playerInTrigger = true;
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.layer == LayerMask.NameToLayer("Player"))
{
playerInTrigger = false;
}
}
}