using System; using System.Runtime.InteropServices; using Rive.Utils; namespace Rive { /// /// A view model instance property for trigger properties. /// public sealed class ViewModelInstanceTriggerProperty : ViewModelInstancePrimitiveProperty { internal ViewModelInstanceTriggerProperty(IntPtr instanceValuePtr, ViewModelInstance rootInstance) : base(instanceValuePtr, rootInstance) { } /// /// Raised when the trigger property is fired in the Rive graphic. /// public event Action OnTriggered { add => AddPropertyCallback(value, ref m_onTriggered); remove => RemovePropertyCallback(value, ref m_onTriggered); } private Action m_onTriggered; /// /// Fires the trigger /// public void Trigger() { ThrowIfOwnerDisposed(); if (InstancePropertyPtr == IntPtr.Zero) { DebugLogger.Instance.LogWarning("Trying to trigger a null trigger property."); return; } fireViewModelInstanceTrigger(InstancePropertyPtr); } [DllImport(NativeLibrary.name)] private static extern void fireViewModelInstanceTrigger(IntPtr instanceProperty); internal override void RaiseChangedEvent() { m_onTriggered?.Invoke(); } internal override void ClearAllCallbacks() { m_onTriggered = null; base.ClearAllCallbacks(); } internal override void ClearDelegatesOnly() { m_onTriggered = null; } } }