public static void Delete(ObjectInfo _info, bool _delKey = true) { // Check invalid harmony calls. if (!(_info is OICharInfo)) { return; } var dictionaryKey = _info.dicKey; if (dictionaryKey < 0 || !Singleton <Studio.Studio> .Instance.dicObjectCtrl.TryGetValue(dictionaryKey, out var ctrlInfo)) { return; } // Check valid character control from the object info. ChaControl chaControl = null; // ReSharper disable once ConvertIfStatementToSwitchStatement - it's shorter and easy to understand. if (ctrlInfo is OCICharFemale female) { chaControl = female.female; } else if (ctrlInfo is OCICharMale male) { chaControl = male.male; } // remove character control. if (chaControl != null) { SkinnedBones.CleanUpCache(chaControl); } }
private IEnumerator TryMerge(ChaControl _chaControl) { if (ReferenceEquals(_chaControl, null) || !SkinnedBones.TryGetSkinnedBones(_chaControl, out var dict)) { yield break; } meshRenderers.ForEach(smr => { smr.enabled = false; smr.rootBone = _chaControl.objBodyBone.transform; StartCoroutine(MergeCoroutine(smr, dict)); }); }
private IEnumerator TryMerge() { var startTime = Time.time; yield return(new WaitUntil(() => _chaControl != null || Time.time - startTime > 100)); // TryGetSkinnedBones includes dictionary check and chaControl checks. if (ReferenceEquals(_chaControl, null) || !SkinnedBones.TryGetSkinnedBones(_chaControl, out var dict)) { yield break; } meshRenderers.ForEach(smr => { smr.enabled = false; smr.rootBone = _chaControl.objBodyBone.transform; StartCoroutine(MergeCoroutine(smr, dict)); }); }