Пример #1
0
 internal static bool ImportImageLayer(TMX.ImageLayer imageLayer, GameObject parent, int sortingLayer, out GameObject newImageLayer)
 {
     newImageLayer = new GameObject(imageLayer.name, typeof(SpriteRenderer));
     newImageLayer.transform.SetParent(parent.transform, false);
     TiledTMXImporter.SetupLayerOffset(newImageLayer, imageLayer.offsetx, imageLayer.offsety);
     if (imageLayer.image != null)
     {
         string         relativeSource = imageLayer.image.source;
         Sprite         importedSprite = TiledUtils.ImportPathAsSprite(TiledTMXImporter.s_tmxParentFolder, relativeSource, TiledTMXImporter.s_imageLayerSpriteDir, TiledTMXImporter.s_pixelsPerUnit);
         SpriteRenderer renderer       = newImageLayer.GetComponent <SpriteRenderer>();
         renderer.sprite       = importedSprite;
         renderer.sortingOrder = sortingLayer;
     }
     return(true);
 }
Пример #2
0
        internal static bool ImportObjectGroup(TMX.ObjectGroup objectGroup, ref int layerID, GameObject parent, out GameObject newObjectLayer)
        {
            newObjectLayer = null;
            if (objectGroup != null && objectGroup.objects != null && objectGroup.objects.Length > 0)
            {
                newObjectLayer = new GameObject(objectGroup.name);
                newObjectLayer.transform.SetParent(parent.transform, false);
                TiledTMXImporter.SetupLayerOffset(newObjectLayer, objectGroup.offsetx, objectGroup.offsety);

                for (int i = 0; i < objectGroup.objects.Length; i++)
                {
                    TMX.Object mapObject = objectGroup.objects[i];

                    bool success = ImportMapObject(mapObject, TiledTMXImporter.s_importedTilesets, newObjectLayer, TiledTMXImporter.s_map.tilewidth, TiledTMXImporter.s_map.tileheight, layerID);
                    if (!success)
                    {
                        return(false);
                    }
                }
                Color objectColour = new Color(1.0f, 1.0f, 1.0f, 1.0f);
                if (objectGroup.color != null)
                {
                    ColorUtility.TryParseHtmlString(objectGroup.color, out objectColour);
                }
                if (objectGroup.opacity != 1.0f)
                {
                    objectColour.a = objectGroup.opacity;
                }
                SpriteRenderer[] renderers = newObjectLayer.GetComponentsInChildren <SpriteRenderer>();
                foreach (SpriteRenderer r in renderers)
                {
                    r.color = objectColour;
                }
            }
            return(true);
        }
Пример #3
0
        internal static bool ImportTileLayer(TMX.Layer layer, GameObject parent, int layerID, bool infinite, out GameObject newLayer)
        {
            newLayer = null;
            if (infinite != (layer.data.chunks != null))
            {
                Debug.LogError("Our map infinite setting is " + infinite + " but our chunks value is " + layer.data.chunks);
                return(false);
            }
            newLayer = new GameObject(layer.name, typeof(Tilemap), typeof(TilemapRenderer));
            newLayer.transform.SetParent(parent.transform, false);
            TiledTMXImporter.SetupLayerOffset(newLayer, layer.offsetx, layer.offsety);
            Tilemap layerTilemap = newLayer.GetComponent <Tilemap>();
            Grid    tileGrid     = TiledTMXImporter.s_gridGO.GetComponent <Grid>();

            if (tileGrid.cellLayout == GridLayout.CellLayout.Hexagon)
            {
                layerTilemap.tileAnchor = new Vector3(0.0f, 0.0f); // Seems to play better with how Unity renders the hex sprites
            }
            else if (tileGrid.cellLayout == GridLayout.CellLayout.Isometric || tileGrid.cellLayout == GridLayout.CellLayout.IsometricZAsY)
            {
                layerTilemap.tileAnchor = new Vector3(0.0f, -1.0f); // Isometric tile anchors are at the bottom of the tile
            }
            else
            {
                layerTilemap.tileAnchor = new Vector2(0.5f, 0.5f);
            }
            if (layer.opacity < 1.0f)
            {
                layerTilemap.color = new Color(1.0f, 1.0f, 1.0f, layer.opacity);
            }

            int     gridXOffset    = 0;
            int     gridYOffset    = 0;
            Vector3 offsetPosition = newLayer.transform.position;

            if (tileGrid.cellLayout == GridLayout.CellLayout.Hexagon)
            {
                HandleHexagonOffsetting(tileGrid.cellSize, out gridXOffset, out gridYOffset, out offsetPosition);
            }
            newLayer.transform.position = offsetPosition;
            if (layer.data.chunks != null)
            {
                for (int c = 0; c < layer.data.chunks.Length; c++)
                {
                    TMX.Chunk chunk   = layer.data.chunks[c];
                    bool      success = AddChunkToTilemap(layerTilemap, layer.data.encoding, layer.data.compression, chunk.tiles, chunk.text,
                                                          chunk.x + gridXOffset, chunk.y + gridYOffset, chunk.width, chunk.height);
                    if (!success)
                    {
                        return(false);
                    }
                }
            }
            else
            {
                bool success = AddChunkToTilemap(layerTilemap, layer.data.encoding, layer.data.compression, layer.data.tiles, layer.data.text,
                                                 gridXOffset, gridYOffset, layer.width, layer.height);
                if (!success)
                {
                    return(false);
                }
            }

            TilemapRenderer renderer = newLayer.GetComponent <TilemapRenderer>();

            renderer.sortingOrder = layerID;
            renderer.sortOrder    = TiledTMXImporter.s_sortOrder;

            return(true);
        }