From 9ae09900f5ef43b41e9b5ef710149b7ec1c6b4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=C3=AF=7E?= Date: Mon, 16 Oct 2023 19:18:53 +0200 Subject: [PATCH] Add layer parameter and overrides copying --- .../V1/Editor/Aac.cs | 104 ++++++++++++++++-- .../package.json | 6 +- 2 files changed, 95 insertions(+), 15 deletions(-) diff --git a/Packages/dev.hai-vr.animator-as-code.v1/V1/Editor/Aac.cs b/Packages/dev.hai-vr.animator-as-code.v1/V1/Editor/Aac.cs index 1fa8ee9..74027e6 100644 --- a/Packages/dev.hai-vr.animator-as-code.v1/V1/Editor/Aac.cs +++ b/Packages/dev.hai-vr.animator-as-code.v1/V1/Editor/Aac.cs @@ -78,6 +78,13 @@ namespace AnimatorAsCode.V1 private readonly AacConfiguration _configuration; private readonly string _fullLayerName; private readonly AacFlStateMachine _stateMachine; + + private readonly List _floatParameters = new List(); + private readonly List _intParameters = new List(); + private readonly List _boolParameters = new List(); + private readonly Dictionary _floatOverrides = new Dictionary(); + private readonly Dictionary _intOverrides = new Dictionary(); + private readonly Dictionary _boolOverrides = new Dictionary(); internal AacFlLayer(AnimatorController animatorController, AacConfiguration configuration, AacFlStateMachine stateMachine, string fullLayerName) { @@ -138,44 +145,93 @@ namespace AnimatorAsCode.V1 } /// Create a Bool parameter in the animator. - public AacFlBoolParameter BoolParameter(string parameterName) => _stateMachine.InternalBackingAnimator().BoolParameter(parameterName); + public AacFlBoolParameter BoolParameter(string parameterName) + { + _boolParameters.Add(parameterName); + return _stateMachine.InternalBackingAnimator().BoolParameter(parameterName); + } /// Create a Trigger parameter in the animator, but returns a Bool parameter for use in AAC. - public AacFlBoolParameter TriggerParameterAsBool(string parameterName) => _stateMachine.InternalBackingAnimator().TriggerParameter(parameterName); + public AacFlBoolParameter TriggerParameterAsBool(string parameterName) + { + _boolParameters.Add(parameterName); + return _stateMachine.InternalBackingAnimator().TriggerParameter(parameterName); + } /// Create a Float parameter in the animator. - public AacFlFloatParameter FloatParameter(string parameterName) => _stateMachine.InternalBackingAnimator().FloatParameter(parameterName); + public AacFlFloatParameter FloatParameter(string parameterName) + { + _floatParameters.Add(parameterName); + return _stateMachine.InternalBackingAnimator().FloatParameter(parameterName); + } /// Create an Int parameter in the animator. - public AacFlIntParameter IntParameter(string parameterName) => _stateMachine.InternalBackingAnimator().IntParameter(parameterName); + public AacFlIntParameter IntParameter(string parameterName) + { + _intParameters.Add(parameterName); + return _stateMachine.InternalBackingAnimator().IntParameter(parameterName); + } /// Create multiple Bool parameters in the animator, and returns a group of multiple Bools. - public AacFlBoolParameterGroup BoolParameters(params string[] parameterNames) => _stateMachine.InternalBackingAnimator().BoolParameters(parameterNames); + public AacFlBoolParameterGroup BoolParameters(params string[] parameterNames) + { + _boolParameters.AddRange(parameterNames); + return _stateMachine.InternalBackingAnimator().BoolParameters(parameterNames); + } /// Create multiple Trigger parameters in the animator, but returns a group of multiple Bools for use in AAC. - public AacFlBoolParameterGroup TriggerParametersAsBools(params string[] parameterNames) => _stateMachine.InternalBackingAnimator().TriggerParameters(parameterNames); + public AacFlBoolParameterGroup TriggerParametersAsBools(params string[] parameterNames) + { + _boolParameters.AddRange(parameterNames); + return _stateMachine.InternalBackingAnimator().TriggerParameters(parameterNames); + } /// Create multiple Float parameters in the animator, and returns a group of multiple Floats. - public AacFlFloatParameterGroup FloatParameters(params string[] parameterNames) => _stateMachine.InternalBackingAnimator().FloatParameters(parameterNames); + public AacFlFloatParameterGroup FloatParameters(params string[] parameterNames) + { + _floatParameters.AddRange(parameterNames); + return _stateMachine.InternalBackingAnimator().FloatParameters(parameterNames); + } /// Create multiple Int parameters in the animator, and returns a group of multiple Ints. - public AacFlIntParameterGroup IntParameters(params string[] parameterNames) => _stateMachine.InternalBackingAnimator().IntParameters(parameterNames); + public AacFlIntParameterGroup IntParameters(params string[] parameterNames) + { + _intParameters.AddRange(parameterNames); + return _stateMachine.InternalBackingAnimator().IntParameters(parameterNames); + } /// Combine multiple Bool parameters into a group. - public AacFlBoolParameterGroup BoolParameters(params AacFlBoolParameter[] parameters) => _stateMachine.InternalBackingAnimator().BoolParameters(parameters); + public AacFlBoolParameterGroup BoolParameters(params AacFlBoolParameter[] parameters) + { + _boolParameters.AddRange(parameters.Select(parameter => parameter.Name)); + return _stateMachine.InternalBackingAnimator().BoolParameters(parameters); + } /// Combine multiple Bool parameters into a group. There is no difference with BoolParameters(...) and is provided only for semantic purposes. - public AacFlBoolParameterGroup TriggerParametersAsBools(params AacFlBoolParameter[] parameters) => _stateMachine.InternalBackingAnimator().TriggerParameters(parameters); + public AacFlBoolParameterGroup TriggerParametersAsBools(params AacFlBoolParameter[] parameters) + { + _boolParameters.AddRange(parameters.Select(parameter => parameter.Name)); + return _stateMachine.InternalBackingAnimator().TriggerParameters(parameters); + } /// Combine multiple Float parameters into a group. - public AacFlFloatParameterGroup FloatParameters(params AacFlFloatParameter[] parameters) => _stateMachine.InternalBackingAnimator().FloatParameters(parameters); + public AacFlFloatParameterGroup FloatParameters(params AacFlFloatParameter[] parameters) + { + _floatParameters.AddRange(parameters.Select(parameter => parameter.Name)); + return _stateMachine.InternalBackingAnimator().FloatParameters(parameters); + } /// Combine multiple Int parameters into a group. - public AacFlIntParameterGroup IntParameters(params AacFlIntParameter[] parameters) => _stateMachine.InternalBackingAnimator().IntParameters(parameters); + public AacFlIntParameterGroup IntParameters(params AacFlIntParameter[] parameters) + { + _intParameters.AddRange(parameters.Select(parameter => parameter.Name)); + return _stateMachine.InternalBackingAnimator().IntParameters(parameters); + } /// Set the Bool value of `toBeForced` parameter to `value` in the animator. public AacFlLayer OverrideValue(AacFlBoolParameter toBeForced, bool value) { + _boolOverrides[toBeForced.Name] = value; var parameters = _animatorController.parameters; foreach (var param in parameters) { @@ -193,6 +249,7 @@ namespace AnimatorAsCode.V1 /// Set the Float value of `toBeForced` parameter to `value` in the animator. public AacFlLayer OverrideValue(AacFlFloatParameter toBeForced, float value) { + _floatOverrides[toBeForced.Name] = value; var parameters = _animatorController.parameters; foreach (var param in parameters) { @@ -210,6 +267,7 @@ namespace AnimatorAsCode.V1 /// Set the Int value of `toBeForced` parameter to `value` in the animator. public AacFlLayer OverrideValue(AacFlIntParameter toBeForced, int value) { + _intOverrides[toBeForced.Name] = value; var parameters = _animatorController.parameters; foreach (var param in parameters) { @@ -295,6 +353,28 @@ namespace AnimatorAsCode.V1 { return _stateMachine; } + + /// Copy all created parameters to the other layer, and overrides it with a value if a value was stored. + public AacFlLayer CopyParametersAndOverridesTo(AacFlLayer otherLayer) + { + foreach (var key in _floatParameters) + { + var param = otherLayer.FloatParameter(key); + if (_floatOverrides.TryGetValue(key, out var value)) otherLayer.OverrideValue(param, value); + } + foreach (var key in _intParameters) + { + var param = otherLayer.IntParameter(key); + if (_intOverrides.TryGetValue(key, out var value)) otherLayer.OverrideValue(param, value); + } + foreach (var key in _boolParameters) + { + var param = otherLayer.BoolParameter(key); + if (_boolOverrides.TryGetValue(key, out var value)) otherLayer.OverrideValue(param, value); + } + + return this; + } } public class AacFlBase diff --git a/Packages/dev.hai-vr.animator-as-code.v1/package.json b/Packages/dev.hai-vr.animator-as-code.v1/package.json index efd40bf..8f0c4d2 100644 --- a/Packages/dev.hai-vr.animator-as-code.v1/package.json +++ b/Packages/dev.hai-vr.animator-as-code.v1/package.json @@ -1,9 +1,9 @@ { "name": "dev.hai-vr.animator-as-code.v1", - "displayName": "Animator As Code", - "version": "1.0.9907", + "displayName": "Animator As Code (Alpha)", + "version": "1.0.9912", "unity": "2019.4", - "description": "Animator As Code", + "description": "Base Animator As Code library. This library only requires Unity.", "vrchatVersion" : "2022.1.1", "author" : { "name" : "Haï~"