From e8366cd84a0f632a5bcd1413d79a687b0ab9210a Mon Sep 17 00:00:00 2001 From: bd_ Date: Sat, 4 Mar 2023 14:41:01 +0900 Subject: [PATCH] improvements to error reporting --- .../Editor/AvatarProcessor.cs | 6 ++-- .../Editor/Localization/en.json | 4 ++- .../Editor/Localization/ja.json | 4 ++- .../Menu/ActionProcessing/ActionGenerator.cs | 34 +++++++++++++++++-- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/Packages/nadena.dev.modular-avatar/Editor/AvatarProcessor.cs b/Packages/nadena.dev.modular-avatar/Editor/AvatarProcessor.cs index e5cde52b..b85c8ec5 100644 --- a/Packages/nadena.dev.modular-avatar/Editor/AvatarProcessor.cs +++ b/Packages/nadena.dev.modular-avatar/Editor/AvatarProcessor.cs @@ -247,8 +247,6 @@ namespace nadena.dev.modular_avatar.core.editor ClonedMenuMappings.Clear(); - ErrorReportUI.MaybeOpenErrorReportUI(); - AssetDatabase.SaveAssets(); Resources.UnloadUnusedAssets(); @@ -259,6 +257,10 @@ namespace nadena.dev.modular_avatar.core.editor BuildReport.LogException(e); throw; } + finally + { + ErrorReportUI.MaybeOpenErrorReportUI(); + } if (!BuildReport.CurrentReport.CurrentAvatar.successful) { diff --git a/Packages/nadena.dev.modular-avatar/Editor/Localization/en.json b/Packages/nadena.dev.modular-avatar/Editor/Localization/en.json index 95b406c7..36dfedc7 100644 --- a/Packages/nadena.dev.modular-avatar/Editor/Localization/en.json +++ b/Packages/nadena.dev.modular-avatar/Editor/Localization/en.json @@ -116,5 +116,7 @@ "control_group.foldout.menu_items": "Bound menu items", "menuitem.prop.control_group": "Control Group", "menuitem.prop.control_group.tooltip": "Only one toggle in a given group can be selected at the same time", - "menuitem.prop.is_default": "Is Group Default" + "menuitem.prop.is_default": "Is Group Default", + "animation_gen.duplicate_binding": "Controls from different control groups are trying to animate the same parameter. Parameter: {0}", + "animation_gen.multiple_defaults": "Multiple default menu items were found in the same control group." } \ No newline at end of file diff --git a/Packages/nadena.dev.modular-avatar/Editor/Localization/ja.json b/Packages/nadena.dev.modular-avatar/Editor/Localization/ja.json index d91bc6ea..c0d33b40 100644 --- a/Packages/nadena.dev.modular-avatar/Editor/Localization/ja.json +++ b/Packages/nadena.dev.modular-avatar/Editor/Localization/ja.json @@ -113,5 +113,7 @@ "control_group.foldout.menu_items": "関連付けされたメニューアイテム", "menuitem.prop.control_group": "コントロールグループ", "menuitem.prop.control_group.tooltip": "同じグループ内では、一つのトグルしか起動できません", - "menuitem.prop.is_default": "グループの初期設定にする" + "menuitem.prop.is_default": "グループの初期設定にする", + "animation_gen.duplicate_binding": "別々のコントロールグループから、同じパラメーターが操作されています。パラメーター:{0}", + "animation_gen.multiple_defaults": "同じコントロールグループに初期設定に指定されたメニューアイテムが複数あります。" } diff --git a/Packages/nadena.dev.modular-avatar/Editor/Menu/ActionProcessing/ActionGenerator.cs b/Packages/nadena.dev.modular-avatar/Editor/Menu/ActionProcessing/ActionGenerator.cs index bbc8afe9..ec2d3ea2 100644 --- a/Packages/nadena.dev.modular-avatar/Editor/Menu/ActionProcessing/ActionGenerator.cs +++ b/Packages/nadena.dev.modular-avatar/Editor/Menu/ActionProcessing/ActionGenerator.cs @@ -231,6 +231,8 @@ namespace nadena.dev.modular_avatar.core.editor group.Add(item); } + Dictionary bindings = new Dictionary(); + int paramIndex = 0; foreach (var kvp in groupedItems) { @@ -275,7 +277,7 @@ namespace nadena.dev.modular_avatar.core.editor List children = new List(); - List motions = GenerateMotions(group, out var inactiveMotion); + List motions = GenerateMotions(group, bindings, out var inactiveMotion); if (!hasDefault) { @@ -350,8 +352,13 @@ namespace nadena.dev.modular_avatar.core.editor } } - private List GenerateMotions(List items, out Motion inactiveMotion) + private List GenerateMotions( + List items, + Dictionary bindings, + out Motion inactiveMotion) { + Dictionary newBindings = new Dictionary(); + Dictionary inactiveCurves = new Dictionary(); @@ -405,6 +412,29 @@ namespace nadena.dev.modular_avatar.core.editor var clip = CurvesToMotion(activeCurves); clip.name = groupName + " (" + item.gameObject.name + ")"; motions.Add(clip); + + foreach (var binding in activeCurves) + { + if (!newBindings.ContainsKey(binding.Key)) + { + newBindings.Add(binding.Key, binding.Value.Item1); + } + } + } + + foreach (var binding in newBindings) + { + if (bindings.ContainsKey(binding.Key)) + { + BuildReport.LogFatal("animation_gen.duplicate_binding", new object[] + { + binding.Key + }, binding.Value, bindings[binding.Key]); + } + else + { + bindings.Add(binding.Key, binding.Value); + } } return motions;