Skip to content

Commit 97b1c73

Browse files
authored
Merge pull request #52 from VRLabs/dev
Stop broken merges
2 parents 97328ad + 579530d commit 97b1c73

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

Editor/Elements/AnimatorMergerElement.cs

+34-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Linq;
44
using UnityEditor.Animations;
@@ -51,13 +51,28 @@ public AnimatorMergerElement(VrcAnimationLayer layer)
5151
var layerParameters = layer.Parameters.Select(x => x.Parameter).ToArray();
5252
var allParameters = layer.AvatarParameters.Where(x => !layerParameters.Contains(x)).ToArray();
5353

54+
Button mergeOnCurrent = null;
55+
Button mergeOnNew = null;
56+
5457
controller.RegisterValueChangedCallback(evt =>
5558
{
5659
var newController = evt.newValue as AnimatorController;
60+
bool allowMerge = true;
5761

5862
parametersListContainer.Clear();
5963
_parametersToMerge.Clear();
6064

65+
66+
if (newController == layer.Controller)
67+
{
68+
new Label("Cannot merge controller onto itself.")
69+
.WithClass("red-text")
70+
.ChildOf(parametersListContainer);
71+
mergeOnCurrent.SetEnabled(false);
72+
mergeOnNew.SetEnabled(false);
73+
return;
74+
}
75+
6176
if (newController == null) return;
6277

6378
foreach (var param in newController.parameters)
@@ -73,6 +88,13 @@ public AnimatorMergerElement(VrcAnimationLayer layer)
7388
var suffixField = new TextField(p.Name).ChildOf(itemContainer);
7489
suffixField.tooltip = p.Name;
7590

91+
if (layerParameters.Any(x => x.nameHash == param.nameHash && x.type != param.type))
92+
{
93+
allowMerge = false;
94+
new Label("Target controller contains this parameter with a different type than the base controller. These controllers cannot be merged.")
95+
.WithClass("red-text")
96+
.ChildOf(itemContainer);
97+
}
7698
if (AV3Manager.VrcParameters.Any(x => x == param.name))
7799
{
78100
new Label("Parameter is a default one, by default it will be added to the parameters, but not listed in the synced parameters, you should not add any affix unless you know what you're doing")
@@ -110,17 +132,26 @@ public AnimatorMergerElement(VrcAnimationLayer layer)
110132
_parametersToMerge.Add(p);
111133
}
112134

135+
if (!allowMerge)
136+
{
137+
new Label("Target controller contains a parameter with a different type than the base controller. These controllers cannot be merged.")
138+
.WithClass("red-text")
139+
.ChildOf(parametersListContainer);
140+
}
141+
142+
mergeOnCurrent.SetEnabled(allowMerge);
143+
mergeOnNew.SetEnabled(allowMerge);
113144
});
114145

115146
var operationsArea = new VisualElement()
116147
.WithClass("top-spaced")
117148
.WithFlexDirection(FlexDirection.Row)
118149
.ChildOf(this);
119-
var mergeOnCurrent = FluentUIElements
150+
mergeOnCurrent = FluentUIElements
120151
.NewButton("Merge on current", "Merge this animator on the current layer animator")
121152
.WithClass("grow-control")
122153
.ChildOf(operationsArea);
123-
var mergeOnNew = FluentUIElements
154+
mergeOnNew = FluentUIElements
124155
.NewButton("Merge on new", "Create a copy of the layer animator and merge this animator on that")
125156
.WithClass("grow-control")
126157
.ChildOf(operationsArea);

Editor/Tabs/LayersTab.cs

-1
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,6 @@ private void UpdateParameters()
382382
x.type == AnimatorControllerParameterType.Float ||
383383
x.type == AnimatorControllerParameterType.Bool))
384384
{
385-
if (AV3Manager.VrcParameters.Count(x => x.Equals(parameter.name)) > 0) continue;
386385
bool isExpression = _expressionParameters != null && _expressionParameters.FindParameter(parameter.name) != null;
387386
bool isSynced = isExpression
388387
? _expressionParameters.FindParameter(parameter.name).networkSynced

0 commit comments

Comments
 (0)