Accomodate new VRCAnimatorPlayAudio requirements:

- Nodes need to know the Animator Root, so that relative paths can be resolved during the creation of State behaviours (i.e. Relative path of an AudioSource).
- Nodes need to have the ability to create a New Behaviour, even if one already exists.
This commit is contained in:
Haï~
2024-06-30 13:58:54 +02:00
parent a9e1b62818
commit 582b109a82
4 changed files with 33 additions and 12 deletions
@@ -527,7 +527,7 @@ namespace AnimatorAsCode.V1
/// NON-PUBLIC: Internal use only so that destructive workflow can access this. Maybe this can be improved
public AacFlLayer InternalDoCreateLayer(AnimatorController animator, string layerName)
{
var ag = new AacAnimatorGenerator(animator, CreateEmptyClip().Clip, _configuration.DefaultsProvider);
var ag = new AacAnimatorGenerator(animator, CreateEmptyClip().Clip, _configuration.DefaultsProvider, _configuration.AnimatorRoot);
var machine = ag.CreateOrClearLayerAtSameIndex(layerName, 1f);
return new AacFlLayer(animator, _configuration, machine, layerName);
@@ -535,7 +535,7 @@ namespace AnimatorAsCode.V1
internal AacFlLayer DoCreateLayerWithoutDeleting(AnimatorController animator, string layerName)
{
var ag = new AacAnimatorGenerator(animator, CreateEmptyClip().Clip, _configuration.DefaultsProvider);
var ag = new AacAnimatorGenerator(animator, CreateEmptyClip().Clip, _configuration.DefaultsProvider, _configuration.AnimatorRoot);
var machine = ag.CreateOrClearLayerAtSameIndex(layerName, 1f, null, false);
return new AacFlLayer(animator, _configuration, machine, layerName);
@@ -693,12 +693,14 @@ namespace AnimatorAsCode.V1
private readonly AnimatorController _animatorController;
private readonly AnimationClip _emptyClip;
private readonly IAacDefaultsProvider _defaultsProvider;
private readonly Transform _animatorRoot;
internal AacAnimatorGenerator(AnimatorController animatorController, AnimationClip emptyClip, IAacDefaultsProvider defaultsProvider)
internal AacAnimatorGenerator(AnimatorController animatorController, AnimationClip emptyClip, IAacDefaultsProvider defaultsProvider, Transform animatorRoot)
{
_animatorController = animatorController;
_emptyClip = emptyClip;
_defaultsProvider = defaultsProvider;
_animatorRoot = animatorRoot;
}
internal void CreateParamsAsNeeded(params AacFlParameter[] parameters)
@@ -755,7 +757,7 @@ namespace AnimatorAsCode.V1
}
var layer = TryGetLayer(layerName);
var machinist = new AacFlStateMachine(layer.stateMachine, _emptyClip, new AacBackingAnimator(this), _defaultsProvider);
var machinist = new AacFlStateMachine(layer.stateMachine, _emptyClip, new AacBackingAnimator(this), _defaultsProvider, _animatorRoot);
return machinist
.WithAnyStatePosition(0, 7)
.WithEntryPosition(0, -1)
@@ -790,7 +792,7 @@ namespace AnimatorAsCode.V1
_animatorController.layers = layers;
var layer = TryGetLayer(layerName);
var machinist = new AacFlStateMachine(layer.stateMachine, _emptyClip, new AacBackingAnimator(this), _defaultsProvider);
var machinist = new AacFlStateMachine(layer.stateMachine, _emptyClip, new AacBackingAnimator(this), _defaultsProvider, _animatorRoot);
_defaultsProvider.ConfigureStateMachine(layer.stateMachine);
return machinist;
}
@@ -13,11 +13,13 @@ namespace AnimatorAsCode.V1
{
protected readonly AacFlStateMachine ParentMachine;
protected readonly IAacDefaultsProvider DefaultsProvider;
protected readonly Transform AnimatorRoot;
protected AacAnimatorNode(AacFlStateMachine parentMachine, IAacDefaultsProvider defaultsProvider)
protected AacAnimatorNode(AacFlStateMachine parentMachine, IAacDefaultsProvider defaultsProvider, Transform animatorRoot)
{
ParentMachine = parentMachine;
DefaultsProvider = defaultsProvider;
AnimatorRoot = animatorRoot;
}
public TNode LeftOf(AacAnimatorNode otherNode) => MoveNextTo(otherNode, -1, 0);
@@ -60,6 +62,13 @@ namespace AnimatorAsCode.V1
return (TNode) this;
}
public string ResolveRelativePath(Transform item)
{
return AacInternals.ResolveRelativePath(AnimatorRoot, item);
}
public abstract TBehaviour EnsureBehaviour<TBehaviour>() where TBehaviour : StateMachineBehaviour;
public abstract TBehaviour CreateNewBehaviour<TBehaviour>() where TBehaviour : StateMachineBehaviour;
}
}
@@ -121,8 +121,8 @@ namespace AnimatorAsCode.V1
private readonly HashSet<string> _stateNames;
internal AacFlStateMachine(AnimatorStateMachine machine, AnimationClip emptyClip, AacBackingAnimator backingAnimator, IAacDefaultsProvider defaultsProvider, AacFlStateMachine parent = null)
: base(parent, defaultsProvider)
internal AacFlStateMachine(AnimatorStateMachine machine, AnimationClip emptyClip, AacBackingAnimator backingAnimator, IAacDefaultsProvider defaultsProvider, Transform animatorRoot, AacFlStateMachine parent = null)
: base(parent, defaultsProvider, animatorRoot)
{
Machine = machine;
_emptyClip = emptyClip;
@@ -151,7 +151,7 @@ namespace AnimatorAsCode.V1
public AacFlStateMachine NewSubStateMachine(string name, int x, int 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, AnimatorRoot, this);
_defaultsProvider.ConfigureStateMachine(stateMachine);
_childNodes.Add(aacMachine);
return aacMachine;
@@ -191,7 +191,7 @@ namespace AnimatorAsCode.V1
{
var state = AacInternals.NoUndo(Machine, () => Machine.AddState(EnsureNameIsDeduplicated(name), GridPosition(x, y)));
DefaultsProvider.ConfigureState(state, _emptyClip);
var aacState = new AacFlState(state, this, DefaultsProvider);
var aacState = new AacFlState(state, this, DefaultsProvider, AnimatorRoot);
_childNodes.Add(aacState);
return aacState;
@@ -331,6 +331,11 @@ namespace AnimatorAsCode.V1
return AacInternals.NoUndo(Machine, () => Machine.AddStateMachineBehaviour<TBehaviour>());
}
public override TBehaviour CreateNewBehaviour<TBehaviour>()
{
return AacInternals.NoUndo(Machine, () => Machine.AddStateMachineBehaviour<TBehaviour>());
}
}
public class AacFlState : AacAnimatorNode<AacFlState>
@@ -338,7 +343,7 @@ namespace AnimatorAsCode.V1
public readonly AnimatorState State;
private readonly AnimatorStateMachine _machine;
public AacFlState(AnimatorState state, AacFlStateMachine parentMachine, IAacDefaultsProvider defaultsProvider) : base(parentMachine, defaultsProvider)
public AacFlState(AnimatorState state, AacFlStateMachine parentMachine, IAacDefaultsProvider defaultsProvider, Transform animatorRoot) : base(parentMachine, defaultsProvider, animatorRoot)
{
State = state;
_machine = parentMachine.Machine;
@@ -482,6 +487,11 @@ namespace AnimatorAsCode.V1
return AacInternals.NoUndo(State, () => State.AddStateMachineBehaviour<TBehaviour>());
}
public override TBehaviour CreateNewBehaviour<TBehaviour>()
{
return AacInternals.NoUndo(State, () => State.AddStateMachineBehaviour<TBehaviour>());
}
}
public class AacFlTransition : AacFlNewTransitionContinuation
@@ -1,7 +1,7 @@
{
"name": "dev.hai-vr.animator-as-code.v1",
"displayName": "Animator As Code (Alpha)",
"version": "1.0.9940",
"version": "1.0.9941-alpha.1",
"unity": "2019.4",
"description": "Base Animator As Code library. This library only requires Unity.",
"vrchatVersion" : "2022.1.1",