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;
}
}
}