示例#1
0
        /// ======================================================================================================================================================================
        /// <summary>
        /// Draws the grid based on the user settings in inspector.
        /// </summary>
        /// ======================================================================================================================================================================
        public static void DrawGrid(RTStudio.TileMap targetTileMap)
        {
            Handles.color = targetTileMap.gridColor;

            float horizontal = targetTileMap.mapDimensions.x*2;
            float vertical = targetTileMap.mapDimensions.y*2;

            // Determine length of line to draw
            float v_distance = vertical * (targetTileMap.tileDimensions.y/RTStudio.Settings.staticPixelsPerUnit)*0.5f;
            float h_distance = horizontal * (targetTileMap.tileDimensions.x/RTStudio.Settings.staticPixelsPerUnit)*0.5f;

            // Draw full grid
            for (int x = 0; x <= horizontal; ++x)
            {
                if ( x % 2 == 0 ) Handles.color = new Color ( targetTileMap.gridColor.r, targetTileMap.gridColor.g, targetTileMap.gridColor.b, targetTileMap.gridColor.a / 2.0f);
                else Handles.color = new Color ( targetTileMap.gridColor.r, targetTileMap.gridColor.g, targetTileMap.gridColor.b, targetTileMap.gridColor.a / 8.0f);

                Vector2 p1 = new Vector2(x * (targetTileMap.tileDimensions.x/RTStudio.Settings.staticPixelsPerUnit)*0.5f, 0) + (Vector2)targetTileMap.transform.position;
                Vector2 p2 = new Vector2(x * (targetTileMap.tileDimensions.x/RTStudio.Settings.staticPixelsPerUnit)*0.5f, v_distance) + (Vector2)targetTileMap.transform.position;
                Handles.DrawLine(p1, p2);
            }

            for (int y = 0; y <= vertical; ++y)
            {
                if ( y % 2 == 0 ) Handles.color = new Color ( targetTileMap.gridColor.r, targetTileMap.gridColor.g, targetTileMap.gridColor.b, targetTileMap.gridColor.a  / 2.0f);
                else Handles.color = new Color ( targetTileMap.gridColor.r, targetTileMap.gridColor.g, targetTileMap.gridColor.b, targetTileMap.gridColor.a / 8.0f);

                Vector2 p1 = new Vector2(0, y * (targetTileMap.tileDimensions.y/RTStudio.Settings.staticPixelsPerUnit)*0.5f) + (Vector2)targetTileMap.transform.position;
                Vector2 p2 = new Vector2(h_distance, y * (targetTileMap.tileDimensions.y/RTStudio.Settings.staticPixelsPerUnit)*0.5f) + (Vector2)targetTileMap.transform.position;
                Handles.DrawLine(p1, p2);
            }
        }
示例#2
0
        /// ======================================================================================================================================================================
        /// <summary>
        /// Draws the info for the tilemap, cursor location, selected tile and selected layer in the scene view.
        /// </summary>
        /// ====================================================================================================================================================================== 
        public static void DrawInfo(RTStudio.TileMap targetTileMap, int cursorX, int cursorY)
        {
            if (Camera.current == null)
            {
                return;
            }

            GUIStyle style = new GUIStyle( GUI.skin.box );
            style.normal.textColor = new Color( 0.9f,0.1f,0.1f);
            style.alignment = TextAnchor.MiddleLeft;

            string infoString = "";
            string tileInfo = " | Tile: None";

            if ( Camera.current.pixelWidth <= 270 )
                return;

            if ( targetTileMap == null  )
                infoString = " Please Specify A Tilemap";
            else if (targetTileMap.tileSet == null )
                infoString = " No Tileset Specified!";
            else if ( targetTileMap.layers == null || targetTileMap.layers.Count == 0 )
            {
                infoString = " No layers have been created! Create a layer before adding tiles";
            }
            else
            {
                if (targetTileMap.tileSet.prefabs.Count <= targetTileMap.selectedTileIndex )
                {
                    targetTileMap.selectedTileIndex = targetTileMap.tileSet.prefabs.Count-1;
                    return;
                }

                if ( targetTileMap.selectedTileIndex < 0 ||  targetTileMap.selectedLayerIndex >= targetTileMap.layers.Count )
                    return;

                if ( targetTileMap.tileSet.prefabs != null && targetTileMap.tileSet.prefabs [targetTileMap.selectedTileIndex] != null )
                {
                    tileInfo =" | Tile: " + targetTileMap.tileSet.prefabs [targetTileMap.selectedTileIndex].name;
                }

                style.normal.textColor = new Color( 1f,1f,1f,0.5f);

                if ( targetTileMap.layers == null || targetTileMap.layers.Count <= 0 )
                    infoString = " Current Layer: None | " + tileInfo + " | Grid: ("+cursorX+" ,"+cursorY+")";
                else
                {

                    if ( targetTileMap.selectedTileIndex >= 0 )
                        infoString = " Current Layer: "+ targetTileMap.layers[targetTileMap.selectedLayerIndex].name + tileInfo + " | Grid: ("+cursorX+" ,"+cursorY+")";

                }
            }

            Handles.BeginGUI();
            float height = Camera.current.pixelHeight;
            float boxWidth = Camera.current.pixelWidth;
            float boxHeight = 20;
            Rect rect1 = new Rect(0, height - boxHeight, boxWidth, boxHeight);

            GUI.Box(rect1, infoString, style);
            Handles.EndGUI();
        }
示例#3
0
        /// ======================================================================================================================================================================
        /// <summary>
        /// Set the layers to the correct sorting value.
        /// </summary>
        /// <param name="targetTileMap">Target tile map.</param>
        /// ======================================================================================================================================================================
        public static void SortLayers( RTStudio.TileMap targetTileMap )
        {
            if (Application.isPlaying || targetTileMap.layers == null || targetTileMap.layers.Count == 0)
                return;

            int i = 0;
            foreach ( RTStudio.Layer l in targetTileMap.layers )
            {
                l.sortOrder = i;
                i++;
            }
        }
示例#4
0
        /// ======================================================================================================================================================================
        /// <summary>
        /// Fixs the tile map.
        /// </summary>
        /// ======================================================================================================================================================================
        public static void FixTileMap( RTStudio.TileMap targetTileMap )
        {
            if ( targetTileMap.layers == null || targetTileMap == null )
                return;

            Undo.RecordObject(targetTileMap, null);

            foreach ( RTStudio.Layer layer in targetTileMap.layers )
            {
                //Force the layer to 0 0 0
                layer.transform.position = Vector3.zero;

                for( int i = 0; i < targetTileMap.mapDimensions.x; i++)
                {
                    for( int j = 0; j < targetTileMap.mapDimensions.y; j++)
                    {

                        int tileIndex = (int)(i + targetTileMap.mapDimensions.x * j);
                        if ( tileIndex < layer.tiles.Length && layer.tiles[ (int)(tileIndex) ] != null )
                        {
                            Undo.RecordObject(layer.tiles[ (int)(tileIndex) ], null);
                            layer.tiles[ (int)(tileIndex) ].transform.localPosition = targetTileMap.GetPosition(tileIndex);
                        }
                    }
                }
            }
        }
示例#5
0
        /// ======================================================================================================================================================================
        /// <summary>
        /// Draws a rect.
        /// </summary>
        /// <param name="targetTileMap">Target tile map.</param>
        /// <param name="x">The x coordinate.</param>
        /// <param name="y">The y coordinate.</param>
        /// <param name="sizeX">Size x.</param>
        /// <param name="sizeZ">Size z.</param>
        /// <param name="outline">Outline color</param>
        /// <param name="fill">Fill color</param>
        /// ======================================================================================================================================================================
        public static void DrawRect(RTStudio.TileMap targetTileMap, int x, int y, int sizeX, int sizeZ, Color outline, Color fill)
        {
            Handles.color = Color.white;

            var min = new Vector3( (x * targetTileMap.tileDimensions.x/RTStudio.Settings.staticPixelsPerUnit) + targetTileMap.transform.position.x,
                                  (y * targetTileMap.tileDimensions.y/RTStudio.Settings.staticPixelsPerUnit)  + targetTileMap.transform.position.y,
                                  0 );
            var max = min + new Vector3(sizeX * targetTileMap.tileDimensions.x/RTStudio.Settings.staticPixelsPerUnit,
                                        sizeZ * targetTileMap.tileDimensions.y/RTStudio.Settings.staticPixelsPerUnit,
                                        0);

            Vector3[] rect = new Vector3[4];
            rect[0].Set(min.x,min.y,0);
            rect[1].Set(max.x,min.y,0);
            rect[2].Set(max.x,max.y,0);
            rect[3].Set(min.x,max.y,0);
            Handles.DrawSolidRectangleWithOutline(rect, fill, outline);
        }
示例#6
0
        /// ======================================================================================================================================================================
        /// <summary>
        /// Draws the mouse selection reticule.
        /// </summary>
        /// <param name="events">Events.</param>
        /// ======================================================================================================================================================================
        public static void DrawMouse(RTStudio.TileMap targetTileMap, int mx, int my )
        {
            Rect cursor = new Rect
                    (
                        targetTileMap.transform.position.x + ( (targetTileMap.tileDimensions.x/RTStudio.Settings.staticPixelsPerUnit) * mx ),
                        targetTileMap.transform.position.y + ( (targetTileMap.tileDimensions.y/RTStudio.Settings.staticPixelsPerUnit) * my ),
                        targetTileMap.tileDimensions.x/RTStudio.Settings.staticPixelsPerUnit,
                        targetTileMap.tileDimensions.y/RTStudio.Settings.staticPixelsPerUnit
                        );

                Color save = Handles.color;
                Handles.color = new Color(targetTileMap.gridColor.r, targetTileMap.gridColor.g, targetTileMap.gridColor.b, 0.65f);
                GUI.color = new Color(targetTileMap.gridColor.r, targetTileMap.gridColor.g, targetTileMap.gridColor.b, 0.65f);

                Handles.Label(cursor.position, "("+mx+","+my+")");
                Handles.DrawSolidRectangleWithOutline( RTStudio.Utils.Utils.GetV3FromRect(cursor),
                                                      new Color(targetTileMap.gridColor.r, targetTileMap.gridColor.g, targetTileMap.gridColor.b, 0.05f) ,
                                                      new Color(targetTileMap.gridColor.r, targetTileMap.gridColor.g, targetTileMap.gridColor.b, 0.25f) );
                Handles.color = save;
                GUI.color = save;
        }