Extend name deduplication to sub-state machines

This commit is contained in:
Haï~
2023-10-04 00:39:13 +02:00
parent d7f7bec848
commit e0b43254a4
@@ -150,7 +150,7 @@ namespace AnimatorAsCode.V1
public AacFlStateMachine NewSubStateMachine(string name, int x, int y) public AacFlStateMachine NewSubStateMachine(string name, int x, int y)
{ {
var stateMachine = AacInternals.NoUndo(Machine, () => Machine.AddStateMachine(name, GridPosition(x, y))); var stateMachine = AacInternals.NoUndo(Machine, () => Machine.AddStateMachine(EnsureNameIsDeduplicated(name), GridPosition(x, y)));
var aacMachine = new AacFlStateMachine(stateMachine, _emptyClip, _backingAnimator, DefaultsProvider, this); var aacMachine = new AacFlStateMachine(stateMachine, _emptyClip, _backingAnimator, DefaultsProvider, this);
_defaultsProvider.ConfigureStateMachine(stateMachine); _defaultsProvider.ConfigureStateMachine(stateMachine);
_childNodes.Add(aacMachine); _childNodes.Add(aacMachine);
@@ -189,22 +189,25 @@ namespace AnimatorAsCode.V1
public AacFlState NewState(string name, int x, int y) public AacFlState NewState(string name, int x, int y)
{ {
var state = AacInternals.NoUndo(Machine, () => Machine.AddState(name, GridPosition(x, y))); var state = AacInternals.NoUndo(Machine, () => Machine.AddState(EnsureNameIsDeduplicated(name), GridPosition(x, y)));
DefaultsProvider.ConfigureState(state, _emptyClip); DefaultsProvider.ConfigureState(state, _emptyClip);
var aacState = new AacFlState(state, this, DefaultsProvider); var aacState = new AacFlState(state, this, DefaultsProvider);
_childNodes.Add(aacState); _childNodes.Add(aacState);
int suffix = 0; return aacState;
string stateName = name; }
private string EnsureNameIsDeduplicated(string name)
{
var suffix = 0;
var stateName = name;
while (_stateNames.Contains(stateName)) while (_stateNames.Contains(stateName))
{ {
stateName = name + " " + (++suffix); stateName = name + " " + (++suffix);
} }
state.name = stateName; _stateNames.Add(stateName);
_stateNames.Add(state.name); return stateName;
return aacState;
} }
public AacFlTransition AnyTransitionsTo(AacFlState destination) public AacFlTransition AnyTransitionsTo(AacFlState destination)