71 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|