static void RebuildEffects() { //Load in our definitions from the file EffectConnections declarations = AssetDatabase.LoadAssetAtPath <EffectConnections>("Assets/Scripts/CustomEditor/Effects/Effect Connections.asset"); declarations.connections.Sort((a, b) => a.priority.CompareTo(b.priority)); if (declarations == null) { Debug.LogError("AGH IT'S ALL ON FIRE WHAT DID YOU CHANGE"); Debug.LogError("The EffectFileWizard is having trouble finding the EffectConnections at 'Assets/Scripts/CustomEditor/Effects/Effect Connections.asset'. Did you move this? Move it back for fix the wizard."); return; } Debug.Log($"Connections asset found. There are {declarations.connections.Count} connections total, which will be added to the files."); //Write the declarations into Monster.cs WriteConnections(declarations); WriteEffect(declarations); WriteTemplate(declarations); //Reload the asset database, triggering a recompile and yelling at us if this didn't work right. Debug.Log("Finished all writes, reloading assets and recompiling."); AssetDatabase.Refresh(); }
static void WriteTemplate(EffectConnections declarations) { string path = GetPathTo("EffectTemplate.cs.txt"); string templatePath = GetPathTo("EffectTemplateTemplate.txt"); StreamReader reader = new StreamReader(templatePath); List <string> lines = new List <string>(); while (true) { string line = reader.ReadLine(); if (line == null) { break; } lines.Add(line); } reader.Close(); StreamWriter writer = new StreamWriter(path, false); for (int i = 0; i < lines.Count; i++) { if (lines[i].Equals(" //AUTO CONNECTIONS")) { for (int j = 0; j < declarations.connections.Count; j++) { writer.WriteLine($" //{declarations.connections[j].description}"); writer.WriteLine($" //public override void {declarations.connections[j].name}({TypesForFunction(declarations.connections[j])}) {{}}"); writer.WriteLine(); } } else { writer.WriteLine(lines[i]); } } writer.Close(); Debug.Log("Finished writing script template"); }
static void WriteConnections(EffectConnections declarations) { string path = GetPathTo("Connections.cs"); string templatePath = GetPathTo("ConnectionTemplate.txt"); StreamReader reader = new StreamReader(templatePath); List <string> lines = new List <string>(); while (true) { string line = reader.ReadLine(); if (line == null) { break; } lines.Add(line); } reader.Close(); StreamWriter writer = new StreamWriter(path, false); for (int i = 0; i < lines.Count; i++) { writer.WriteLine(lines[i]); if (lines[i].Equals(" //BEGIN AUTO EVENTS")) { //Write in the lines! foreach (Connection c in declarations.connections) { writer.WriteLine($" public OrderedEvent{TypeName(c)} {c.name} = new OrderedEvent{TypeName(c)}();"); } writer.WriteLine(); } } writer.Close(); Debug.Log("Finished writing connections"); }
static void WriteEffect(EffectConnections declarations) { string path = GetPathTo("Effect.cs"); string templatePath = GetPathTo("EffectTemplate.txt"); StreamReader reader = new StreamReader(templatePath); List <string> lines = new List <string>(); while (true) { string line = reader.ReadLine(); if (line == null) { break; } lines.Add(line); } reader.Close(); StreamWriter writer = new StreamWriter(path, false); for (int i = 0; i < lines.Count; i++) { writer.WriteLine(lines[i]); if (lines[i].Equals(" //AUTO VARIABLE")) { writer.WriteLine($" int numConnections = {declarations.connections.Count};"); } else if (lines[i].Equals(" //AUTO SETUP")) { writer.WriteLine(); //Write in the lines! for (int j = 0; j < declarations.connections.Count; j++) { WriteSetup(declarations.connections[j], writer, j); writer.WriteLine(); } } else if (lines[i].Equals(" //BEGIN AUTO CONNECT")) { writer.WriteLine(); for (int j = 0; j < declarations.connections.Count; j++) { writer.WriteLine($" if (connections[{j}] >= 0) {{ c.{declarations.connections[j].name}.AddListener(connections[{j}], {declarations.connections[j].name}); }}"); writer.WriteLine(); } } else if (lines[i].Equals(" //BEGIN AUTO DISCONNECT")) { writer.WriteLine(); for (int j = 0; j < declarations.connections.Count; j++) { writer.WriteLine($" if (connections[{j}] >= 0) {{ c.{declarations.connections[j].name}.RemoveListener({declarations.connections[j].name}); }}"); writer.WriteLine(); } } else if (lines[i].Equals(" //AUTO DECLARATIONS")) { writer.WriteLine(); for (int j = 0; j < declarations.connections.Count; j++) { writer.WriteLine($" public virtual void {declarations.connections[j].name}({TypesForFunction(declarations.connections[j])}) {{}}"); } } } writer.Close(); Debug.Log("Finished writing effect file"); }