//not in used void ConfigureSpawnItemList() { EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(new GUIContent("Spawn Item List:", ""), GUILayout.MaxWidth(100), GUILayout.ExpandWidth(true)); if (GUILayout.Button("+", GUILayout.Width(40), GUILayout.MaxHeight(14))) { instance.spawnItemList.Add(new CollectibleSpawnInfo()); } if (GUILayout.Button("-", GUILayout.Width(40), GUILayout.MaxHeight(14))) { instance.spawnItemList.RemoveAt(instance.spawnItemList.Count - 1); } EditorGUILayout.EndHorizontal(); //~ EditorGUILayout.BeginHorizontal(); //~ SpaceH(20); //~ EditorGUILayout.LabelField("Item", GUILayout.Width(130)); //~ EditorGUILayout.LabelField("chance", GUILayout.Width(50)); //~ EditorGUILayout.LabelField("cd:", GUILayout.Width(30)); //~ EditorGUILayout.EndHorizontal(); for (int i = 0; i < instance.spawnItemList.Count; i++) { CollectibleSpawnInfo spInfo = instance.spawnItemList[i]; EditorGUILayout.BeginHorizontal(); //~ EditorGUILayout.LabelField(" -", GUILayout.MaxWidth(25)); SpaceH(10); int itemIdx = spInfo.item != null?TDSEditor.GetCollectibleIndex(spInfo.item.ID) : 0; EditorGUILayout.LabelField("-", GUILayout.MaxWidth(10)); itemIdx = EditorGUILayout.Popup(itemIdx, collectibleLabel, GUILayout.Width(130)); if (itemIdx == 0) { spInfo.item = null; } else if (itemIdx > 0) { spInfo.item = collectibleDB.collectibleList[itemIdx - 1]; } spInfo.chance = EditorGUILayout.FloatField(spInfo.chance, GUILayout.Width(30)); //SpaceH(10); spInfo.cooldown = EditorGUILayout.FloatField(spInfo.cooldown, GUILayout.Width(30)); //~ spInfo.currentCD=EditorGUILayout.FloatField(spInfo.currentCD, GUILayout.Width(30)); EditorGUILayout.EndHorizontal(); } }
void DrawObjective(ObjectiveTracker objective) { if (objective == null) { return; } EditorGUILayout.Space(); //cont=new GUIContent("Main Objective:", "Check if this is the main objective of the level. Completing this will end the level"); //objective.mainObjective=EditorGUILayout.Toggle(cont, objective.mainObjective); cont = new GUIContent("Wait For Timer:", "Enable to wait for the timer to run out before trigger a level complete state"); objective.waitForTimer = EditorGUILayout.Toggle(cont, objective.waitForTimer); EditorGUILayout.Space(); cont = new GUIContent("EnableTargetScore:", "Check if the objective is to gain a certain amount of score"); objective.enableScoring = EditorGUILayout.Toggle(cont, objective.enableScoring); cont = new GUIContent("Target Score:", "The target score the player needs to gain to complete the objective"); if (objective.enableScoring) { objective.targetScore = EditorGUILayout.FloatField(cont, objective.targetScore); } else { EditorGUILayout.LabelField(cont, new GUIContent("-", "")); } EditorGUILayout.Space(); cont = new GUIContent("Clear All Hostile:", "Check if all active hostile unit in the level has to be destroyed before the objective is completed"); objective.clearAllHostile = EditorGUILayout.Toggle(cont, objective.clearAllHostile); if (!objective.clearAllHostile) { cont = new GUIContent("Unit List:", "Unit in the scene that need to be destroyed to complete the objective"); showUnitList = EditorGUILayout.Foldout(showUnitList, cont); if (showUnitList) { int count = objective.unitList.Count; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("", GUILayout.MaxWidth(15)); count = EditorGUILayout.IntField("Count", count); EditorGUILayout.EndHorizontal(); while (count > objective.unitList.Count) { objective.unitList.Add(null); } while (count < objective.unitList.Count) { objective.unitList.RemoveAt(objective.unitList.Count - 1); } for (int i = 0; i < objective.unitList.Count; i++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("", GUILayout.MaxWidth(20)); objective.unitList[i] = (Unit)EditorGUILayout.ObjectField("Element " + i, objective.unitList[i], typeof(Unit), true); EditorGUILayout.EndHorizontal(); } } } EditorGUILayout.Space(); //public List<Collectible> collectibleList=new List<Collectible>(); //collectible that exist in the scene cont = new GUIContent("Collectible List:", "Collectible item in the scene that need to be collected to complete the objective"); showCollectibleList = EditorGUILayout.Foldout(showCollectibleList, cont); if (showCollectibleList) { int count = objective.collectibleList.Count; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("", GUILayout.MaxWidth(15)); count = EditorGUILayout.IntField("Count", count); EditorGUILayout.EndHorizontal(); while (count > objective.collectibleList.Count) { objective.collectibleList.Add(null); } while (count < objective.collectibleList.Count) { objective.collectibleList.RemoveAt(objective.collectibleList.Count - 1); } for (int i = 0; i < objective.collectibleList.Count; i++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("", GUILayout.MaxWidth(20)); objective.collectibleList[i] = (Collectible)EditorGUILayout.ObjectField("Element " + i, objective.collectibleList[i], typeof(Collectible), true); EditorGUILayout.EndHorizontal(); } } EditorGUILayout.Space(); cont = new GUIContent("Clear All Spawner:", "Check if all active unit spawner in the level has to be destroyed/cleared before the objective is completed"); objective.clearAllSpawner = EditorGUILayout.Toggle(cont, objective.clearAllSpawner); if (!objective.clearAllSpawner) { cont = new GUIContent("Unit Spawner List:", "Unit Spawner in the scene that need to be cleared to complete the objective"); showSpawnerList = EditorGUILayout.Foldout(showSpawnerList, cont); if (showSpawnerList) { int count = objective.spawnerList.Count; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("", GUILayout.MaxWidth(15)); count = EditorGUILayout.IntField("Count", count); EditorGUILayout.EndHorizontal(); while (count > objective.spawnerList.Count) { objective.spawnerList.Add(null); } while (count < objective.spawnerList.Count) { objective.spawnerList.RemoveAt(objective.spawnerList.Count - 1); } for (int i = 0; i < objective.spawnerList.Count; i++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("", GUILayout.MaxWidth(20)); objective.spawnerList[i] = (UnitSpawner)EditorGUILayout.ObjectField("Element " + i, objective.spawnerList[i], typeof(UnitSpawner), true); EditorGUILayout.EndHorizontal(); } } } EditorGUILayout.Space(); cont = new GUIContent("Objective Trigger List:", ""); showTriggerList = EditorGUILayout.Foldout(showTriggerList, cont); if (showTriggerList) { int count = objective.triggerList.Count; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("", GUILayout.MaxWidth(15)); count = EditorGUILayout.IntField("Count", count); EditorGUILayout.EndHorizontal(); while (count > objective.triggerList.Count) { objective.triggerList.Add(null); } while (count < objective.triggerList.Count) { objective.triggerList.RemoveAt(objective.triggerList.Count - 1); } for (int i = 0; i < objective.triggerList.Count; i++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("", GUILayout.MaxWidth(20)); objective.triggerList[i] = (Trigger)EditorGUILayout.ObjectField("Element " + i, objective.triggerList[i], typeof(Trigger), true); EditorGUILayout.EndHorizontal(); } } EditorGUILayout.Space(); cont = new GUIContent("Objective Targets:", "Specific numbers of any particular unit that needs to be destroyed before the level is cleared"); EditorGUILayout.LabelField(cont); if (objective.prefabList.Count != objective.prefabCountList.Count) { //if(objective.targetUnitList.Count>objective.targetUnitCountList.Count) while (objective.prefabList.Count > objective.prefabCountList.Count) { objective.prefabCountList.Add(1); } while (objective.prefabList.Count < objective.prefabCountList.Count) { objective.prefabCountList.RemoveAt(objective.prefabCountList.Count - 1); } } for (int i = 0; i < objective.prefabList.Count + 1; i++) { if (i == objective.prefabList.Count && objective.prefabList.Count == unitAIDB.unitList.Count) { continue; } int unitIdx = i < objective.prefabList.Count ? TDSEditor.GetUnitAIIndex(objective.prefabList[i].prefabID) : 0; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(" - ", GUILayout.MaxWidth(20)); //GUILayout.MaxWidth(115)); unitIdx = EditorGUILayout.Popup(unitIdx, unitAILabel); if (i < objective.prefabList.Count) { objective.prefabCountList[i] = EditorGUILayout.IntField(objective.prefabCountList[i], GUILayout.MaxWidth(40)); objective.prefabCountList[i] = Mathf.Max(1, objective.prefabCountList[i]); } else { EditorGUILayout.LabelField(" ", GUILayout.MaxWidth(40)); } EditorGUILayout.EndHorizontal(); if (i < objective.prefabList.Count) { if (unitIdx == 0) { objective.prefabList.RemoveAt(i); } else if (unitIdx > 0 && !objective.prefabList.Contains(unitAIDB.unitList[unitIdx - 1])) { objective.prefabList[i] = unitAIDB.unitList[unitIdx - 1]; } } else { if (unitIdx > 0 && !objective.prefabList.Contains(unitAIDB.unitList[unitIdx - 1])) { objective.prefabList.Add(unitAIDB.unitList[unitIdx - 1]); } } } EditorGUILayout.Space(); cont = new GUIContent("Objective Collectibles:", "Specific numbers of any particular collectible that needs to be collectible before the level is cleared"); EditorGUILayout.LabelField(cont); if (objective.colPrefabList.Count != objective.colPrefabCountList.Count) { while (objective.colPrefabList.Count > objective.colPrefabCountList.Count) { objective.colPrefabCountList.Add(1); } while (objective.colPrefabList.Count < objective.colPrefabCountList.Count) { objective.colPrefabCountList.RemoveAt(objective.colPrefabCountList.Count - 1); } } for (int i = 0; i < objective.colPrefabList.Count + 1; i++) { //if(i==objective.colPrefabList.Count && objective.prefabList.Count==unitAIDB.unitList.Count) continue; int itemIdx = i < objective.colPrefabList.Count ? TDSEditor.GetCollectibleIndex(objective.colPrefabList[i].ID) : 0; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(" - ", GUILayout.MaxWidth(20)); //GUILayout.MaxWidth(115)); itemIdx = EditorGUILayout.Popup(itemIdx, collectibleLabel); if (i < objective.colPrefabList.Count) { objective.colPrefabCountList[i] = EditorGUILayout.IntField(objective.colPrefabCountList[i], GUILayout.MaxWidth(40)); objective.colPrefabCountList[i] = Mathf.Max(1, objective.colPrefabCountList[i]); } else { EditorGUILayout.LabelField(" ", GUILayout.MaxWidth(40)); } EditorGUILayout.EndHorizontal(); if (i < objective.colPrefabList.Count) { if (itemIdx == 0) { objective.colPrefabList.RemoveAt(i); } else if (itemIdx > 0 && !objective.colPrefabList.Contains(collectibleDB.collectibleList[itemIdx - 1])) { objective.colPrefabList[i] = collectibleDB.collectibleList[itemIdx - 1]; } } else { if (itemIdx > 0 && !objective.colPrefabList.Contains(collectibleDB.collectibleList[itemIdx - 1])) { objective.colPrefabList.Add(collectibleDB.collectibleList[itemIdx - 1]); } } } //~ public List<Collectible> colPrefabList=new List<Collectible>(); //the collectible that need to be collect //~ public List<int> colPrefabCountList=new List<int>(); //the count required, editable in editor }
void OnSelectionChange() { if (window == null) { return; } srlObj = null; selectedCltList = new List <Collectible>(); UnityEngine.Object[] filtered = Selection.GetFiltered(typeof(Collectible), SelectionMode.Editable); for (int i = 0; i < filtered.Length; i++) { selectedCltList.Add((Collectible)filtered[i]); } //if no no relevent object is selected if (selectedCltList.Count == 0) { SelectItem(); if (collectibleDB.collectibleList.Count > 0 && selectID >= 0) { UpdateObjectHierarchyList(collectibleDB.collectibleList[selectID].gameObject); } } else { //only one relevent object is selected if (selectedCltList.Count == 1) { //if the selected object is a prefab and match the selected item in editor, do nothing if (selectID > 0 && selectedCltList[0] == collectibleDB.collectibleList[selectID]) { UpdateObjectHierarchyList(selectedCltList[0].gameObject); } //if the selected object doesnt match... else { //if the selected object existed in DB if (TDSEditor.ExistInDB(selectedCltList[0])) { window.selectID = TDSEditor.GetCollectibleIndex(selectedCltList[0].ID) - 1; UpdateObjectHierarchyList(selectedCltList[0].gameObject); SelectItem(); } //if the selected object is not in DB else { selectID = -1; UpdateObjectHierarchyList(selectedCltList[0].gameObject); } } } //selected multiple editable object else { selectID = -1; UpdateObjectHierarchyList(selectedCltList[0].gameObject); } srlObj = new SerializedObject(filtered); } Repaint(); }