Skip to content
This repository was archived by the owner on Apr 8, 2023. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -405,31 +405,54 @@ private void OnGUI()
"set animations, transitions, and parameters that handle the specified Binary Parameter."
)))
{
if (ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined)) | !_createParametersInDescriptor)
bool doAnimationControllerActions = true;
// creating parameters in VRC avatar parameters asset
if (_createParametersInDescriptor)
{
// remove original (float) parameter from VRC avatar parameters asset
// won't remove if it isn't a float!
ParameterTools.RemoveVRCParameter(_avDescriptor, new VRCExpressionParameters.Parameter
{
name = _baseParamName,
valueType = VRCExpressionParameters.ValueType.Float
}, true);

if (!ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined)))
{
doAnimationControllerActions = false;
// HelpBoxes don't actually show because they show in the time window of the buttonclick
//EditorGUILayout.HelpBox("Parameters can not fit, or Expressions Parameters do not exist.", MessageType.Warning);
EditorUtility.DisplayDialog("Warning", "Parameters can not fit, or Expressions Parameters do not exist.\n" +
"Aborting binary parameter creation.", "OK");
}
}

// animation controller actions
// don't add to animation controller if adding to VRC parameters asset failed
if (doAnimationControllerActions)
{
// no smoothing layer
if (_tab == 0 && !_smooth)
{
// create parameter in the animation controller
ParameterTools.CheckAndCreateParameter(_baseParamName, _animatorController, 1);

_binaryStateMachine.initClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 0f);
_binaryStateMachine.finalClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 1f);
}
// with smoothing layer
else if (_tab == 0)
{
// create parameter in the animation controller
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);
// generates direct binary layer if _tab==1
_binaryStateMachine.CreateBinaryLayer();
}
}
}
Expand All @@ -442,37 +465,61 @@ private void OnGUI()
"set animations, transitions, and parameters that handle the specified Combined Binary Parameter."
)))
{
if (ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined)) | !_createParametersInDescriptor)
bool doAnimationControllerActions = true;
// creating parameters in VRC avatar parameters asset
if (_createParametersInDescriptor)
{
// remove original (float) parameter from VRC avatar parameters asset
// won't remove if it isn't a float!
ParameterTools.RemoveVRCParameter(_avDescriptor, new VRCExpressionParameters.Parameter
{
name = _baseParamName,
valueType = VRCExpressionParameters.ValueType.Float
}, true);

if (!ParameterTools.AddVRCParameter(_avDescriptor, GenerateBinaryParams(_baseParamName, _binarySize, _isCombined)))
{
doAnimationControllerActions = false;
// HelpBoxes don't actually show because they show in the time window of the buttonclick
//EditorGUILayout.HelpBox("Parameters can not fit, or Expressions Parameters do not exist.", MessageType.Warning);
EditorUtility.DisplayDialog("Warning", "Parameters can not fit, or Expressions Parameters do not exist.\n" +
"Aborting binary parameter creation.", "OK");
}
}

// animation controller actions
// don't add to animation controller if adding to VRC parameters asset failed
if (doAnimationControllerActions)
{
// no smoothing layer
if (_tab == 0 && !_smooth)
{
ParameterTools.RemoveVRCParameter(_avDescriptor, new VRCExpressionParameters.Parameter
{
name = _baseParamName,
valueType = VRCExpressionParameters.ValueType.Float
});
// create parameter in the animation controller
ParameterTools.CheckAndCreateParameter(_baseParamName, _animatorController, 1);

_binaryStateMachine.initClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 0f);
_binaryStateMachine.finalClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, 1f);
_binaryStateMachine.finalNegativeClip = BinaryParameterFloatDriver.CreateFloatDriverAnimation(_baseParamName, -1f);
}
// with smoothing layer
else if (_tab == 0)
{
ParameterTools.RemoveVRCParameter(_avDescriptor, _baseParamName);
// create parameter in the animation controller
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);
}
// generates direct binary layer if _tab==1
_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);
EditorGUILayout.Space();
EditorGUILayout.HelpBox("Parameters (" + _avDescriptor.expressionParameters.CalcTotalCost() + "/" + VRCExpressionParameters.MAX_PARAMETER_COST + ")\n\n" +
"Binary Parameters to create:" + (_createParametersInDescriptor ? "(Will Add to VRC Expression Parameters)" : "") +
GenerateParamNames(_baseParamName, _binarySize, _isCombined), MessageType.None);

}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ public static bool AddVRCParameter(VRCAvatarDescriptor avatarDescriptor, List<VR
int paramTotalCost = 0;
int maxCost = VRCExpressionParameters.MAX_PARAMETER_COST;

paramTotalCost += avatarDescriptor.expressionParameters.CalcTotalCost();

// Make sure Parameters aren't null
if (avatarDescriptor.expressionParameters == null)
{
Debug.Log("ExpressionsParameters not found!");
return false;
}

paramTotalCost += avatarDescriptor.expressionParameters.CalcTotalCost();

// Checks to see if parameter already exists; calculate new total parameter cost
foreach (VRCExpressionParameters.Parameter param in parameters)
if (avatarDescriptor.expressionParameters.FindParameter(param.name) == null)
Expand Down Expand Up @@ -100,7 +100,7 @@ public static bool RemoveVRCParameter(VRCAvatarDescriptor avatarDescriptor, List
return true;
}

public static bool RemoveVRCParameter(VRCAvatarDescriptor avatarDescriptor, VRCExpressionParameters.Parameter parameter)
public static bool RemoveVRCParameter(VRCAvatarDescriptor avatarDescriptor, VRCExpressionParameters.Parameter parameter, bool floatOnly=false)
{
// Make sure Parameters aren't null
if (avatarDescriptor.expressionParameters == null)
Expand All @@ -121,8 +121,15 @@ public static bool RemoveVRCParameter(VRCAvatarDescriptor avatarDescriptor, VRCE

// Check and see if parameter exists
VRCExpressionParameters.Parameter foundParameter = newParameters.FindParameter(parameter.name);
if (newParameters.FindParameter(parameter.name) != null)
if (foundParameter != null)
{
// is parameter not a float?
if (floatOnly && foundParameter.valueType != VRCExpressionParameters.ValueType.Float)
{
Debug.Log("Tried to remove float parameter " + parameter.name + " but it was not a float. Ignoring");
return false;
}

// Remove the parameter
List<VRCExpressionParameters.Parameter> betterParametersBecauseItsAListInstead =
newParameters.parameters.ToList();
Expand All @@ -132,6 +139,42 @@ public static bool RemoveVRCParameter(VRCAvatarDescriptor avatarDescriptor, VRCE
return true;
}

// kept for future use
public static bool RemoveVRCParametersByStem(VRCAvatarDescriptor avatarDescriptor, string parameterStem)
{
// 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(parameterStem) != null)
{
// Remove the parameters with listed keyword
List<VRCExpressionParameters.Parameter> betterParametersBecauseItsAListInstead =
newParameters.parameters.ToList();

// Remove without editing the collection being looped
betterParametersBecauseItsAListInstead =
betterParametersBecauseItsAListInstead.Where(p => !p.name.Contains(parameterStem)).ToList();

newParameters.parameters = betterParametersBecauseItsAListInstead.ToArray();
}
return true;
}

public static AnimatorControllerParameter CheckAndCreateParameter(string paramName, AnimatorController animatorController, int type, double defaultVal = 0)
{
AnimatorControllerParameter param = new AnimatorControllerParameter();
Expand Down