// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ public static exTileMap Create(string _path, string _name, int _row, int _col) { // if (new DirectoryInfo(_path).Exists == false) { Debug.LogError("can't create asset, path not found"); return(null); } if (string.IsNullOrEmpty(_name)) { Debug.LogError("can't create asset, the name is empty"); return(null); } string assetPath = Path.Combine(_path, _name + ".asset"); // TODO { // exEditorHelper.RenameProjectWindowItem ( AssetDatabase.AssetPathToGUID (assetPath), // "default asset" ); // } TODO end // exTileMap newTileMap = ScriptableObject.CreateInstance <exTileMap>(); newTileMap.row = _row; newTileMap.col = _col; newTileMap.grids = new int[newTileMap.row * newTileMap.col]; newTileMap.Clear(); AssetDatabase.CreateAsset(newTileMap, assetPath); Selection.activeObject = newTileMap; return(newTileMap); }
// ------------------------------------------------------------------ // Desc: // ------------------------------------------------------------------ void OnGUI() { EditorGUI.indentLevel = 0; if (curEdit == null) { GUILayout.Space(10); GUILayout.Label("Please select a Tile Map"); return; } // ======================================================== // // ======================================================== Rect lastRect = new Rect(10, 0, 1, 1); GUILayout.BeginHorizontal(); GUILayout.BeginVertical(GUILayout.MaxWidth(300)); GUILayout.Space(5); // ======================================================== // Tile Sheet Field // ======================================================== GUILayout.BeginHorizontal(); exTileSheet newTileSheet = (exTileSheet)EditorGUILayout.ObjectField("Tile Sheet" , curEdit.tileSheet , typeof(exTileSheet) , false ); if (newTileSheet != curEdit.tileSheet) { curEdit.tileSheet = newTileSheet; sheetSelectedGrids.Clear(); sheetCommitGrids.Clear(); } if (GUILayout.Button("Edit...", GUILayout.Width(40), GUILayout.Height(15))) { exTileSheetEditor editor = exTileSheetEditor.NewWindow(); editor.Edit(curEdit.tileSheet); } GUILayout.EndHorizontal(); // ======================================================== // tile size // ======================================================== if (curEdit.tileSheet) { EditorGUILayout.LabelField("Tile Size", curEdit.tileSheet.tileWidth + " x " + curEdit.tileSheet.tileHeight); } else { EditorGUILayout.LabelField("Tile Size", "0 x 0"); } // ======================================================== // tile sheet field // ======================================================== EditorGUILayout.Space(); lastRect = GUILayoutUtility.GetLastRect(); TileSheetField(new Rect(15, lastRect.yMax, 300, 500), curEdit.tileSheet); // ======================================================== // tile map object // ======================================================== GUILayout.Space(20); GUI.enabled = false; EditorGUILayout.ObjectField("Tile Map" , curEdit , typeof(exTileMap) , false ); GUI.enabled = true; // ======================================================== // col & row // ======================================================== GUILayout.BeginHorizontal(); int newCol = Mathf.Max(EditorGUILayout.IntField("Column", curEdit.col), 1); int newRow = Mathf.Max(EditorGUILayout.IntField("Row", curEdit.row), 1); if (newCol != curEdit.col || newRow != curEdit.row) { curEdit.Resize(newCol, newRow); } GUILayout.EndHorizontal(); // ======================================================== // Tile Width & Height // ======================================================== GUILayout.BeginHorizontal(); int newtileWidth = EditorGUILayout.IntField("Tile Width", curEdit.tileWidth); if (newtileWidth != curEdit.tileWidth) { curEdit.tileWidth = newtileWidth; curEdit.editorNeedRebuild = true; } int newtileHeight = EditorGUILayout.IntField("Tile Height", curEdit.tileHeight); if (newtileHeight != curEdit.tileHeight) { curEdit.tileHeight = newtileHeight; curEdit.editorNeedRebuild = true; } GUILayout.EndHorizontal(); // ======================================================== // Tile Offset X & Y // ======================================================== GUILayout.BeginHorizontal(); int newTileOffsetX = EditorGUILayout.IntField("Tile Offset X", curEdit.tileOffsetX); if (newTileOffsetX != curEdit.tileOffsetX) { curEdit.tileOffsetX = newTileOffsetX; curEdit.editorNeedRebuild = true; } int newTileOffsetY = EditorGUILayout.IntField("Tile Offset Y", curEdit.tileOffsetY); if (newTileOffsetY != curEdit.tileOffsetY) { curEdit.tileOffsetY = newTileOffsetY; curEdit.editorNeedRebuild = true; } GUILayout.EndHorizontal(); // DEBUG { // ======================================================== // Debug // ======================================================== GUILayout.Space(20); GUILayout.Label("Debug"); GUILayout.Label("Visible Grids " + debugVisibleGrids); // } DEBUG end GUILayout.EndVertical(); GUILayout.Space(10); lastRect = GUILayoutUtility.GetLastRect(); GUILayout.BeginVertical(); // ======================================================== // toolbar // ======================================================== GUILayout.BeginHorizontal(EditorStyles.toolbar); // ======================================================== // show grid // ======================================================== curEdit.editorShowGrid = GUILayout.Toggle(curEdit.editorShowGrid, "Show Grid", EditorStyles.toolbarButton); GUILayout.Space(10); // ======================================================== // edit tool // ======================================================== curEdit.editorEditTool = (exTileMap.EditTool)GUILayout.Toolbar((int)curEdit.editorEditTool, toolIcons, EditorStyles.toolbarButton); GUILayout.Space(10); // ======================================================== // edit mode // ======================================================== if (sheetSelectedGrids.Count > 0 || sheetCommitGrids.Count > 0) { curEdit.editorEditMode = exTileMap.EditMode.Paint; } else { curEdit.editorEditMode = exTileMap.EditMode.Erase; } exTileMap.EditMode newEditMode = (exTileMap.EditMode)GUILayout.Toolbar((int)curEdit.editorEditMode, modeIcons, EditorStyles.toolbarButton); if (newEditMode != curEdit.editorEditMode) { curEdit.editorEditMode = newEditMode; if (curEdit.editorEditMode == exTileMap.EditMode.Erase) { sheetSelectedGrids.Clear(); sheetCommitGrids.Clear(); } } GUILayout.FlexibleSpace(); // ======================================================== // clear // ======================================================== if (GUILayout.Button("Clear", EditorStyles.toolbarButton)) { curEdit.Clear(); } GUILayout.Space(10); // ======================================================== // Help // ======================================================== if (GUILayout.Button(exEditorHelper.HelpTexture(), EditorStyles.toolbarButton)) { Help.BrowseURL("http://www.ex-dev.com/ex2d/wiki/doku.php?id=manual:tilemap_editor"); } GUILayout.EndHorizontal(); // ======================================================== // tile map filed // ======================================================== float toolbarHeight = EditorStyles.toolbar.CalcHeight(new GUIContent(""), 0); TileMapField(new Rect(lastRect.xMax, toolbarHeight, position.width - lastRect.xMax, position.height - toolbarHeight), curEdit); GUILayout.EndVertical(); // ======================================================== // draw vertical split line // ======================================================== exEditorHelper.DrawLine(new Vector2(lastRect.xMax, 0), new Vector2(lastRect.xMax, position.height), Color.black, 1.0f); GUILayout.EndHorizontal(); // ======================================================== // NOTE: cancle select event of tile sheet. Should after TileMapField, so we put it here Event e = Event.current; // ======================================================== if (e.type == EventType.MouseUp && e.button == 0) { if (sheetInRectSelectState) { sheetInRectSelectState = false; ConfirmRectSelection(); Repaint(); e.Use(); } else { sheetCommitGrids.Clear(); sheetSelectedGrids.Clear(); Repaint(); e.Use(); } } // ======================================================== // check dirty // ======================================================== if (GUI.changed) { EditorUtility.SetDirty(curEdit); } }