public static void UpdateDictionary(this MissionEventContainer cont) { for (int i = 0; i < cont.allEvents.Count; i++) { if (!cont.EditorFolds.ContainsKey(cont.allEvents[i])) { cont.EditorFolds.Add(cont.allEvents[i], false); } } }
public IEnumerator DoEvents() { for (int i = 0; i < currentEvents.Count; i++) { MissionEventContainer container = currentEvents[i]; container.DoneCurrent = false; GameManager._intance.StartCoroutine(container.DoAll()); yield return(new WaitUntil(() => container.DoneCurrent)); } currentEvents.Clear(); }
public static void AddEvent(MissionEventContainer cont, Type t, Mission miss = null) { MissionEvent evt = null; evt = Activator.CreateInstance(t) as MissionEvent; if (evt == null) { return; } cont.allEvents.Add(evt); cont.Save(); }
public override void OnInspectorGUI() { Mission selectedMission = target as Mission; if (auxWindow == null) { TeamEditor teamEdit = Editor.CreateInstance <TeamEditor>(); if (selectedMission.Teams.Count > SessionState.GetInt("MissionEditor_LastTeamIndex", 0)) { teamEdit.Do(selectedMission.Teams[SessionState.GetInt("MissionEditor_LastTeamIndex", 0)], selectedMission); teamEdit.SetParent(this); auxWindow = teamEdit; } } EditorGUI.BeginChangeCheck(); Loadable next = EditorGUILayout.ObjectField("Next Mission", selectedMission.NextLoadable, typeof(Loadable), false) as Loadable; if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(selectedMission, "Modify Mission"); selectedMission.NextLoadable = next; } List <Team> teams = selectedMission.Teams; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Teams", EditorStyles.boldLabel, GUILayout.Width(50)); GUILayout.FlexibleSpace(); if (GUILayout.Button("+", EditorStyles.miniButton, GUILayout.Width(20))) { Undo.RecordObject(selectedMission, "Add Team"); teams.Add(new Team()); } EditorGUILayout.EndHorizontal(); int i = 0; for (i = 0; i < teams.Count; i++) { int _i = i; Team team = teams[_i]; EditorGUILayout.BeginHorizontal(); GUILayout.Space(10); if (GUILayout.Button("Team: " + _i + " Members: " + team.members.Count.ToString(), EditorStyles.miniButtonLeft)) { TeamEditor teamEdit = Editor.CreateInstance <TeamEditor>(); teamEdit.Do(team, selectedMission); teamEdit.SetParent(this); auxWindow = teamEdit; SessionState.SetInt("MissionEditor_LastTeamIndex", _i); } if (GUILayout.Button("Pop", EditorStyles.miniButtonRight, GUILayout.Width(35))) { TeamEditor teamEdit = Editor.CreateInstance <TeamEditor>(); teamEdit.Do(team, selectedMission); teamEdit.Show(); auxWindow = null; } EditorGUILayout.EndHorizontal(); } EditorGUILayout.BeginHorizontal(); EditorGUILayout.EndHorizontal(); GUILayout.Space(10); EditorGUILayout.LabelField("End Conditions", EditorStyles.boldLabel); selectedMission.ConditionSelector("Victory", ref ShowdCondition[0], ref selectedMission.WinDondition, ref ConditionTypes[0]); selectedMission.ConditionSelector("Defeat", ref ShowdCondition[1], ref selectedMission.LoseCondition, ref ConditionTypes[1]); GUILayout.Space(10); EditorGUI.BeginChangeCheck(); EditorGUILayout.LabelField("Intro Text", EditorStyles.boldLabel); string introText = EditorGUILayout.TextArea(selectedMission.MissionIntroText); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(selectedMission, "Modify Mission"); selectedMission.MissionIntroText = introText; } EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Events", EditorStyles.boldLabel); if (GUILayout.Button("+")) { Undo.RegisterCompleteObjectUndo(selectedMission, "Add Event Group"); selectedMission.events.Add(new MissionEventContainer()); } EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel++; for (int q = 0; q < selectedMission.events.Count; q++) { for (int z = 0; z < selectedMission.events[q].allEvents.Count; z++) { if (!eventEditors.ContainsKey(selectedMission.events[q].allEvents[z])) { UpdateDictionaries(); break; } } } int deleteindex = -1; for (int q = 0; q < selectedMission.events.Count; q++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(EditorStyles.helpBox); selectedMission.events[q].OnGUI(eventEditors, selectedMission); EditorGUILayout.EndVertical(); if (GUILayout.Button("X", GUILayout.Width(20))) { deleteindex = q; } EditorGUILayout.EndHorizontal(); } if (deleteindex != -1) { MissionEventContainer cont = selectedMission.events[deleteindex]; selectedMission.events.RemoveAt(deleteindex); if (cont.cond != null && AssetDatabase.GetAssetPath(cont.cond) == AssetDatabase.GetAssetPath(selectedMission)) { DestroyImmediate(cont.cond, true); } } EditorGUI.indentLevel--; GUILayout.Space(10); if (auxWindow != null) { if (auxWindow.Render()) { Editor.DestroyImmediate(auxWindow as EditorWindow); auxWindow = null; } } if (GUI.changed && !Application.isPlaying && selectedMission != null) { EditorUtility.SetDirty(selectedMission); } }
public static void OnGUI(this MissionEventContainer cont, Dictionary <MissionEvent, MissionEventEditor> editors, Mission miss = null) { EditorGUILayout.BeginHorizontal(); cont.MainFold = EditorGUILayout.Foldout(cont.MainFold, cont.editorName, true); EditorGUI.BeginChangeCheck(); if (GUILayout.Button("+", GUILayout.Width(25))) { GenericMenu CreateMenu = new GenericMenu(); CreateMenu.AddItem(new GUIContent("Kill Character"), false, AddEventMenu, new object[] { cont, typeof(ME_KillCharacter), miss }); CreateMenu.AddItem(new GUIContent("Give Item"), false, AddEventMenu, new object[] { cont, typeof(ME_GiveItem), miss }); CreateMenu.AddItem(new GUIContent("Visu 16"), false, AddEventMenu, new object[] { cont, typeof(ME_Visu16), miss }); CreateMenu.ShowAsContext(); } EditorGUILayout.EndHorizontal(); if (cont.MainFold) { EditorGUI.indentLevel++; MissionCondition.ConditionType t = cont.cond == null ? MissionCondition.ConditionType.Custom : cont.cond.conditionType; miss.ConditionSelector("Trigger when", ref cont.conditionFold, ref cont.cond, ref t); EditorGUILayout.Space(); EditorGUILayout.LabelField("Events", EditorStyles.boldLabel); for (int i = 0; i < cont.allEvents.Count; i++) { if (!cont.EditorFolds.ContainsKey(cont.allEvents[i])) { cont.UpdateDictionary(); } } int deleteIndex = -1; for (int i = 0; i < cont.allEvents.Count; i++) { if (cont.allEvents[i] != null) { EditorGUILayout.BeginHorizontal(); cont.EditorFolds[cont.allEvents[i]] = EditorGUILayout.Foldout(cont.EditorFolds[cont.allEvents[i]], cont.allEvents[i].editorName + " (" + (cont.allEvents[i]).GetType().Name + ")"); GUILayout.FlexibleSpace(); if (GUILayout.Button("X", GUILayout.Width(20))) { deleteIndex = i; } EditorGUI.BeginDisabledGroup(i == 0); if (GUILayout.Button("^", GUILayout.Width(20))) { cont.allEvents[i].listIndex--; cont.allEvents[i - 1].listIndex++; MissionEvent evt = cont.allEvents[i]; cont.allEvents[i] = cont.allEvents[i - 1]; cont.allEvents[i - 1] = evt; } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(i == cont.allEvents.Count - 1); if (GUILayout.Button("v", GUILayout.Width(20))) { cont.allEvents[i].listIndex++; cont.allEvents[i + 1].listIndex--; MissionEvent evt = cont.allEvents[i]; cont.allEvents[i] = cont.allEvents[i + 1]; cont.allEvents[i + 1] = evt; } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUI.indentLevel++; GUILayout.Space(20 * EditorGUI.indentLevel); if (cont.EditorFolds[cont.allEvents[i]]) { EditorGUILayout.BeginVertical(EditorStyles.helpBox); editors[cont.allEvents[i]].OnGUI(); EditorGUILayout.EndVertical(); } EditorGUI.indentLevel--; EditorGUILayout.EndHorizontal(); } } if (deleteIndex != -1) { cont.EditorFolds.Remove(cont.allEvents[deleteIndex]); cont.allEvents.RemoveAt(deleteIndex); cont.Save(); } EditorGUI.indentLevel--; } }