示例#1
0
    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();
            }
        });
    }
示例#2
0
    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();
            }
        }
    }