Exemplo n.º 1
0
        //ref: http://answers.unity3d.com/questions/1193700/what-is-the-proper-way-to-draw-previews-for-custom.html
        /// <summary>
        /// Creates a Texture2D with a preview of a tilemap or tilemapGroup. In case you use a tilemapGroup, the tilemap will be used as reference for the PixelsPerUnits.
        /// </summary>
        /// <param name="tilemap"></param>
        /// <param name="tilemapGroup"></param>
        /// <returns></returns>
        public static Texture2D CreateTilemapGroupPreviewTexture(STETilemap tilemap, TilemapGroup tilemapGroup = null)
        {
            float  pixelToUnits       = tilemap.Tileset.TilePxSize.x / tilemap.CellSize.x;
            Bounds tilemapGroupBounds = tilemap.MapBounds;

            if (tilemapGroup)
            {
                tilemapGroup.IterateTilemapWithAction((STETilemap tmap) => tilemapGroupBounds.Encapsulate(tmap.MapBounds));
            }
            Vector2 size = tilemapGroupBounds.size * pixelToUnits;

            Camera previewCamera = Camera.main ? Camera.main : Object.FindObjectOfType <Camera>();

            previewCamera   = GameObject.Instantiate(previewCamera);
            s_previewCamera = previewCamera;
            RenderTexture rendTextr = new RenderTexture((int)size.x, (int)size.y, 32, RenderTextureFormat.ARGB32);

            rendTextr.Create();
            previewCamera.transform.position = tilemap.transform.TransformPoint(new Vector3(tilemapGroupBounds.center.x, tilemapGroupBounds.center.y, -10));

            RenderTexture savedActiveRT         = RenderTexture.active;
            RenderTexture savedCamTargetTexture = previewCamera.targetTexture;

            RenderTexture.active           = rendTextr;
            previewCamera.targetTexture    = rendTextr;
            previewCamera.orthographicSize = (previewCamera.pixelRect.height) / (2f * pixelToUnits);
            previewCamera.Render();
            Texture2D outputTexture = new Texture2D((int)size.x, (int)size.y, TextureFormat.ARGB32, false);

            outputTexture.ReadPixels(new Rect(0, 0, (int)size.x, (int)size.y), 0, 0);
            outputTexture.Apply();
            previewCamera.targetTexture = savedCamTargetTexture;
            RenderTexture.active        = savedActiveRT;

            Object.DestroyImmediate(rendTextr);
            Object.DestroyImmediate(previewCamera.gameObject);
            s_previewCamera = null;

            return(outputTexture);
        }
Exemplo n.º 2
0
        private void DoWindow(int id)
        {
            Event      e = Event.current;
            STETilemap defaultTilemap = m_target.GetDefaultTilemapForCurrentTileSelection();

            GUILayout.BeginArea(new Rect(0f, EditorGUIUtility.singleLineHeight, m_defaultTilemapsWindowRect.width, m_defaultTilemapsWindowRect.height));
            GUILayout.Label("Default Tilemap: " + (defaultTilemap? "<b>" + defaultTilemap.name + "</b>" : "<none>"), STEditorStyles.Instance.richLabel);
            if (GUILayout.Button("Set Default Tilemap <b>(For the Palette Selection)</b>", STEditorStyles.Instance.richButton))
            {
                if (m_target.SelectedTilemap && m_target.SelectedTilemap.Tileset && m_target.SelectedTilemap.Tileset.TileSelection != null)
                {
                    foreach (uint tileData in m_target.SelectedTilemap.Tileset.TileSelection.selectionData)
                    {
                        SetDefaultTilemapFromTileData(m_target.SelectedTilemap, 0, 0, tileData);
                    }
                }
                else
                {
                    m_target.SetDefaultTilemapForCurrentSelectedTileOrBrush();
                }
            }
            if (GUILayout.Button("Remove Default Tilemap <b>(For the Palette Selection)</b>", STEditorStyles.Instance.richButton))
            {
                m_target.ClearDefaultTilemapForCurrentSelectedTileOrBrush();
            }
            EditorGUILayout.Space();
            if (GUILayout.Button("Set Default Tilemap <b>(For the Tiles in the Tilemap)</b>", STEditorStyles.Instance.richButton))
            {
                TilemapUtils.IterateTilemapWithAction(m_target.SelectedTilemap, SetDefaultTilemapFromTileData);
            }
            if (GUILayout.Button("Set Default Tilemap <b>(For all Tilemaps)</b>", STEditorStyles.Instance.richButton))
            {
                m_target.IterateTilemapWithAction((STETilemap tilemap) => {
                    TilemapUtils.IterateTilemapWithAction(tilemap, SetDefaultTilemapFromTileData);
                });
            }
            EditorGUILayout.Space();

            /*
             * if (GUILayout.Button("Clear Default Tilemap <b>(All Tiles in the Tilemap)</b>", STEditorStyles.Instance.richButton))
             *  TilemapUtils.IterateTilemapWithAction(m_target.SelectedTilemap, (STETilemap tilemap, int gx, int gy, uint tileData) =>
             *  {
             *      int brushId = Tileset.GetBrushIdFromTileData(tileData);
             *      if (brushId != Tileset.k_BrushId_Default)
             *          m_target.ClearBrushDefaultTilemap(brushId);
             *      else
             *      {
             *          int tileId = Tileset.GetTileIdFromTileData(tileData);
             *          if (tileId != Tileset.k_TileId_Empty)
             *              m_target.ClearTileDefaultTilemap(tileId);
             *      }
             *  });
             */
            if (GUILayout.Button("Clear Default Tilemap Data <b>(For all Tiles)</b>", STEditorStyles.Instance.richButton))
            {
                m_target.ClearAllDefaultTilemapData();
            }
            GUILayout.EndArea();
            if (e.isMouse && m_defaultTilemapsWindowRect.Contains(e.mousePosition))
            {
                if (e.type == EventType.MouseDown && e.mousePosition.y <= EditorGUIUtility.singleLineHeight)
                {
                    m_defaultTilemapWindowMinimized = !m_defaultTilemapWindowMinimized;
                }
                e.Use();
            }
        }