improve portal collider to prevent unwanted teleportation
This commit is contained in:
42
Assets/Portal/Runtime/PortalCollider.cs
Normal file
42
Assets/Portal/Runtime/PortalCollider.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
using EscapeRoomEngine.Engine.Runtime.Utilities;
|
||||
using NaughtyAttributes;
|
||||
using UnityEngine;
|
||||
|
||||
namespace EscapeRoomEngine.Portal.Runtime
|
||||
{
|
||||
[RequireComponent(typeof(Collider))]
|
||||
public class PortalCollider : MonoBehaviour
|
||||
{
|
||||
[BoxGroup("Internal")] [SerializeField] private Portal portal;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// check whether the collider is set up correctly
|
||||
if (!GetComponent<Collider>().isTrigger) throw new EngineException("Collider must be a trigger.");
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
if (portal.Connected)
|
||||
{
|
||||
var portalDriver = other.GetComponent<PortalDriver>();
|
||||
if (portalDriver && !portal.closePortalDrivers.Contains(portalDriver))
|
||||
{
|
||||
portal.StartTrackingDriver(portalDriver, portal.CalculateSide(portalDriver.transform));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerExit(Collider other)
|
||||
{
|
||||
if (portal.Connected)
|
||||
{
|
||||
var portalDriver = other.GetComponent<PortalDriver>();
|
||||
if (portalDriver)
|
||||
{
|
||||
portal.StopTrackingDriver(portalDriver);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user