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 9db4a408..a20c7073 100644 --- a/Packages/nadena.dev.modular-avatar/Editor/Menu/ActionProcessing/ActionGenerator.cs +++ b/Packages/nadena.dev.modular-avatar/Editor/Menu/ActionProcessing/ActionGenerator.cs @@ -110,7 +110,7 @@ namespace nadena.dev.modular_avatar.core.editor AnimationClip clip = new AnimationClip(); foreach (var renderer in avatar.GetComponentsInChildren()) { - if (!renderer.sharedMesh) continue; + if (!renderer.sharedMesh) continue; int nShapes = renderer.sharedMesh.blendShapeCount; for (int i = 0; i < nShapes; i++) { @@ -222,8 +222,8 @@ namespace nadena.dev.modular_avatar.core.editor expParams.parameters?.ToList() ?? new List(); List blendTrees = new List(); - Dictionary> groupedItems = - new Dictionary>(); + Dictionary> groupedItems = + new Dictionary>(); foreach (var item in items) { @@ -274,7 +274,21 @@ namespace nadena.dev.modular_avatar.core.editor group.Insert(0, null); } - bool isSaved = kvp.Key.isSavedProp, isSynced = kvp.Key.isSyncedProp; + bool isSaved, isSynced; + if (kvp.Key is ControlGroup cg_) + { + isSaved = cg_.isSaved; + isSynced = cg_.isSynced; + } + else if (kvp.Key is ModularAvatarMenuItem menuItem) + { + isSaved = menuItem.isSaved; + isSynced = menuItem.isSynced; + } + else + { + throw new Exception("Unknown type " + kvp.Key.GetType()); + } expParameters.Add(new VRCExpressionParameters.Parameter() { @@ -341,7 +355,7 @@ namespace nadena.dev.modular_avatar.core.editor void MergeCurves( IDictionary curves, - ActionController controller, + Component controller, Func> getCurves, bool ignoreDuplicates ) @@ -382,7 +396,7 @@ namespace nadena.dev.modular_avatar.core.editor private List GenerateMotions( List items, Dictionary bindings, - ActionController controller + Component controller ) { Dictionary newBindings = new Dictionary(); @@ -397,7 +411,7 @@ namespace nadena.dev.modular_avatar.core.editor foreach (var item in items) { - MergeCurves(inactiveCurves, item, a => a.GetInactiveCurves(false), true); + MergeCurves(inactiveCurves, item, a => a.GetInactiveCurves(), true); } var inactiveMotion = CurvesToMotion(inactiveCurves); diff --git a/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/ActionToggleObject.cs b/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/ActionToggleObject.cs index 7a465902..ca228d3d 100644 --- a/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/ActionToggleObject.cs +++ b/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/ActionToggleObject.cs @@ -39,7 +39,7 @@ namespace nadena.dev.modular_avatar.core ).ToImmutableDictionary(); } - public ImmutableDictionary GetInactiveCurves(bool isDefault) + public ImmutableDictionary GetInactiveCurves() { var builder = ImmutableDictionary.Empty.ToBuilder(); @@ -49,19 +49,9 @@ namespace nadena.dev.modular_avatar.core if (target == null) continue; - bool active; - if (isDefault) - { - active = !obj.Active; // inactive state is the opposite of the default state - } - else - { - active = target.activeSelf; // inactive state is the current state - } - builder.Add( new MenuCurveBinding(target, typeof(GameObject), "m_IsActive"), - AnimationCurve.Constant(0, 1, active ? 1 : 0) + AnimationCurve.Constant(0, 1, 0) ); } diff --git a/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/ControlGroup.cs b/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/ControlGroup.cs index 496773c8..0a5d7215 100644 --- a/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/ControlGroup.cs +++ b/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/ControlGroup.cs @@ -3,14 +3,11 @@ namespace nadena.dev.modular_avatar.core { [AddComponentMenu("Modular Avatar/MA Control Group")] - public class ControlGroup : ActionController + public class ControlGroup : AvatarTagComponent { public bool isSynced = true; public bool isSaved = true; public ModularAvatarMenuItem defaultValue; - - internal override bool isSyncedProp => isSynced; - internal override bool isSavedProp => isSaved; } } \ No newline at end of file diff --git a/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/MenuAction.cs b/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/MenuAction.cs index 156b1400..a79ac3ac 100644 --- a/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/MenuAction.cs +++ b/Packages/nadena.dev.modular-avatar/Runtime/Menu/Actions/MenuAction.cs @@ -24,10 +24,11 @@ namespace nadena.dev.modular_avatar.core /// /// Returns the curves applied when this action is inactive (and no other actions override). + /// In general, this should depend only on the path and state of the target objects, and not on the + /// configuration of the action itself (apart from target selection). /// - /// True if this action is part of the default toggle option. /// - ImmutableDictionary GetInactiveCurves(bool isDefault); + ImmutableDictionary GetInactiveCurves(); } public enum TargetParameter