public static void SaveEmptyTree(OneWayTreeNode node, int pathId) { LoadJsonFiles.SaveSerializableToJson( ExtractQuestSet(node) , QUESTS_LOAD_PATH + pathId, false); LoadJsonFiles.SaveSerializableToJson( ExtractQuestDirections(node) , QUESTTREE_LOAD_PATH + pathId, false); }
public void DrawEditableTree(OneWayTreeNode node) { node.data.title = EditorGUILayout.TextField("Title", node.data.title); node.data.description = EditorGUILayout.TextField("Description: " + node.data.description, node.data.description); node.data.reward.money = EditorGUILayout.IntField("Money: " + node.data.reward.money, node.data.reward.money); // waves ... for (int i = 0; i < node.data.waves.Length; i++) { WaveItem item = node.data.waves[i]; item.itemId = (WaveSpawnItems)EditorGUILayout.EnumFlagsField("Unit: " + item.itemId, item.itemId); item.times = EditorGUILayout.IntField("Times: " + item.times, item.times); item.spawnRate = EditorGUILayout.FloatField("Spawn rate: " + item.spawnRate, item.spawnRate); if (GUILayout.Button("- wave")) { node.data.RemoveWave(i); } } if (GUILayout.Button("+ wave")) { node.data.AddWave(new WaveItem { itemId = 0, times = 1, spawnRate = GameManager.EnemySpawnRate }); } // end waves... if (GUILayout.Button("+ node")) { node.children.Add(new OneWayTreeNode() { children = new System.Collections.Generic.List <OneWayTreeNode>(), data = new QuestInfo() { title = "Not assigned", reward = new QuestReward() { money = 100 }, description = "empty", waves = new WaveItem[] { new WaveItem { itemId = 0, times = 1 } } } } ); } for (int i = 0; i < node.children.Count; i++) { EditorGUILayout.LabelField("L_" + i + "_>"); EditorGUI.indentLevel++; DrawEditableTree(node.children[i]); EditorGUI.indentLevel--; } }
static QuestSet ExtractQuestSet(OneWayTreeNode node) { QuestSet set = new QuestSet(); OneWayTreeNode[] nodes = node.rAsList(); QuestInfo[] infos = new QuestInfo[nodes.Length]; for (int i = 0; i < nodes.Length; i++) { infos[i] = nodes[i].data; } set.quests = infos; return(set); }
public static OneWayTreeNode LoadTree(string QUESTS_LOAD_PATH, string QUESTTREE_LOAD_PATH) { QuestSet qs = LoadJsonFiles.LoadJsonToSerializable <QuestSet>(QUESTS_LOAD_PATH); if (qs == null) { return(null); } return(OneWayTreeNode.ConstructQuestTree( qs.quests, LoadJsonFiles.LoadJsonToSerializable <QuestTreeDirections>(QUESTTREE_LOAD_PATH) )); }
static QuestTreeDirections ExtractQuestDirections(OneWayTreeNode node) { QuestTreeDirections dirs = new QuestTreeDirections(); OneWayTreeNode[] nodes = node.rAsList(); dirs.nodes = new IntSerializableArr[nodes.Length]; for (int i = 0; i < dirs.nodes.Length; i++) { dirs.nodes[i] = new IntSerializableArr(); dirs.nodes[i].directions = new int[nodes[i].children.Count]; for (int j = 0; j < dirs.nodes[i].directions.Length; j++) { dirs.nodes[i].directions[j] = i + j + 1;// untested } } return(dirs); }
public OneWayTreeNode[] rAsList() { List <OneWayTreeNode> arr = new List <OneWayTreeNode>(); Queue <OneWayTreeNode> q = new Queue <OneWayTreeNode>(); q.Enqueue(this); while (q.Count > 0) { OneWayTreeNode node = q.Dequeue(); arr.Add(node); for (int i = 0; i < node.children.Count; i++) { q.Enqueue(node.children[i]); } } return(arr.ToArray()); }
public void DrawTree(OneWayTreeNode node) { EditorGUILayout.LabelField(node.data.title); EditorGUILayout.LabelField("Description: " + node.data.description); EditorGUILayout.LabelField("Money: " + node.data.reward.money); foreach (var item in node.data.waves) { EditorGUILayout.LabelField("Unit: " + item.itemId); EditorGUILayout.LabelField("Times: " + item.times); EditorGUILayout.LabelField("Spawn rate: " + item.spawnRate); } for (int i = 0; i < node.children.Count; i++) { EditorGUILayout.LabelField("L_" + i + "_>"); EditorGUI.indentLevel++; DrawTree(node.children[i]); EditorGUI.indentLevel--; } }
public static OneWayTreeNode ConstructQuestTree(object[] data, QuestTreeDirections directions) { if (data.Length == 0 || directions.nodes.Length != data.Length) { Debug.Log("err: " + (data.Length == 0) + " " + (directions.nodes.Length != data.Length)); return(null); } OneWayTreeNode[] nodes = new OneWayTreeNode[data.Length]; for (int i = 0; i < data.Length; i++) { nodes[i] = new OneWayTreeNode(); nodes[i].data = data[i] as QuestInfo; nodes[i].id = i; } // put down directions and mark those who have any incoming. // to find root later(0 incoming). bool[] hasInc = new bool[data.Length]; for (int i = 0; i < data.Length; i++) { for (int j = 0; j < directions.nodes[i].directions.Length; j++) { if (nodes[i] == nodes[directions.nodes[i].directions[j]]) { continue; } nodes[i].Add(nodes[directions.nodes[i].directions[j]]); hasInc[directions.nodes[i].directions[j]] = true; } } // paths.. just map who the child is. or connect them in linear fashion // // find root - node that has 0 incoming connections for (int i = 0; i < hasInc.Length; i++) { if (!hasInc[i]) { return(nodes[i]); } } return(null);// err }
private void OnGUI() { if (Application.isPlaying) { scroll = EditorGUILayout.BeginScrollView(scroll); DrawTree(GameManager.Instance.quests.GetQuestTree()); EditorGUILayout.EndScrollView(); } else { EditorGUILayout.LabelField("Press play... \n 0 is different than DEFAULT. -1 is DEFAULT."); scroll = EditorGUILayout.BeginScrollView(scroll); if (GUILayout.Button("Open load path")) { node = QuestBehaviours.LoadTree(fileId); } if (GUILayout.Button("Load ALL quest files ")) { allFiles.Clear(); for (int i = 0; i < 100; i++) { OneWayTreeNode node1 = QuestBehaviours.LoadTree(i); if (node1 != null) { allFiles.Add(node1); } } } if (GUILayout.Button("Load DEFAULT quest file ")) { node = QuestBehaviours.LoadTree(-1); } for (int i = 0; i < allFiles.Count; i++) { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Load quest file " + i)) { node = allFiles[i]; } if (GUILayout.Button("Save as default" + i)) { QuestBehaviours.SaveEmptyTree(allFiles[i]); } EditorGUILayout.EndHorizontal(); } // atm only for saving. fileId = EditorGUILayout.IntField(fileId); if (GUILayout.Button("Save quest file")) { if (fileId > -1) { QuestBehaviours.SaveEmptyTree(node, fileId); } else { QuestBehaviours.SaveEmptyTree(node); } } // edit tree - add items, edit them. if (node != null && node.data != null && node.data.reward != null) { DrawEditableTree(node); } EditorGUILayout.EndScrollView(); } }
internal void SetQuest(OneWayTreeNode tree) { GameManager.Instance.quests.SetQuestTree( tree ); }
internal void SetQuestTree(OneWayTreeNode root) //QuestInfo[] quests) { { manager.allQuestsAsTree = root; }