Example #1
0
        //播放perform 并返回一个唯一ID
        public int UF_Play(string pName, int pValue, string param)
        {
            if (m_PerformPkg == null)
            {
                Debugger.UF_Warn("AssetPerformAction Not been Load,Play Failed");
                return(0);
            }

            var perform = m_PerformPkg.UF_Get(pName);

            if (perform == null)
            {
                Debugger.UF_Warn(string.Format("Can not find perform[{0}] in AssetPerformAction", pName));
                return(0);
            }

            var node = PerformPlayNode.UF_Acquire();

            node.clip   = perform;
            node.pValue = pValue;
            node.param  = param;

            m_ListPerformPlay.Add(node);

            return(node.uid);
        }
Example #2
0
            public static PerformPlayNode UF_Acquire()
            {
                var node = s_PoolData.Pop();

                if (node == null)
                {
                    node = new PerformPlayNode();
                }
                node.uid = ++s_UidIdx;
                return(node);
            }
Example #3
0
 //执行动画事件
 private void UF_ExcutePerformActionClipEvent(PerformPlayNode perform, ClipEvent clipEvent)
 {
     if (clipEvent.rate > 0)
     {
         //根据概率设定是否触发
         if (Random.Range(1, 10000) > clipEvent.rate)
         {
             return;
         }
     }
     MessageSystem.UF_GetInstance().UF_Send(DefineEvent.E_PERFORM_ACTION_CLIP, perform.uid, perform.pValue, perform.param, clipEvent.name, clipEvent.param);
 }
Example #4
0
        public void UF_OnSyncUpdate()
        {
            tickTimes++;

            float           dtime    = GTime.RunDeltaTime;
            PerformPlayNode tempNode = null;

            for (int k = 0; k < m_ListPerformPlay.Count; k++)
            {
                tempNode = m_ListPerformPlay[k];
                if (tempNode == null || tempNode.clip == null)
                {
                    tempNode.UF_Release(); m_ListPerformPlay.RemoveAt(k); k--; continue;
                }


                tempNode.curTime += dtime;

                float progress = 1;

                if (tempNode.clip.length > 0)
                {
                    progress = tempNode.curTime / tempNode.clip.length;
                }

                //ClipEvent 必须为顺序列表,否则错乱
                for (int i = tempNode.playedIdx; i < tempNode.clip.clipEvents.Count; i++)
                {
                    if (progress >= tempNode.clip.clipEvents[i].trigger)
                    {
                        //do something event trigger
                        //播放索引提前
                        tempNode.playedIdx++;
                        UF_ExcutePerformActionClipEvent(tempNode, tempNode.clip.clipEvents[i]);
                    }
                }

                if (tempNode.curTime >= tempNode.clip.length)
                {
                    if (tempNode.clip.loop)
                    {
                        tempNode.playedIdx = 0;
                        tempNode.curTime   = 0;
                    }
                    else
                    {
                        tempNode.UF_Release(); m_ListPerformPlay.RemoveAt(k); k--; continue;
                    }
                }
            }
        }