/// <summary> /// Callback from InternalAPIAccess to process a single Animator state. /// </summary> /// <param name="layer">Layer index.</param> /// <param name="layerName">Layer name.</param> /// <param name="item">State name.</param> public void ProcessAnimatorState(StateInfo info) { string layerPrefix = (info.Layer > 0 || config.ForceLayerPrefix ? null : info.LayerName); string name = CodeGenerationUtils.GenerateStateName(config.AnimatorStatePrefix, info.Name, layerPrefix); name = name.FirstCharToUpper(); string fieldName = CodeGenerationUtils.GenerateStateName(config.AnimatorStateHashPrefix, info.Name, layerPrefix); fieldName = fieldName.FirstCharToLower(); // field declaration GenericFieldCodeElement field = new GenericFieldCodeElement(typeof(int), fieldName, "" + info.Id); field.ReadOnly = true; field.Summary.Add("Hash of Animator state " + info.Name); classCodeElement.Fields.Add(field); string methodName = "Is" + name; // IsXXX method () MethodCodeElement <bool> method = new MethodCodeElement <bool> (methodName); method.Origin = "state " + info.Name; method.Code.Add("return " + fieldName + " == animator.GetCurrentAnimatorStateInfo (" + info.Layer + ").nameHash" + ";"); method.Summary.Add("true if the current Animator state of layer " + info.Layer + " is \"" + info.Name + "\"."); classCodeElement.Methods.Add(method); // overloaded IsXXX (int nameHash) MethodCodeElement <bool> methodWithLayerParameter = new MethodCodeElement <bool> (methodName); methodWithLayerParameter.Origin = "state " + info.Name; methodWithLayerParameter.AddParameter(typeof(int), "nameHash"); methodWithLayerParameter.Code.Add("return nameHash == " + fieldName + ";"); methodWithLayerParameter.Summary.Add("true if the given (state) nameHash equals Animator.StringToHash (\"" + info.Name + "\")."); classCodeElement.Methods.Add(methodWithLayerParameter); // state dictionary is filled in overriden method InitialiseEventManager object [] parameters = new object[] { info.Id, info.Layer, info.LayerName, info.Name, info.Tag, info.Speed, info.FootIK, info.Mirror, info.Motion.Name, info.Motion.Duration }; string parameterList = CodeElementUtils.GetCallParameterString(parameters); EventManagerInitialiser.Code.Add(StateInfoDict + ".Add (" + info.Id + ", new StateInfo (" + parameterList + "));"); }
/// <summary> /// Callback from InternalAPIAccess to process a single Animator state. /// </summary> /// <param name="layer">Layer index.</param> /// <param name="layerName">Layer name.</param> /// <param name="item">State name.</param> public void ProcessAnimatorState (StateInfo info) { string layerPrefix = (info.Layer > 0 || config.ForceLayerPrefix ? null : info.LayerName); string name = CodeGenerationUtils.GenerateStateName (config.AnimatorStatePrefix, info.Name, layerPrefix); name = name.FirstCharToUpper (); string fieldName = CodeGenerationUtils.GenerateStateName (config.AnimatorStateHashPrefix, info.Name, layerPrefix); fieldName = fieldName.FirstCharToLower (); // field declaration GenericFieldCodeElement field = new GenericFieldCodeElement (typeof(int), fieldName, "" + info.Id); field.ReadOnly = true; field.Summary.Add ("Hash of Animator state " + info.Name); classCodeElement.Fields.Add (field); string methodName = "Is" + name; // IsXXX method () MethodCodeElement<bool> method = new MethodCodeElement<bool> (methodName); method.Origin = "state " + info.Name; method.Code.Add ("return " + fieldName + " == animator.GetCurrentAnimatorStateInfo (" + info.Layer + ").nameHash" + ";"); method.Summary.Add ("true if the current Animator state of layer " + info.Layer + " is \"" + info.Name + "\"."); classCodeElement.Methods.Add (method); // overloaded IsXXX (int nameHash) MethodCodeElement<bool> methodWithLayerParameter = new MethodCodeElement<bool> (methodName); methodWithLayerParameter.Origin = "state " + info.Name; methodWithLayerParameter.AddParameter (typeof(int), "nameHash"); methodWithLayerParameter.Code.Add ("return nameHash == " + fieldName + ";"); methodWithLayerParameter.Summary.Add ("true if the given (state) nameHash equals Animator.StringToHash (\"" + info.Name + "\")."); classCodeElement.Methods.Add (methodWithLayerParameter); // state dictionary is filled in overriden method InitialiseEventManager object [] parameters = new object[] {info.Id, info.Layer, info.LayerName, info.Name, info.Tag, info.Speed, info.FootIK, info.Mirror, info.Motion.Name, info.Motion.Duration }; string parameterList = CodeElementUtils.GetCallParameterString (parameters); EventManagerInitialiser.Code.Add (StateInfoDict + ".Add (" + info.Id + ", new StateInfo (" + parameterList + "));"); }