/// <summary>
        /// Instead of immediately triggering the event, queues it for next frame.
        /// </summary>
        /// <param name="source">The controller triggering the event.</param>
        /// <param name="hash">The event hash to trigger.</param>
        /// <param name="data">The event parameter (if available).</param>
        internal static void TriggerAndQueue(KAnimControllerBase source, int hash,
                                             object data)
        {
            var inst = Instance;

            if (inst == null || source.overrideAnimFiles.Count > 0)
            {
                source.gameObject.Trigger(hash, data);
                if (source.destroyOnAnimComplete)
                {
                    source.DestroySelf();
                }
            }
            else
            {
                inst.Queue(source, hash, data);
            }
        }