예제 #1
0
        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();
            }
        }
예제 #2
0
        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();
        }
예제 #3
0
 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();
 }