Example #1
0
    public void DynamicBoneThread()
    {
        while (true)
        {
            DynamicBoneMT boneMT = null;

            //wait event
            bool bRet = hCalculateEvent.WaitOne();
            ++m_nCurFrame;

            if (bRet)
            {
                for (int i = 0; i < lstToCalculateID.Count; ++i)
                {
                    int nID = lstToCalculateID[i];

                    if (dictID2Bone.TryGetValue(nID, out boneMT))
                    {
                        boneMT.UpdateDynamicBones(fDeltaTime);
                    }
                }

                lock (objLock) {
                    lstToCalculateID.Clear();
                }
            }
            else
            {
            }

            ++m_nLastFrame;
        }
    }
Example #2
0
    public void InitBoneTransform(DynamicBone bone)
    {
        int nID = bone.GetInstanceID();

        DynamicBoneMT boneMT = null;

        if (!dictID2Bone.TryGetValue(nID, out boneMT))
        {
            Debug.LogFormat("{0} bone is not exist in DictId2Bone", bone.name);
            return;
        }

        if (IsLastFrameDone())
        {
            // set current frame data to boneMT
            lock (objLock) {
                if (!lstToCalculateID.Contains(nID))
                {
                    boneMT.InitTransform(bone);
                    lstToCalculateID.Add(nID);
                }
            }

            if (m_nCurFrame != 0)
            {
                boneMT.ApplyParticlesToTransforms(bone);
            }

            //通知线程开始计算
            if (lstToCalculateID.Count == dictID2Bone.Count)
            {
                hCalculateEvent.Set();
            }
        }
    }