IEnumerable <SubAssetKey> EnumerateExpressinKeys(UniGLTF.Extensions.VRMC_vrm.Expressions expressions) { if (expressions?.Preset?.Happy != null) { yield return(ExpressionKey.Happy.SubAssetKey); } if (expressions?.Preset?.Angry != null) { yield return(ExpressionKey.Angry.SubAssetKey); } if (expressions?.Preset?.Sad != null) { yield return(ExpressionKey.Sad.SubAssetKey); } if (expressions?.Preset?.Relaxed != null) { yield return(ExpressionKey.Relaxed.SubAssetKey); } if (expressions?.Preset?.Surprised != null) { yield return(ExpressionKey.Surprised.SubAssetKey); } if (expressions?.Preset?.Aa != null) { yield return(ExpressionKey.Aa.SubAssetKey); } if (expressions?.Preset?.Ih != null) { yield return(ExpressionKey.Ih.SubAssetKey); } if (expressions?.Preset?.Ou != null) { yield return(ExpressionKey.Ou.SubAssetKey); } if (expressions?.Preset?.Ee != null) { yield return(ExpressionKey.Ee.SubAssetKey); } if (expressions?.Preset?.Oh != null) { yield return(ExpressionKey.Oh.SubAssetKey); } if (expressions?.Preset?.Blink != null) { yield return(ExpressionKey.Blink.SubAssetKey); } if (expressions?.Preset?.BlinkLeft != null) { yield return(ExpressionKey.BlinkLeft.SubAssetKey); } if (expressions?.Preset?.BlinkRight != null) { yield return(ExpressionKey.BlinkRight.SubAssetKey); } if (expressions?.Preset?.LookUp != null) { yield return(ExpressionKey.LookUp.SubAssetKey); } if (expressions?.Preset?.LookDown != null) { yield return(ExpressionKey.LookDown.SubAssetKey); } if (expressions?.Preset?.LookLeft != null) { yield return(ExpressionKey.LookLeft.SubAssetKey); } if (expressions?.Preset?.LookRight != null) { yield return(ExpressionKey.LookRight.SubAssetKey); } foreach (var kv in expressions.Custom) { yield return(ExpressionKey.CreateCustom(kv.Key).SubAssetKey); } }
public static void Check(JsonNode vrm0, UniGLTF.Extensions.VRMC_vrm.Expressions vrm1, MigrationVrm.MeshIndexToNodeIndexFunc meshToNode) { foreach (var blendShape in vrm0["blendShapeGroups"].ArrayItems()) { var name = blendShape["presetName"].GetString().ToLower(); switch (name) { case "a": Check(name, blendShape, vrm1.Preset.Aa, meshToNode); break; case "i": Check(name, blendShape, vrm1.Preset.Ih, meshToNode); break; case "u": Check(name, blendShape, vrm1.Preset.Ou, meshToNode); break; case "e": Check(name, blendShape, vrm1.Preset.Ee, meshToNode); break; case "o": Check(name, blendShape, vrm1.Preset.Oh, meshToNode); break; case "blink": Check(name, blendShape, vrm1.Preset.Blink, meshToNode); break; case "joy": Check(name, blendShape, vrm1.Preset.Happy, meshToNode); break; case "angry": Check(name, blendShape, vrm1.Preset.Angry, meshToNode); break; case "sorrow": Check(name, blendShape, vrm1.Preset.Sad, meshToNode); break; case "fun": Check(name, blendShape, vrm1.Preset.Relaxed, meshToNode); break; case "lookup": Check(name, blendShape, vrm1.Preset.LookUp, meshToNode); break; case "lookdown": Check(name, blendShape, vrm1.Preset.LookDown, meshToNode); break; case "lookleft": Check(name, blendShape, vrm1.Preset.LookLeft, meshToNode); break; case "lookright": Check(name, blendShape, vrm1.Preset.LookRight, meshToNode); break; case "blink_l": Check(name, blendShape, vrm1.Preset.BlinkLeft, meshToNode); break; case "blink_r": Check(name, blendShape, vrm1.Preset.BlinkRight, meshToNode); break; case "neutral": Check(name, blendShape, vrm1.Preset.Neutral, meshToNode); break; default: { string found = default; foreach (var kv in vrm1.Custom) { if (kv.Key.ToLower() == name) { Check(name, blendShape, kv.Value, meshToNode); found = kv.Key; break; } } if (found == null) { throw new MigrationException(name, $"expression not migrated"); } break; } } } }