From a93b003129bac6fdefef0289a6caf2ee5afe153b Mon Sep 17 00:00:00 2001 From: nekobako Date: Sun, 15 Sep 2024 11:43:25 +0900 Subject: [PATCH] fix: incorrect parameter type detemination for float values --- .../ParamsUsage/MAParametersIntrospection.cs | 11 +---- .../ReactiveObjects/ParameterAssignerPass.cs | 5 +- Runtime/ModularAvatarMenuItem.cs | 46 +++++++++++++++++++ 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/Editor/ParamsUsage/MAParametersIntrospection.cs b/Editor/ParamsUsage/MAParametersIntrospection.cs index 2388d178..6ff9f720 100644 --- a/Editor/ParamsUsage/MAParametersIntrospection.cs +++ b/Editor/ParamsUsage/MAParametersIntrospection.cs @@ -34,19 +34,10 @@ namespace nadena.dev.modular_avatar.core.editor hidden = true; } - var type = AnimatorControllerParameterType.Bool; - - if (type != AnimatorControllerParameterType.Float && - (_component.Control.value > 1.01 || _component.Control.value < -0.01)) - type = AnimatorControllerParameterType.Int; - - if (Mathf.Abs(Mathf.Round(_component.Control.value) - _component.Control.value) > 0.01f) - type = AnimatorControllerParameterType.Float; - yield return new ProvidedParameter( name, ParameterNamespace.Animator, - _component, PluginDefinition.Instance, type) + _component, PluginDefinition.Instance, _component.AnimatorControllerParameterType) { WantSynced = _component.isSynced, IsHidden = hidden, diff --git a/Editor/ReactiveObjects/ParameterAssignerPass.cs b/Editor/ReactiveObjects/ParameterAssignerPass.cs index 6893a9fe..8e37e395 100644 --- a/Editor/ReactiveObjects/ParameterAssignerPass.cs +++ b/Editor/ReactiveObjects/ParameterAssignerPass.cs @@ -136,10 +136,7 @@ namespace nadena.dev.modular_avatar.core.editor } } - var type = - Mathf.Abs(mami.Control.value - Mathf.Round(mami.Control.value)) > 0.01f ? VRCExpressionParameters.ValueType.Float - : mami.Control.value < 0 || mami.Control.value > 1 ? VRCExpressionParameters.ValueType.Int - : VRCExpressionParameters.ValueType.Bool; + var type = mami.ExpressionParametersValueType; if (valueType == VRCExpressionParameters.ValueType.Bool || type == VRCExpressionParameters.ValueType.Float) { valueType = type; diff --git a/Runtime/ModularAvatarMenuItem.cs b/Runtime/ModularAvatarMenuItem.cs index e38023ee..bed3e531 100644 --- a/Runtime/ModularAvatarMenuItem.cs +++ b/Runtime/ModularAvatarMenuItem.cs @@ -149,6 +149,52 @@ namespace nadena.dev.modular_avatar.core if (control.subParameters.Length > maxSubParams) control.subParameters = control.subParameters.Take(maxSubParams).ToArray(); } + + internal VRCExpressionParameters.ValueType ExpressionParametersValueType + { + get + { + // 0, 1 + var type = VRCExpressionParameters.ValueType.Bool; + + // 2, 3, ..., (255) + if (Control.value > 1) + { + type = VRCExpressionParameters.ValueType.Int; + } + + // (-1.0), ..., -0.1, 0.1, ..., 0.9 + if (Control.value < 0 || Mathf.Abs(Control.value - Mathf.Round(Control.value)) > 0.01f) + { + type = VRCExpressionParameters.ValueType.Float; + } + + return type; + } + } + + internal AnimatorControllerParameterType AnimatorControllerParameterType + { + get + { + // 0, 1 + var type = AnimatorControllerParameterType.Bool; + + // 2, 3, ..., (255) + if (Control.value > 1) + { + type = AnimatorControllerParameterType.Int; + } + + // (-1.0), ..., -0.1, 0.1, ..., 0.9 + if (Control.value < 0 || Mathf.Abs(Control.value - Mathf.Round(Control.value)) > 0.01f) + { + type = AnimatorControllerParameterType.Float; + } + + return type; + } + } } }