using System.ComponentModel; using UnityEngine; namespace OmiLAXR.TrackingBehaviours.System { [AddComponentMenu("OmiLAXR / 3) Tracking Behaviours / Game Objects State Tracking Behaviour")] [Description("Tracks if a game object state is changed (e.g. is destroyed).")] public class GameObjectStateTrackingBehaviour : TrackingBehaviour { public bool watchOnDestroyed = true; public bool watchOnEnabled = true; public bool watchOnDisabled = true; public TrackingBehaviourEvent OnDestroyedGameObject = new TrackingBehaviourEvent(); public TrackingBehaviourEvent OnEnabledGameObject = new TrackingBehaviourEvent(); public TrackingBehaviourEvent OnDisabledGameObject = new TrackingBehaviourEvent(); protected override void AfterFilteredObjects(GameObjectStateWatcher[] gameObjects) { foreach (var go in gameObjects) { if (watchOnDestroyed) { OnDestroyedGameObject.Bind(go.OnDestroyed, g => { OnDestroyedGameObject.Invoke(this, go, g); }); } if (watchOnEnabled) { OnEnabledGameObject.Bind(go.OnEnabled, g => { OnEnabledGameObject.Invoke(this, go, g); }); } if (watchOnDisabled) { OnDisabledGameObject.Bind(go.OnDisabled, g => { OnDisabledGameObject.Invoke(this, go, g); }); } } } } }