// This code is part of the Fungus library (https://github.com/snozbot/fungus) // It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace Fungus.EditorUtils { #if UNITY_2019_2_OR_NEWER public static class GenerateEverythingMenuItem { [MenuItem("Tools/Fungus/Utilities/Generate Everything Flowchart")] public static void GenerateEverythingFlowchart() { var newGO = new GameObject("Flowchart w/ EVERYTHING"); var flow = newGO.AddComponent(); var blockPos = Vector2.zero; var blockPosStep = new Vector2(0, 60); //adding a block for all event handlers foreach (var eventHandlerType in TypeCache.GetTypesWithAttribute()) { var block = flow.CreateBlock(blockPos); blockPos += blockPosStep; block.BlockName = eventHandlerType.Name; EventHandler newHandler = newGO.AddComponent(eventHandlerType) as EventHandler; newHandler.ParentBlock = block; block._EventHandler = newHandler; } //reset head blockPos = new Vector2(200, 0); //adding a block for each category, fill it with its commands var blockComCats = new Dictionary(); foreach (var commandType in TypeCache.GetTypesWithAttribute()) { var commandTypeAttr = commandType.GetCustomAttributes(typeof(CommandInfoAttribute), false)[0] as CommandInfoAttribute; blockComCats.TryGetValue(commandTypeAttr.Category, out Block targetBlock); if (targetBlock == null) { targetBlock = flow.CreateBlock(blockPos); blockPos += blockPosStep; targetBlock.BlockName = commandTypeAttr.Category; blockComCats[commandTypeAttr.Category] = targetBlock; } var newCommand = newGO.AddComponent(commandType) as Command; newCommand.ParentBlock = targetBlock; newCommand.ItemId = flow.NextItemId(); // Let command know it has just been added to the block newCommand.OnCommandAdded(targetBlock); targetBlock.CommandList.Add(newCommand); } //add all variable types foreach (var varType in TypeCache.GetTypesWithAttribute()) { Variable newVariable = newGO.AddComponent(varType) as Variable; newVariable.Key = flow.GetUniqueVariableKey(""); flow.Variables.Add(newVariable); } } } #endif }