Exemplo n.º 1
0
 public bool Create(GameObject o)
 {
     if (!this.CreateCalcInfo(o))
     {
         return(false);
     }
     this.blendTimeCtrl = new TimeProgressCtrl();
     return(true);
 }
Exemplo n.º 2
0
 public bool Init()
 {
     this.blendTimeCtrl = new TimeProgressCtrl(0.15f);
     this.blendTimeCtrl.End();
     for (int index = 0; index < this.FBSTarget.Length; ++index)
     {
         this.FBSTarget[index].SetSkinnedMeshRenderer();
     }
     this.dictBackFace.Clear();
     this.dictBackFace[0] = 1f;
     this.dictNowFace.Clear();
     this.dictNowFace[0] = 1f;
     return(true);
 }
Exemplo n.º 3
0
 public bool Init()
 {
     blendTimeCtrl = new TimeProgressCtrl(0.15f);
     blendTimeCtrl.End();
     for (int i = 0; i < FBSTarget.Length; i++)
     {
         FBSTarget[i].SetSkinnedMeshRenderer();
     }
     dictBackFace.Clear();
     dictBackFace[0] = 1f;
     dictNowFace.Clear();
     dictNowFace[0] = 1f;
     return(true);
 }
Exemplo n.º 4
0
            public static bool CalculateBlendShape(FBSBase __instance, float ___correctOpenMax, float ___openRate,
                TimeProgressCtrl ___blendTimeCtrl, Dictionary<int, float> ___dictBackFace,
                Dictionary<int, float> ___dictNowFace)
            {
                if (__instance.FBSTarget.Length == 0) return false;

                var openMax = ___correctOpenMax >= 0f ? ___correctOpenMax : __instance.OpenMax;
                var lerpOpenRate = Mathf.Lerp(__instance.OpenMin, openMax, ___openRate);
                if (0f <= __instance.FixedRate) lerpOpenRate = __instance.FixedRate;

                var rate = 0f;
                if (___blendTimeCtrl != null) rate = ___blendTimeCtrl.Calculate();

                retry:
                try
                {
                    for (var index = 0; index < __instance.FBSTarget.Length; index++)
                    {
                        for (var i = 0; i < _blendIdCache.Count; i++)
                        {
                            _blendIdCache[i] = false;
                            _blendValueCache[i] = 0f;
                        }

                        var targetInfo = __instance.FBSTarget[index];
                        var skinnedMeshRenderer = targetInfo.GetSkinnedMeshRenderer();

                        var percent = (int)Mathf.Clamp(lerpOpenRate * 100f, 0f, 100f);

                        for (var j = 0; j < targetInfo.PtnSet.Length; j++)
                        {
                            var ptnSet = targetInfo.PtnSet[j];
                            var resultClose = 0f;
                            var resultOpen = 0f;

                            if (rate != 1f)
                            {
                                if (___dictBackFace.TryGetValue(j, out var valueBack))
                                {
                                    resultClose += valueBack * (100 - percent) * (1f - rate);
                                    resultOpen += valueBack * percent * (1f - rate);
                                }
                            }

                            if (___dictNowFace.TryGetValue(j, out var valueNow))
                            {
                                resultClose += valueNow * (100 - percent) * rate;
                                resultOpen += valueNow * percent * rate;
                            }

                            if (ptnSet.Close >= 0)
                            {
                                _blendIdCache[ptnSet.Close] = true;
                                _blendValueCache[ptnSet.Close] += resultClose;
                            }
                            if (ptnSet.Open >= 0)
                            {
                                _blendIdCache[ptnSet.Open] = true;
                                _blendValueCache[ptnSet.Open] += resultOpen;
                            }
                        }

                        for (var i = 0; i < _blendIdCache.Count; i++)
                        {
                            if (_blendIdCache[i])
                            {
                                skinnedMeshRenderer.SetBlendShapeWeight(i, _blendValueCache[i]);
                            }
                        }
                    }

                    return false;
                }
                catch (ArgumentOutOfRangeException)
                {
                    UnityEngine.Debug.Log("Increasing blend ID cache size");
                    _blendIdCache.AddRange(Enumerable.Repeat(false, 50));
                    _blendValueCache.AddRange(Enumerable.Repeat(0f, 50));
                    goto retry;
                }
            }
Exemplo n.º 5
0
 public bool Init(List <MorphingTargetInfo> MorphTargetList)
 {
     this.ChangeRefTargetMesh(MorphTargetList);
     this.blendTimeCtrl = new TimeProgressCtrl();
     return(true);
 }