static List <ConstGenSettings.StatesCTRLR> RetriveValues() { // find controller GUIDs and create StatesCTRLR list string[] controllers = AssetDatabase.FindAssets("t:animatorcontroller"); List <ConstGenSettings.StatesCTRLR> statesControllers = new List <ConstGenSettings.StatesCTRLR>(); foreach (string CTRLR in controllers) { // get controller and it's path string path = AssetDatabase.GUIDToAssetPath(CTRLR); UnityEditor.Animations.AnimatorController animCTRLR = AssetDatabase.LoadAssetAtPath <UnityEditor.Animations.AnimatorController>(path); ConstGenSettings.StatesCTRLR stateCTRLR = new ConstGenSettings.StatesCTRLR(); stateCTRLR.name = animCTRLR.name; if (animCTRLR.layers.Length == 0) { continue; } // loop throug layers for (int i = 0; i < animCTRLR.layers.Length; i++) { var layer_ = animCTRLR.layers[i]; // get layer ConstGenSettings.AnimLayer animLayer = new ConstGenSettings.AnimLayer(); animLayer.name = layer_.name; // store layer name if (layer_.stateMachine.states.Length == 0) { continue; } // loop through layer states for (int i2 = 0; i2 < layer_.stateMachine.states.Length; i2++) { var state_ = layer_.stateMachine.states[i2]; // get state ConstGenSettings.AnimState animState = new ConstGenSettings.AnimState(); animState.name = state_.state.name; // store state name animState.tag = state_.state.tag; // store tag name // add state to layers animLayer.animStates.Add(animState); } // add layers to controller stateCTRLR.animLayers.Add(animLayer); } // add controllers to list of controllers statesControllers.Add(stateCTRLR); } return(statesControllers); }
private static void GenerateCode() { generator.GenerateCodeFile(FilePath, generator.GetOutputPath(), content => { WrappedInt indentCount = 0; // NOTE: indentCount is automatically increamented or decreamented by // ContentWriter methods // An indent is added when a new CurlyBrackets IDisposable instance is created // and removed everytime that IDisposable instance is disposed of // (when the control has excited from the using statement) content.WriteIndentedLine(indentCount, generator.GetHeaderText(instance.GetScriptName())); content.WriteImports("UnityEngine"); using (new CurlyBrackets(content, ConstantGenerator.OutputFileNamespace, indentCount)) { using (new CurlyBrackets(content, "public static class " + FileName, indentCount)) { // loop through all animators for (int i = 0; i < instance.newStateCTRLRS.Count; i++) { // cache current animator ConstGenSettings.StatesCTRLR animState = instance.newStateCTRLRS[i]; // write animator name header using (new CurlyBrackets(content, "public static class " + generator.MakeIdentifier(animState.name), indentCount)) { // loop through layers for (int i2 = 0; i2 < animState.animLayers.Count; i2++) { // cache current layer ConstGenSettings.AnimLayer animLayer = animState.animLayers[i2]; // write layer group header name using (new CurlyBrackets(content, "public static class " + generator.MakeIdentifier(animLayer.name) + "_L", indentCount)) { // loop through states for (int i3 = 0; i3 < animLayer.animStates.Count; i3++) { // cache current state ConstGenSettings.AnimState state_ = animLayer.animStates[i3]; // write state name group at header using (new CurlyBrackets(content, "public static class " + generator.MakeIdentifier(state_.name) + "_S", indentCount)) { // write state name content.WriteIndentedFormatLine(indentCount, "public const string name = @\"{0}\";", state_.name); // write state tag if present if (state_.tag != string.Empty && state_.tag != null) { content.WriteIndentedFormatLine(indentCount, "public const string tag = @\"{0}\";", state_.tag); } } } } } } } } } }); }
/// <summary> /// checks if there is any changes on the constants /// </summary> private static void UpdateFile() { if (Application.isPlaying) { return; } bool generate = false; instance.newStateCTRLRS = RetriveValues(); // check if the number of controllers has changed if (instance.newStateCTRLRS.Count != instance.oldStateCTRLRS.Count) { generate = true; } else { // loop through animator controllers for (int i = 0; i < instance.oldStateCTRLRS.Count; i++) { List <ConstGenSettings.AnimLayer> oldAnimLayers = instance.oldStateCTRLRS[i].animLayers; List <ConstGenSettings.AnimLayer> newAnimLayers = instance.newStateCTRLRS[i].animLayers; // check if the number of layers has changed if (oldAnimLayers.Count != newAnimLayers.Count) { generate = true; break; } if (!generate) { // loop through all the animator layers for (int i2 = 0; i2 < oldAnimLayers.Count; i2++) { ConstGenSettings.AnimLayer oldLayer = oldAnimLayers[i2]; ConstGenSettings.AnimLayer newLayer = newAnimLayers[i2]; // compare layer names if it has changed if (oldLayer.name != newLayer.name) { generate = true; break; } if (!generate) // check the anim states in the layer { List <ConstGenSettings.AnimState> oldStates = oldLayer.animStates; List <ConstGenSettings.AnimState> newStates = newLayer.animStates; // check if the number of states has changed if (oldStates.Count != newStates.Count) { generate = true; break; } if (!generate) // loop through all states in that layer { for (int i3 = 0; i3 < oldStates.Count; i3++) { ConstGenSettings.AnimState oldState = oldStates[i3]; ConstGenSettings.AnimState newState = newStates[i3]; // compare names if it has changed if (oldState.name != newState.name) { generate = true; break; } // compare tags if it has changed if (oldState.tag != newState.tag) { generate = true; break; } } } } if (generate) // break out of layers loop { break; } } } if (generate) // break out of animators loop { break; } } } }