private void HandleControlClick(Event e) { if (e.control && e.button == 0 && (e.type == EventType.MouseDown || e.type == EventType.MouseDrag || e.type == EventType.MouseUp)) { Vector2 mousePosition = TileEditorUtility.GetMousePosInWorld(e.mousePosition); if (tileMap.IsInTileMap(mousePosition)) { Vector2 gridIndex = tileMap.TransformPositionToGridIndex(mousePosition); gridIndex = tileMap.ClampGridIndex(gridIndex); int key = (int)(tileMap.MapSize.x * gridIndex.y + gridIndex.x); if (tileMap.TileLayers != null) { foreach (TileLayer tileLayer in tileMap.TileLayers) { if (key < 0 || key > tileLayer.Tiles.Length) { return; } //get a tileData from a Tile Tile tile = tileLayer.Tiles[key]; if (tile != null) { if (tileSetManager.tileDataInScene != null) { if (tileSetManager.tileDataInScene.Texture != null) { DestroyImmediate(tileSetManager.tileDataInScene.Texture); } } tileSetManager.tileDataInScene = TileEditorUtility.GetTileDataFromTile(tile); tileSelectMode = TileSelectMode.Scene; //get collision info colliderInfo = TileEditorUtility.GetColliderInfoFromTile(tile); Repaint(); break; } } } } e.Use(); } }
private void DrawTiles() { Event e = Event.current; float gap = 2; float tileWidth = previewSize.floatValue; int colCount = (int)((Screen.width - 40) / (tileWidth + gap)); int rowCount = 0; if (TileDataList != null) { rowCount = TileDataList.Count / colCount; if (rowCount * colCount < TileDataList.Count) { rowCount += 1; } } float ratio = tileMap.TileSize.x / tileMap.TileSize.y; float w = tileWidth; float h = tileWidth / ratio; Rect rect = GUILayoutUtility.GetRect(Screen.width - 40, 300); GUI.skin.scrollView = skin.scrollView; tileScrollPosition = GUI.BeginScrollView(rect, tileScrollPosition, new Rect(0, 0, rect.width - 20, gap + rowCount * (h + gap))); GUI.skin.scrollView = null; if (TileDataList == null || TileDataList.Count <= 0) { GUI.skin.label.normal.textColor = Color.white; GUI.Label(new Rect(gap, 0, rect.width, 50), "Drag and drop sprites here"); GUI.skin.label.normal.textColor = Color.black; } HandleDragAndDrop(e); if (TileDataList != null) { GUI.skin = skin; float x = gap; float y = gap; for (int row = 0; row < rowCount; ++row) { x = gap; GUILayout.BeginHorizontal(); for (int col = 0; col < colCount; ++col) { int index = col + row * colCount; if (index >= TileDataList.Count) { break; } Texture2D texture = TileDataList[index].Texture; if (!texture) { continue; } GUIStyle style = GUI.skin.customStyles[0]; if (index == selectedTileIndex && tileSelectMode == TileSelectMode.TileSet) { style = GUI.skin.button; } Rect r = new Rect(x, y, w, h); x += (w + gap); //bg GUI.Box(r, GUIContent.none, GUI.skin.box); GUI.DrawTexture(r, texture); if (GUI.Button(r, GUIContent.none, style)) { tileSelectMode = TileSelectMode.TileSet; selectedTileIndex = index; } } GUILayout.EndHorizontal(); y += (h + gap); } GUI.skin = null; } GUI.EndScrollView(); }
private void init() { LoadTileSetManager(); m_Object = new SerializedObject(target); newMapSize = m_Object.FindProperty("NewMapSize"); previewSize = m_Object.FindProperty("PreviewSize"); selectedLayer = m_Object.FindProperty("SelectedLayerIndex"); showEdit = m_Object.FindProperty("ShowEdit"); m_Object.Update(); previewSize.floatValue = Mathf.Clamp(previewSize.floatValue, minPreviewSize, maxPreviewSize); m_Object.ApplyModifiedProperties(); tileMap = (TileMap)target; tileMap.NewMapSize = tileMap.MapSize; savedTool = Tools.current; showTileWindow = true; showTileWindow = true; tileSelectMode = TileSelectMode.TileSet; skin = AssetDatabase.LoadAssetAtPath("Assets/Tile Editor/GUI/Editor Skin.guiskin", typeof(GUISkin)) as GUISkin; Undo.undoRedoPerformed += OnUndoRedo; initTileLayerList(); }