Beispiel #1
0
        private static void BuildIntGridLayer(LDtkDataLayer layer, LDtkIntGridValueAssetCollection intGridValueAssets,
                                              Grid tilemapPrefab)
        {
            if (IsAssetNull(intGridValueAssets))
            {
                return;
            }
            if (IsAssetNull(tilemapPrefab))
            {
                return;
            }

            DecrementLayer();

            Tilemap tilemap = LDtkUnityTilesetBuilder.BuildUnityTileset(layer.__identifier, tilemapPrefab, _layerSortingOrder);

            if (tilemap == null)
            {
                return;
            }

            LDtkBuilderIntGridValue.BuildIntGridValues(layer, intGridValueAssets, tilemap);

            LDtkUnityTilesetBuilder.SetTilesetOpacity(tilemap, layer.__opacity);
        }
Beispiel #2
0
        public static void BuildTileset(LDtkDataLayer layer, LDtkDataTile[] tiles, LDtkTilesetAssetCollection assets, Tilemap[] tilemaps)
        {
            LDtkDefinitionTileset definition = layer.IsAutoTilesLayer
                ? layer.Definition.AutoTilesetDefinition
                : layer.Definition.TileLayerDefinition;

            LDtkTilesetAsset asset = assets.GetAssetByIdentifier(definition.identifier);

            if (asset == null)
            {
                return;
            }

            //figure out if we have already built a tile in this position. otherwise, build up to the next tilemap
            Dictionary <Vector2Int, int> builtTileLayering = new Dictionary <Vector2Int, int>();

            foreach (LDtkDataTile tileData in tiles)
            {
                Vector2Int px           = tileData.px.ToVector2Int();
                int        tilemapLayer = GetTilemapLayerToBuildOn(builtTileLayering, px, tilemaps.Length - 1);


                BuildTile(layer, tileData, asset, tilemaps[tilemapLayer]);
            }
        }
Beispiel #3
0
        private static void BuildTilesetLayer(LDtkDataLayer layer, LDtkDataTile[] tiles,
                                              LDtkTilesetAssetCollection tilesetAssets, Grid tilemapPrefab)
        {
            if (IsAssetNull(tilesetAssets))
            {
                return;
            }

            var grouped        = tiles.Select(p => p.px.ToVector2Int()).ToLookup(x => x);
            int maxRepetitions = grouped.Max(x => x.Count());


            string objName = layer.__identifier;

            if (layer.IsIntGridLayer)
            {
                objName += "_AutoLayer";
            }

            //this is for the potential of having multiple rules apply to the same tile. make multiple Unity Tilemaps.
            Tilemap[] tilemaps = new Tilemap[maxRepetitions];
            for (int i = 0; i < maxRepetitions; i++)
            {
                string name = objName;
                name += $"_{i}";
                Tilemap tilemap = BuildUnityTileset(name, tilemapPrefab);
                if (tilemap == null)
                {
                    return;
                }
                tilemaps[i] = tilemap;
            }

            LDtkBuilderTileset.BuildTileset(layer, tiles, tilesetAssets, tilemaps);
        }
Beispiel #4
0
        public static void BuildIntGridValues(LDtkDataLayer layer, LDtkIntGridValueAssetCollection valueAssets, Tilemap tilemap)
        {
            foreach (LDtkDataIntGridValue intTile in layer.intGrid)
            {
                BuildIntGridValue(layer, intTile, valueAssets, tilemap);
            }

            TryTurnOffRenderer(valueAssets, tilemap);
        }
Beispiel #5
0
        private static void BuildEntityInstanceLayer(LDtkDataLayer layer, LDtkEntityAssetCollection entityAssets)
        {
            if (IsAssetNull(entityAssets))
            {
                return;
            }

            DecrementLayer();
            LDtkBuilderEntityInstance.BuildEntityLayerInstances(layer, entityAssets, _layerSortingOrder);
        }
Beispiel #6
0
        public static void BuildEntityLayerInstances(LDtkDataLayer layerData, LDtkEntityAssetCollection entityAssets,
                                                     int layerSortingOrder)
        {
            LDtkParsedPoint.InformOfRecentLayerVerticalCellCount(layerData.__cHei);
            GameObject layerObj = new GameObject(layerData.__identifier);

            foreach (LDtkDataEntity entityData in layerData.entityInstances)
            {
                BuildEntityInstance(layerData, entityData, entityAssets, layerObj, layerSortingOrder);
            }
        }
Beispiel #7
0
        public void GetLevelBounds()
        {
            const string lvlName = "Level";

            TextAsset       jsonProject = TestJsonLoader.LoadGenericProject();
            LDtkDataProject project     = LDtkToolProjectLoader.LoadProject(jsonProject.text);
            LDtkDataLevel   level       = project.levels.FirstOrDefault(p => p.identifier == lvlName);
            LDtkDataLayer   layer       = level.layerInstances.FirstOrDefault(p => p.IsIntGridLayer);
            Bounds          bounds      = layer.LayerUnitBounds;

            Debug.Log(bounds);
        }
Beispiel #8
0
        private static void BuildTilesetLayer(LDtkDataLayer layer, LDtkDataTile[] tiles,
                                              LDtkTilesetAssetCollection tilesetAssets, Grid tilemapPrefab)
        {
            if (IsAssetNull(tilesetAssets))
            {
                return;
            }
            if (IsAssetNull(tilemapPrefab))
            {
                return;
            }



            var grouped        = tiles.Select(p => p.px.ToVector2Int()).ToLookup(x => x);
            int maxRepetitions = grouped.Max(x => x.Count());


            string gameObjectName = layer.__identifier;

            if (layer.IsIntGridLayer)
            {
                gameObjectName += "_AutoLayer";
            }

            //this is for the potential of having multiple rules apply to the same tile. make multiple Unity Tilemaps.
            Tilemap[] tilemaps = new Tilemap[maxRepetitions];
            for (int i = 0; i < maxRepetitions; i++)
            {
                DecrementLayer();

                string name = gameObjectName;
                name += $"_{i}";
                Tilemap tilemap = LDtkUnityTilesetBuilder.BuildUnityTileset(name, tilemapPrefab, _layerSortingOrder);
                if (tilemap == null)
                {
                    return;
                }

                tilemaps[i] = tilemap;
            }

            LDtkBuilderTileset.BuildTileset(layer, tiles, tilesetAssets, tilemaps);

            //set each layer's alpha
            foreach (Tilemap tilemap in tilemaps)
            {
                LDtkUnityTilesetBuilder.SetTilesetOpacity(tilemap, layer.__opacity);
            }
        }
Beispiel #9
0
        private static void BuildEntityInstance(LDtkDataLayer layerData, LDtkDataEntity entityData,
                                                LDtkEntityAssetCollection entityAssets, GameObject layerObj, int layerSortingOrder)
        {
            LDtkEntityAsset entityAsset = entityAssets.GetAssetByIdentifier(entityData.__identifier);

            if (entityAsset == null)
            {
                return;
            }

            int        pixelsPerUnit = layerData.__gridSize;
            Vector2Int pixelPos      = entityData.px.ToVector2Int();
            Vector2    spawnPos      = (LDtkToolOriginCoordConverter.ConvertPosition(pixelPos, layerData.__cHei * pixelsPerUnit, pixelsPerUnit) / pixelsPerUnit) + Vector2.up;

            InstantiateEntity(entityData, entityAsset.ReferencedAsset, spawnPos, layerObj, layerSortingOrder);
        }
Beispiel #10
0
 private static void BuildLayerInstance(LDtkDataLayer layer, LDtkProjectAssets assets)
 {
     if (layer.IsIntGridLayer)
     {
         BuildIntGridLayer(layer, assets.CollisionValues, assets.TilemapPrefab);
     }
     if (layer.IsAutoTilesLayer)
     {
         BuildTilesetLayer(layer, layer.autoLayerTiles, assets.Tilesets, assets.TilemapPrefab);
     }
     if (layer.IsGridTilesLayer)
     {
         BuildTilesetLayer(layer, layer.gridTiles, assets.Tilesets, assets.TilemapPrefab);
     }
     if (layer.IsEntityInstancesLayer)
     {
         BuildEntityInstanceLayer(layer, assets.EntityInstances);
     }
 }
Beispiel #11
0
        private static void BuildIntGridValue(LDtkDataLayer layer, LDtkDataIntGridValue intValueData, LDtkIntGridValueAssetCollection valueAssets, Tilemap tilemap)
        {
            LDtkDefinitionIntGridValue definition = layer.Definition.intGridValues[intValueData.v];

            LDtkIntGridValueAsset asset = valueAssets.GetAssetByIdentifier(definition.identifier);

            if (asset == null)
            {
                return;
            }

            Vector2Int cellCoord = LDtkToolOriginCoordConverter.GetTopLeftOriginCellCoordFromCoordID(intValueData.coordId, layer.__cWid);
            Vector2    coord     = LDtkToolOriginCoordConverter.ConvertCell(cellCoord, layer.__cHei);
            Tile       tileAsset = LDtkProviderTile.GetTile(asset, definition.color.ToColor());

            Vector3Int c = new Vector3Int((int)coord.x, (int)coord.y, 0);

            tilemap.SetTile(c, tileAsset);
        }
Beispiel #12
0
        private static void BuildIntGridLayer(LDtkDataLayer layer, LDtkIntGridValueAssetCollection intGridValueAssets,
                                              Grid tilemapPrefab)
        {
            if (IsAssetNull(intGridValueAssets))
            {
                return;
            }

            string objName = layer.__identifier;

            Tilemap tilemap = BuildUnityTileset(objName, tilemapPrefab);

            if (tilemap == null)
            {
                return;
            }

            LDtkBuilderIntGridValue.BuildIntGridValues(layer, intGridValueAssets, tilemap);
        }
Beispiel #13
0
        private static void BuildTile(LDtkDataLayer layer, LDtkDataTile tileData, LDtkTilesetAsset asset, Tilemap tilemap)
        {
            Vector2Int coord = tileData.LayerPixelPosition / layer.__gridSize;

            coord = LDtkToolOriginCoordConverter.ConvertCell(coord, layer.__cHei);

            Sprite tileSprite = GetTileFromTileset(asset.ReferencedAsset, tileData.SourcePixelPosition, layer.__gridSize);

            Tile tile = ScriptableObject.CreateInstance <Tile>();

            tile.colliderType = Tile.ColliderType.None;
            tile.sprite       = tileSprite;

            Vector3Int co = new Vector3Int(coord.x, coord.y, 0);



            //Tilemap mapToBuildOn = tilemap;

            tilemap.SetTile(co, tile);
            SetTileFlips(tilemap, tileData, coord);
        }
Beispiel #14
0
        private static void BuildEntityInstance(LDtkDataLayer layerData, LDtkDataEntity entityData,
                                                LDtkEntityAssetCollection entityAssets, GameObject layerObj, int layerSortingOrder)
        {
            LDtkEntityAsset entityAsset = entityAssets.GetAssetByIdentifier(entityData.__identifier);

            if (entityAsset == null)
            {
                return;
            }

            int        pixelsPerUnit = layerData.__gridSize;
            Vector2Int pixelPos      = entityData.px.ToVector2Int();
            Vector2    spawnPos      = (LDtkToolOriginCoordConverter.ConvertPosition(pixelPos, layerData.__cHei * pixelsPerUnit, pixelsPerUnit) / pixelsPerUnit) + Vector2.up;

            GameObject entityObj = InstantiateEntity(entityAsset.ReferencedAsset, spawnPos, layerObj);

            LDtkFieldInjector.InjectInstanceFields(entityData, entityObj);

            MonoBehaviour[] behaviors = entityObj.GetComponents <MonoBehaviour>();

            PostEntityInterfaceEvent <ILDtkFieldInjectedEvent>(behaviors, e => e.OnLDtkFieldsInjected());
            PostEntityInterfaceEvent <ILDtkSettableSortingOrder>(behaviors, e => e.OnLDtkSetSortingOrder(layerSortingOrder));
            PostEntityInterfaceEvent <ILDtkSettableOpacity>(behaviors, e => e.OnLDtkSetOpacity(layerData.__opacity));
        }