void PickLevel(int index) { LevelPickerWizard.Show( new DirectoryInfo(LevelPath), FilterDelegate, delegate(FileInfo selected) { if (levelData.Count == index) { levelData.Add(new LevelEntry()); } if (index < levelData.Count) { levelData[index].Name = Path.GetFileNameWithoutExtension(selected.FullName); levelData[index].File = selected; levelData[index].Dialogue = new FileInfo(DialoguePath + levelData[index].Name + ".txt"); Save(); } }); }
void OnGUI() { title = "Level Director"; GUILayout.Space(10); _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition); //.BeginScrollView( // Debug.Log(_scrollPosition.ToString()); //int id = 1; float orderWidth = GetMaxOrderWidth(); if (Event.current.type == EventType.MouseDown) { rectData.Clear(); } GUILayout.BeginVertical(); for (int i = 0; i < levelData.Count; ++i) { int pageIndex = (i / LevelsPerPage); if (i % LevelsPerPage == 0) { if (i != 0) { // EditorGUILayout.EndToggleGroup(); } //GUILayout.Label("Page " + (pageIndex + i), EditorStyles.boldLabel); //pageToggles[pageIndex] = //EditorGUILayout.BeginToggleGroup("Page " + (pageIndex + 1), pageToggles[pageIndex]); pageToggles[pageIndex] = EditorGUILayout.Foldout(pageToggles[pageIndex], "Page " + (pageIndex + 1)); //GUILayout.Label("Page " + (i / LevelsPerPage + 1), EditorStyles.boldLabel); } if (!pageToggles[pageIndex]) { if (Event.current.type == EventType.MouseDown) { rectData.Add(new Rect()); } continue; } //EditorGUILayout.BeginToggleGroup( GUILayout.BeginHorizontal(); GUILayout.Space(5); if (GUILayout.Button((i + 1).ToString(), EditorStyles.objectField, GUILayout.Width(orderWidth))) { //Debug.Log("Placeholder!"); PickLevel(i); } if (GUILayout.Button("-", EditorStyles.miniButtonLeft, GUILayout.ExpandWidth(false))) { //_saveDirty = true; levelData.RemoveAt(i); Save(); this.Repaint(); return; //rectData.RemoveAt(i); } if (GUILayout.Button("edit", EditorStyles.miniButtonMid, GUILayout.ExpandWidth(false))) { TextEditorWizard.Show("Edit Level", levelData[i].File); } if (GUILayout.Button("rename", EditorStyles.miniButtonRight, GUILayout.ExpandWidth(false))) { Rename(i); } //GUILayout.Button("Dialogue", GUILayout.ExpandWidth(false)); //GUILayout.Label((i + 1).ToString(), GUILayout.Width(orderWidth)); GUILayout.Space(5); var absoluteSize = EditorStyles.largeLabel.CalcSize(new GUIContent(levelData[i].Name)); if (!levelData[i].File.Exists) { var pre1 = GUI.color; GUI.color = Color.cyan; //GUI.contentColor = Color.white; GUILayout.Label("(error)", EditorStyles.miniLabel); GUI.color = pre1; } if ((selectedIndex == i || hoverIndex == i) && MouseInside()) { GUILayout.Label(levelData[i].Name, EditorStyles.toolbarTextField, GUILayout.Width(absoluteSize.x), GUILayout.Height(absoluteSize.y)); } else { GUILayout.Label(levelData[i].Name, GUILayout.Width(absoluteSize.x), GUILayout.Height(absoluteSize.y)); } if (Event.current.type == EventType.MouseDown) { var rect = GUILayoutUtility.GetLastRect(); rect.x -= _scrollPosition.x; rect.y -= _scrollPosition.y; rectData.Add(rect); //Debug.Log(rectData[i]); } //GUILayout.Space(10); GUILayout.FlexibleSpace(); if (levelData[i].Dialogue.Exists) { if (GUILayout.Button("-", EditorStyles.miniButtonLeft)) { DeleteDialogue(i); } GUILayout.Space(5); if (GUILayout.Button("edit dialogue", EditorStyles.miniButtonRight)) { TextEditorWizard.Show("Edit dialogue", levelData[i].Dialogue); } //GUILayout.Label("(dialogue)", EditorStyles.miniLabel); } else { var pre1 = GUI.color; GUI.color = Color.cyan; GUILayout.Label("(no dialogue)", EditorStyles.miniLabel); GUI.color = pre1; if (GUILayout.Button("add", EditorStyles.miniButton)) { CreateDialogue(i); } } GUILayout.EndHorizontal(); } // EditorGUILayout.EndScrollView(); GUILayout.Space(10); GUILayout.EndVertical(); GUILayout.BeginHorizontal(); { GUILayout.FlexibleSpace(); if (GUILayout.Button("View", GUILayout.ExpandWidth(false))) { LevelPickerWizard.Show(new DirectoryInfo(LevelPath), FilterDelegate, null); } if (GUILayout.Button("Add", GUILayout.ExpandWidth(false))) { PickLevel(levelData.Count); } if (GUILayout.Button("Edit", GUILayout.ExpandWidth(false))) { TextEditorWizard.Show("level.yaml", new FileInfo(LevelFile), Refresh ); } if (GUILayout.Button("Refresh", GUILayout.ExpandWidth(false))) { Refresh(); } //GUI.enabled = _saveDirty; if (GUILayout.Button("Save", GUILayout.ExpandWidth(false))) { Save(); } //GUI.enabled = true; /*if (GUILayout.Button("Save", GUILayout.ExpandWidth(false))) { * Save(); * }*/ GUILayout.Space(10); } GUILayout.EndHorizontal(); GUILayout.Space(10); if (Event.current.type == EventType.MouseDown) { selectedIndex = GetIndex(); } if (selectedIndex != -1 && Event.current.type == EventType.MouseDrag) { if (MouseInside()) { hoverIndex = GetIndex(); } else { hoverIndex = -1; } this.Repaint(); } if (selectedIndex != -1 && Event.current.type == EventType.Repaint) { Vector2 inner = Event.current.mousePosition; if (inner.x >= 0 && inner.y >= 0) { GUI.Label(new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y, rectData[selectedIndex].width, rectData[selectedIndex].height), levelData[selectedIndex].Name, EditorStyles.toolbarTextField); } } if (Event.current.type == EventType.MouseMove) { //if (selected != -1) { //selected = -1; // this.Repaint(); //} } if (Event.current.type == EventType.MouseUp) { if (selectedIndex != -1) { hoverIndex = GetIndex(); if (hoverIndex > -1 && hoverIndex != selectedIndex) { var temp = levelData[selectedIndex]; levelData[selectedIndex] = levelData[hoverIndex]; levelData[hoverIndex] = temp; Save(); //_saveDirty = true; //Save(); } } selectedIndex = -1; hoverIndex = -1; Repaint(); } if (Event.current.type == EventType.KeyDown) { if (Event.current.keyCode == KeyCode.Escape) { selectedIndex = -1; hoverIndex = -1; Repaint(); } } }