예제 #1
0
 void SelectScratchpad(tk2dTileMapScratchpad pad)
 {
     currentScratchpad = pad;
     if (currentScratchpad != null)
     {
         currentScratchpad.GetDimensions(out padWidthField, out padHeightField);
     }
 }
예제 #2
0
	void SelectScratchpad(tk2dTileMapScratchpad pad) {
		currentScratchpad = pad;
		if (currentScratchpad != null)
			currentScratchpad.GetDimensions(out padWidthField, out padHeightField);
	}
예제 #3
0
    public void DrawGUI()
    {
        GUILayout.BeginHorizontal();

        GUIStyle centeredLabel = new GUIStyle(EditorStyles.label);

        centeredLabel.alignment = TextAnchor.MiddleCenter;
        GUIStyle centeredTextField = new GUIStyle(EditorStyles.textField);

        centeredTextField.alignment = TextAnchor.MiddleCenter;

        GUILayout.BeginVertical(tk2dEditorSkin.SC_ListBoxBG, GUILayout.Width(150.0f));

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("New Scratchpad"))
        {
            if (activeScratchpads != null)
            {
                pendingAction = delegate(int i) {
                    tk2dTileMapScratchpad newPad = new tk2dTileMapScratchpad();
                    newPad.SetNumLayers(1);
                    newPad.SetDimensions(15, 15);
                    activeScratchpads.Add(newPad);
                    SelectScratchpad(newPad);
                    UpdateFilteredScratchpads();
                    focusName = true;
                };
            }
        }
        GUILayout.EndHorizontal();

        bool pressedUp     = (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.UpArrow);
        bool pressedDown   = (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.DownArrow);
        bool pressedReturn = (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return);
        bool pressedEscape = (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Escape);

        if (pressedUp || pressedDown)
        {
            Event.current.Use();
            if (filteredScratchpads != null)
            {
                int curIdx = 0;
                for (int i = 0; i < filteredScratchpads.Count(); ++i)
                {
                    if (filteredScratchpads[i] == currentScratchpad)
                    {
                        curIdx = i;
                    }
                }
                curIdx += pressedDown ? 1 : -1;
                curIdx  = Mathf.Clamp(curIdx, 0, filteredScratchpads.Count() - 1);
                for (int i = 0; i < filteredScratchpads.Count(); ++i)
                {
                    if (i == curIdx)
                    {
                        SelectScratchpad(filteredScratchpads[i]);
                    }
                }
            }
        }

        GUILayout.BeginHorizontal();
        GUI.SetNextControlName("SearchFilter");
        string newSearchFilter = GUILayout.TextField(searchFilter, tk2dEditorSkin.ToolbarSearch);

        if (newSearchFilter != searchFilter)
        {
            searchFilter = newSearchFilter;
            UpdateFilteredScratchpads();
            if (searchFilter.Length > 0 && filteredScratchpads != null && filteredScratchpads.Count() > 0)
            {
                SelectScratchpad(filteredScratchpads[0]);
            }
        }
        GUILayout.Label("", tk2dEditorSkin.ToolbarSearchRightCap);
        GUI.SetNextControlName("dummy");
        GUILayout.Box("", GUIStyle.none, GUILayout.Width(0), GUILayout.Height(0));
        if (focusSearchFilter || (focusSearchFilterOnKeyUp && Event.current.type == EventType.KeyUp))
        {
            GUI.FocusControl("dummy");
            GUI.FocusControl("SearchFilter");
            focusSearchFilter        = false;
            focusSearchFilterOnKeyUp = false;
        }
        GUILayout.EndHorizontal();

        bool searchHasFocus = (GUI.GetNameOfFocusedControl() == "SearchFilter");

        if (pressedEscape)
        {
            if (searchHasFocus && searchFilter.Length > 0)
            {
                searchFilter = "";
                UpdateFilteredScratchpads();
            }
            else
            {
                requestClose = true;
            }
        }

        // Select All
        if (pressedReturn && GUI.GetNameOfFocusedControl() != "ScratchpadName")
        {
            requestSelectAllTiles = true;
            requestClose          = true;
        }

        padsScrollPos = GUILayout.BeginScrollView(padsScrollPos);
        List <tk2dTileMapScratchpad> curList = null;

        if (filteredScratchpads != null)
        {
            curList = filteredScratchpads;
        }
        else if (activeScratchpads != null)
        {
            curList = activeScratchpads;
        }
        if (curList != null)
        {
            GUILayout.BeginVertical();
            foreach (var pad in curList)
            {
                bool selected = currentScratchpad == pad;
                if (selected)
                {
                    GUILayout.BeginHorizontal();
                }
                if (GUILayout.Toggle(selected, pad.name, tk2dEditorSkin.SC_ListBoxItem))
                {
                    if (currentScratchpad != pad)
                    {
                        SelectScratchpad(pad);
                    }
                }
                if (selected)
                {
                    if (GUILayout.Button("", tk2dEditorSkin.GetStyle("TilemapDeleteItem")))
                    {
                        pendingAction = delegate(int i) {
                            if (EditorUtility.DisplayDialog("Delete Scratchpad \"" + currentScratchpad.name + "\" ?", " ", "Yes", "No"))
                            {
                                activeScratchpads.Remove(currentScratchpad);
                                SelectScratchpad(null);
                                UpdateFilteredScratchpads();
                            }
                        };
                    }
                    GUILayout.EndHorizontal();
                }
            }

            GUILayout.EndVertical();
        }
        GUILayout.EndScrollView();

        if (currentScratchpad != null)
        {
            GUILayout.Space(20.0f);

            GUILayout.BeginVertical(tk2dEditorSkin.SC_ListBoxBG);
            // Select All
            if (GUILayout.Button(new GUIContent("Select All", "(Enter)")))
            {
                requestSelectAllTiles = true;
                requestClose          = true;
            }

            // Name
            GUI.SetNextControlName("ScratchpadName");
            currentScratchpad.name = EditorGUILayout.TextField(currentScratchpad.name, centeredTextField);
            if (focusName)
            {
                GUI.FocusControl("ScratchpadName");
                focusName = false;
            }

            // Size
            int padWidth, padHeight;
            currentScratchpad.GetDimensions(out padWidth, out padHeight);
            GUILayout.BeginHorizontal();
            padWidthField  = EditorGUILayout.IntField(padWidthField);
            padHeightField = EditorGUILayout.IntField(padHeightField);
            GUILayout.EndHorizontal();
            if (padWidthField != padWidth || padHeightField != padHeight)
            {
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Apply size change"))
                {
                    currentScratchpad.SetDimensions(padWidthField, padHeightField);
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.EndVertical();
        }

        tooltip = GUI.tooltip;

        GUILayout.EndVertical();

        GUILayout.BeginVertical();

        // Painting area
        doMouseDown = false;
        doMouseDrag = false;
        doMouseUp   = false;
        doMouseMove = false;
        if (currentScratchpad != null)
        {
            //temp
            currentScratchpad.UpdateCanvas();

            int scratchW, scratchH;
            currentScratchpad.GetDimensions(out scratchW, out scratchH);
            canvasScrollPos = EditorGUILayout.BeginScrollView(canvasScrollPos, GUILayout.Width(Mathf.Min(scratchW * tileSize.x * scratchZoom + 24.0f, Screen.width - 190.0f)));

            Rect padRect = GUILayoutUtility.GetRect(scratchW * tileSize.x * scratchZoom, scratchH * tileSize.y * scratchZoom, GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(false));
            tk2dGrid.Draw(padRect);
            padAreaRect = padRect;

            Matrix4x4 canvasMatrix = Matrix4x4.identity;
            SceneView sceneview    = SceneView.lastActiveSceneView;
            if (sceneview != null)
            {
                Camera sceneCam = sceneview.camera;
                if (sceneCam != null)
                {
                    canvasMatrix = sceneCam.cameraToWorldMatrix;
                }
            }
            canvasMatrix *= Matrix4x4.TRS(new Vector3(padRect.x, padRect.y + padRect.height, 0.0f),
                                          Quaternion.identity,
                                          new Vector3(scratchZoom / texelSize.x, -scratchZoom / texelSize.y, 1.0f));

            if (Event.current.type == EventType.Repaint)
            {
                if (brushRenderer != null)
                {
                    brushRenderer.DrawBrushInScratchpad(currentScratchpad.CanvasBrush, canvasMatrix, false);
                    if (workingBrush != null && workingHere)
                    {
                        brushRenderer.DrawBrushInScratchpad(workingBrush, canvasMatrix, true);
                    }
                }
                if (workingHere && parent != null)
                {
                    parent.DrawTileCursor();
                }
            }

            Event ev = Event.current;
            if (ev.type == EventType.MouseMove || ev.type == EventType.MouseDrag)
            {
                paintMousePosition.x = ev.mousePosition.x - padRect.x;
                paintMousePosition.y = padRect.height - (ev.mousePosition.y - padRect.y);
                HandleUtility.Repaint();
            }
            if (ev.button == 0 || ev.button == 1)
            {
                doMouseDown = (ev.type == EventType.MouseDown);
                doMouseDrag = (ev.type == EventType.MouseDrag);
                doMouseUp   = (ev.rawType == EventType.MouseUp);
            }
            doMouseMove = (ev.type == EventType.MouseMove);

            EditorGUILayout.EndScrollView();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("+", GUILayout.Width(20)))
            {
                scratchZoom *= 1.5f;
            }
            if (GUILayout.Button("-", GUILayout.Width(20)))
            {
                scratchZoom /= 1.5f;
            }
            GUILayout.EndHorizontal();
        }

        GUILayout.EndVertical();

        GUILayout.EndHorizontal();

        if (pendingAction != null && Event.current.type == EventType.Repaint)
        {
            pendingAction(0);
            pendingAction = null;
            HandleUtility.Repaint();
        }
    }