/* * SPDX-License-Identifier: AGPL-3.0-or-later * Copyright (C) 2025 Sergej Görzen * This file is part of OmiLAXR. */ using System.Collections.Generic; using System.ComponentModel; using OmiLAXR.Components; using UnityEngine; namespace OmiLAXR.TrackingBehaviours.Learner { [AddComponentMenu("OmiLAXR / 3) Tracking Behaviours / Area Tracking Behaviour"), Description("Detects area/room enter and left events.")] public class AreaTrackingBehaviour : TrackingBehaviour { [Gesture("Area"), Action("Enter")] public TrackingBehaviourEvent OnEntered = new TrackingBehaviourEvent(); [Gesture("Area"), Action("Leave")] public TrackingBehaviourEvent OnLeft = new TrackingBehaviourEvent(); private List _areas = new List(); public Transform playerTransform; protected override void AfterFilteredObjects(Area[] areas) { if (!playerTransform) playerTransform = Camera.main!.transform; foreach (var area in areas) { if (_areas.Contains(area)) continue; area.OnEnter += (t, a, p) => { OnEntered.Invoke(this, a, p); }; area.OnLeave += (t, a, p) => { OnLeft.Invoke(this, a, p); }; _areas.Add(area); } } private void FixedUpdate() { if (playerTransform == null) return; // If you teleported stuff this frame, sync before querying: foreach (var t in _areas) { t.DoCollisionCheck(playerTransform); } } } }