You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.9 KiB
76 lines
2.9 KiB
// 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<Flowchart>(); |
|
|
|
var blockPos = Vector2.zero; |
|
var blockPosStep = new Vector2(0, 60); |
|
|
|
//adding a block for all event handlers |
|
foreach (var eventHandlerType in TypeCache.GetTypesWithAttribute<EventHandlerInfoAttribute>()) |
|
{ |
|
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<string, Block>(); |
|
foreach (var commandType in TypeCache.GetTypesWithAttribute<CommandInfoAttribute>()) |
|
{ |
|
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<VariableInfoAttribute>()) |
|
{ |
|
Variable newVariable = newGO.AddComponent(varType) as Variable; |
|
newVariable.Key = flow.GetUniqueVariableKey(""); |
|
flow.Variables.Add(newVariable); |
|
} |
|
} |
|
} |
|
|
|
#endif |
|
} |