private static void Activate() { SavedAvatarMod.Set(avatarName, allModInfoListView[avatarName]); foreach (Transform child in GetModsObject().transform) { var modObject = child.gameObject; ActivateMod(modObject); } allModInfoListViewOld[avatarName] = DeepClone(allModInfoListView[avatarName]); }
private void UpdateActiveObject() { if (Selection.activeGameObject == null || !Selection.activeGameObject.activeInHierarchy) { avatarSelected = false; return; } avatarTransform = Selection.activeGameObject.transform.root; avatarObject = avatarTransform.gameObject; if (IsHumanoid(avatarObject)) { avatarName = avatarObject.GetComponent <Animator>().avatar.name; if (!allModInfoListView.ContainsKey(avatarName)) { if (SavedAvatarMod.Get(avatarName) != null) { allModInfoListView.Add(avatarName, SavedAvatarMod.Get(avatarName)); } else { allModInfoListView.Add(avatarName, new Dictionary <int, ModInfo>()); } } if (!allModInfoListViewOld.ContainsKey(avatarName)) { if (SavedAvatarMod.Get(avatarName) != null) { allModInfoListViewOld.Add(avatarName, SavedAvatarMod.Get(avatarName)); } else { allModInfoListViewOld.Add(avatarName, new Dictionary <int, ModInfo>()); } } avatarSelected = true; } else { avatarSelected = false; } Repaint(); }
private static void ActivateMod(GameObject go) { ModInfo mi = SavedAvatarMod.Get(avatarName)[go.GetInstanceID()]; ModInfo miOld = null; if (allModInfoListViewOld.ContainsKey(avatarName) && allModInfoListViewOld[avatarName].ContainsKey(go.GetInstanceID())) { miOld = allModInfoListViewOld[avatarName][go.GetInstanceID()]; } if (!mi.isEnabled) { return; } if (mi.isHumanoid) { var armature = GetArmatureObject(go); var bones = GetAllChildren(armature); bones.Add(armature); foreach (var bone in bones) { var constraint = bone.GetComponent <ParentConstraint>(); if (constraint == null) { constraint = bone.AddComponent <ParentConstraint>(); } var rigName = GetRigName(go, bone.name); if (rigName == null || rigName == "") { continue; } var parentObject = GetBoneObject(avatarObject, rigName); constraint.constraintActive = true; ConstraintSource cs = default(ConstraintSource); cs.weight = 1.0f; cs.sourceTransform = parentObject.transform; for (int i = 0; i < constraint.sourceCount; i++) { ConstraintSource cs2 = constraint.GetSource(i); if (cs2.sourceTransform == cs.sourceTransform && cs2.weight == cs.weight) { constraint.RemoveSource(i); break; } } constraint.AddSource(cs); } } else { var constraint = go.GetComponent <ParentConstraint>(); if (constraint == null) { constraint = go.AddComponent <ParentConstraint>(); } if (mi.genericSourceObjectID != null) { var parentObject = (GameObject)EditorUtility.InstanceIDToObject((int)mi.genericSourceObjectID); GameObject parentObjectOld = null; if (miOld != null) { parentObjectOld = (GameObject)EditorUtility.InstanceIDToObject((int)miOld.genericSourceObjectID); } constraint.constraintActive = true; ConstraintSource cs = default(ConstraintSource); cs.weight = 1.0f; cs.sourceTransform = parentObject.transform; if (parentObjectOld != null) { ConstraintSource cs1 = default(ConstraintSource); cs1.weight = 1.0f; cs1.sourceTransform = parentObjectOld.transform; for (int i = 0; i < constraint.sourceCount; i++) { ConstraintSource cs2 = constraint.GetSource(i); if (cs2.sourceTransform == cs1.sourceTransform && cs2.weight == cs1.weight) { constraint.RemoveSource(i); break; } } } constraint.AddSource(cs); } } }