From f41898f77456bcca97774631d47dc89087c7ef94 Mon Sep 17 00:00:00 2001 From: Adjerry91 <58948489+Adjerry91@users.noreply.github.com> Date: Mon, 28 Nov 2022 18:12:12 -0600 Subject: [PATCH] Fix create parameter switch --- .gitignore | 1 + .../Editor/BinaryParameterScript.cs | 1 + .../Editor/BinaryParameterWindow.cs | 86 +++++++++++++++---- .../Editor/ParameterGenerator.cs | 33 +++++++ 4 files changed, 103 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 498816d..f5d7a2e 100644 --- a/.gitignore +++ b/.gitignore @@ -416,3 +416,4 @@ FodyWeavers.xsd /.vsconfig /Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/Test.controller /Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/AllParams.asset +/Export \ No newline at end of file diff --git a/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/BinaryParameterScript.cs b/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/BinaryParameterScript.cs index 3f12f0a..0b993f6 100644 --- a/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/BinaryParameterScript.cs +++ b/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/BinaryParameterScript.cs @@ -367,6 +367,7 @@ private static void CreateUniformBinaryStatesInMachine(string name, int binarySi } } + // implement next update pls private static void CreateBranchingBinaryStatesInMachine(string name, int binarySize, AnimatorStateMachine stateMachine, AnimationClip initClip, AnimationClip finalClip, bool writeDefaults, float duration, bool nextStateInterrupt, float min, float max, AnimationClip finalNegativeClip = null, float minNeg = 0, float maxNeg = 0) { // Skips creating the negative & positive branch diff --git a/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/BinaryParameterWindow.cs b/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/BinaryParameterWindow.cs index 6b725c1..dbec15f 100644 --- a/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/BinaryParameterWindow.cs +++ b/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/BinaryParameterWindow.cs @@ -405,7 +405,37 @@ private void OnGUI() "set animations, transitions, and parameters that handle the specified Binary Parameter." ))) { - if (ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined)) | !_createParametersInDescriptor) + if (_createParametersInDescriptor) + { + if (ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined))) + { + + if (_tab == 0 && !_smooth) + { + ParameterTools.CheckAndCreateParameter(_baseParamName, _animatorController, 1); + + _binaryStateMachine.initClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 0f); + _binaryStateMachine.finalClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 1f); + } + else if (_tab == 0) + { + ParameterTools.CheckAndCreateParameter(_baseParamName, _animatorController, 1); + + _binaryStateMachine.CreateSmoothingLayer(_smoothness); + + _binaryStateMachine.initClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName + "Proxy", 0f); + _binaryStateMachine.finalClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName + "Proxy", 1f); + } + if (ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined))) + { + ParameterTools.RemoveVRCParameter(_avDescriptor, _baseParamName); + _binaryStateMachine.CreateBinaryLayer(); + } + else + EditorGUILayout.HelpBox("Parameters can not fit, or Expressions Parameters do not exist.", MessageType.Warning); + } + } + else { if (_tab == 0 && !_smooth) { @@ -423,13 +453,7 @@ private void OnGUI() _binaryStateMachine.initClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName + "Proxy", 0f); _binaryStateMachine.finalClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName + "Proxy", 1f); } - if (ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined))) - { - ParameterTools.RemoveVRCParameter(_avDescriptor, _baseParamName); - _binaryStateMachine.CreateBinaryLayer(); - } - else - EditorGUILayout.HelpBox("Parameters can not fit, or Expressions Parameters do not exist.", MessageType.Warning); + _binaryStateMachine.CreateBinaryLayer(); } } } @@ -442,15 +466,43 @@ private void OnGUI() "set animations, transitions, and parameters that handle the specified Combined Binary Parameter." ))) { - if (ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined)) | !_createParametersInDescriptor) + if(_createParametersInDescriptor) { - if (_tab == 0 && !_smooth) + if (ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined))) { - ParameterTools.RemoveVRCParameter(_avDescriptor, new VRCExpressionParameters.Parameter + if (_tab == 0 && !_smooth) + { + ParameterTools.RemoveVRCParameter(_avDescriptor, new VRCExpressionParameters.Parameter + { + name = _baseParamName, + valueType = VRCExpressionParameters.ValueType.Float + }); + ParameterTools.CheckAndCreateParameter(_baseParamName, _animatorController, 1); + + _binaryStateMachine.initClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 0f); + _binaryStateMachine.finalClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 1f); + _binaryStateMachine.finalNegativeClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, -1f); + } + else if (_tab == 0) { - name = _baseParamName, - valueType = VRCExpressionParameters.ValueType.Float - }); + ParameterTools.RemoveVRCParameter(_avDescriptor, _baseParamName); + ParameterTools.CheckAndCreateParameter(_baseParamName, _animatorController, 1); + + _binaryStateMachine.CreateSmoothingLayer(_smoothness); + _binaryStateMachine.initClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName + "Proxy", 0f); + _binaryStateMachine.finalClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName + "Proxy", 1f); + _binaryStateMachine.finalNegativeClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName + "Proxy", -1f); + } + _binaryStateMachine.CreateCombinedBinaryLayer(); + } + else + EditorGUILayout.HelpBox("Parameters can not fit, or Expressions Parameters do not exist.", MessageType.Warning); + } + else + { + if (_tab == 0 && !_smooth) + { + ParameterTools.CheckAndCreateParameter(_baseParamName, _animatorController, 1); _binaryStateMachine.initClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 0f); @@ -458,8 +510,7 @@ private void OnGUI() _binaryStateMachine.finalNegativeClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, -1f); } else if (_tab == 0) - { - ParameterTools.RemoveVRCParameter(_avDescriptor, _baseParamName); + { ParameterTools.CheckAndCreateParameter(_baseParamName, _animatorController, 1); _binaryStateMachine.CreateSmoothingLayer(_smoothness); @@ -469,8 +520,7 @@ private void OnGUI() } _binaryStateMachine.CreateCombinedBinaryLayer(); } - else - EditorGUILayout.HelpBox("Parameters can not fit, or Expressions Parameters do not exist.", MessageType.Warning); + } EditorGUILayout.HelpBox("Parameters (" + _avDescriptor.expressionParameters.CalcTotalCost() + "/" + VRCExpressionParameters.MAX_PARAMETER_COST + "):" + GenerateParamNames(_baseParamName, _binarySize, _isCombined), MessageType.None); diff --git a/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/ParameterGenerator.cs b/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/ParameterGenerator.cs index 59a8e81..90f20d0 100644 --- a/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/ParameterGenerator.cs +++ b/Assets/VRCFaceTracking/Tools/Binary Parameter Tool/Editor/ParameterGenerator.cs @@ -132,6 +132,39 @@ public static bool RemoveVRCParameter(VRCAvatarDescriptor avatarDescriptor, VRCE return true; } + public static bool RemoveVRCParameter(VRCAvatarDescriptor avatarDescriptor, string parameter) + { + // Make sure Parameters aren't null + if (avatarDescriptor.expressionParameters == null) + { + Debug.Log("ExpressionsParameters not found!"); + return false; + } + + // Instantiate and Save to Database + VRCExpressionParameters newParameters = avatarDescriptor.expressionParameters; + string assetPath = AssetDatabase.GetAssetPath(avatarDescriptor.expressionParameters); + if (assetPath != String.Empty) + { + AssetDatabase.RemoveObjectFromAsset(avatarDescriptor.expressionParameters); + AssetDatabase.CreateAsset(newParameters, assetPath); + avatarDescriptor.expressionParameters = newParameters; + } + + // Check and see if parameter exists + if (newParameters.FindParameter(parameter) != null) + { + // Remove the parameters with listed keyword + List betterParametersBecauseItsAListInstead = + newParameters.parameters.ToList(); + foreach (VRCExpressionParameters.Parameter p in betterParametersBecauseItsAListInstead) + if (p.name.Contains(parameter)) + betterParametersBecauseItsAListInstead.Remove(p); + newParameters.parameters = betterParametersBecauseItsAListInstead.ToArray(); + } + return true; + } + public static AnimatorControllerParameter CheckAndCreateParameter(string paramName, AnimatorController animatorController, int type, double defaultVal = 0) { AnimatorControllerParameter param = new AnimatorControllerParameter();