public bool Create(GameObject o) { if (!this.CreateCalcInfo(o)) { return(false); } this.blendTimeCtrl = new TimeProgressCtrl(); return(true); }
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); }
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); }
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; } }
public bool Init(List <MorphingTargetInfo> MorphTargetList) { this.ChangeRefTargetMesh(MorphTargetList); this.blendTimeCtrl = new TimeProgressCtrl(); return(true); }