Exemplo n.º 1
0
    public override IClonable Clone()
    {
        DATA_AnimStateSynchronizer_Trigger newData = base.Clone() as DATA_AnimStateSynchronizer_Trigger;

        newData.AnimatorParameterName = AnimatorParameterName;
        newData.AnimationKeyEventData = AnimationKeyEventData;
        return(newData);
    }
Exemplo n.º 2
0
    // Usefull to sync ablity animation!
    public bool TrySyncAnimState(DATA_AnimStateSynchronizer assync, bool value = false)
    {
        // Way A: Try get the anim synchronizer as trigger.
        DATA_AnimStateSynchronizer_Trigger tmp = assync as DATA_AnimStateSynchronizer_Trigger;

        if (tmp)
        {
            // Step A.1: Check if there is the method to procedurally invoke the parameter triggering for this anim sync.
            if (!RuntimeAnimatorSynchronizerEvents.ContainsKey(assync))
            {
                // If not, create the lambda and store it in a map using the anim sync as key.
                RuntimeAnimatorSynchronizerEvents.Add(tmp, () => { tmp.AnimatorParameterName.Trigger(OwnAnimator); });
            }

            // Step A.2: Bind delegate "Response" of the anim synchronizer to the wanted event (which may be raised from the animation clip).
            BindRuntimeAnimSyncResponse(assync);

            AnimatorClipInfo[] a = OwnAnimator.GetNextAnimatorClipInfo(0);
            for (int i = 0; i < a.Length; ++i)
            {
                Verbose(VerboseMask.Log, "Current clip BEFORE invoke:" + a[i].clip.name);
            }
            // Step A.3: Trigger the parameter.
            RuntimeAnimatorSynchronizerEvents[tmp].Invoke();

            a = OwnAnimator.GetNextAnimatorClipInfo(0);
            for (int i = 0; i < a.Length; ++i)
            {
                Verbose(VerboseMask.Log, "Current clip AFTER invoke:" + a[i].clip.name);
            }
            return(true);
        }

        // Way B: Same as way A for boolean parameters.
        DATA_AnimStateSynchronizer_Bool tmp2 = assync as DATA_AnimStateSynchronizer_Bool;

        if (tmp2)
        {
            if (!RuntimeAnimatorSynchronizerEvents.ContainsKey(assync))
            {
                RuntimeAnimatorSynchronizerEvents.Add(tmp2, () => { tmp2.AnimatorParameterName.SetData(value, OwnAnimator); });
            }
            Verbose(VerboseMask.Control, "Current clip BEFORE invoke:" + OwnAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.name);
            BindRuntimeAnimSyncResponse(assync);
            RuntimeAnimatorSynchronizerEvents[tmp2].Invoke();
            Verbose(VerboseMask.Control, "Current clip AFTER invoke:" + OwnAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.name);
            return(true);
        }

        return(false);
    }