private string GetKeyName()
        {
            Vector2Int imageSliceCoord = LDtkToolOriginCoordConverter.ImageSliceCoord(_srcPos, _srcTex.height, _pixelsPerUnit);
            string     key             = LDtkKeyFormatUtil.TilesetKeyFormat(_srcTex, imageSliceCoord);

            return(key);
        }
Beispiel #2
0
        private static Sprite GetTileFromTileset(Sprite tileset, Vector2Int sourceCathodeRayPos, int pixelsPerUnit)
        {
            Debug.Assert(pixelsPerUnit != 0);

            sourceCathodeRayPos = LDtkToolOriginCoordConverter.ConvertPixel(sourceCathodeRayPos, tileset.texture.height, pixelsPerUnit);

            Vector2Int tileSize = Vector2Int.one * pixelsPerUnit;
            Rect       rect     = new Rect(sourceCathodeRayPos, tileSize);

            return(LDtkProviderTilesetSprite.GetSpriteFromTilesetAndRect(tileset, rect, pixelsPerUnit));
        }
Beispiel #3
0
        private void ManipulateTransform(Transform trans)
        {
            trans.parent = _levelTransform.transform;

            Vector2 levelPosition = LDtkToolOriginCoordConverter.LevelBackgroundPosition(_level.BgPos.UnityTopLeftPx, _level.BgPos.UnityCropRect.height, _importer.PixelsPerUnit, _level.BgPos.UnityScale.y);

            trans.localPosition = levelPosition;

            Vector2 scale = _level.BgPos.UnityScale;

            trans.localScale = new Vector3(scale.x, scale.y, 1);
        }
Beispiel #4
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 #5
0
        private Sprite GetSprite()
        {
            Rect rect = _level.BgPos.UnityCropRect;

            rect.position = LDtkToolOriginCoordConverter.LevelBackgroundImageSliceCoord(rect.position, _texture.height, rect.height);

            if (!LDtkTextureSpriteSlicer.IsLegalSpriteSlice(_texture, rect))
            {
                Debug.LogError($"Illegal Sprite slice {rect} from texture ({_texture.width}, {_texture.height})");
                return(null);
            }

            Sprite sprite = Sprite.Create(_texture, rect, Vector2.up, _importer.PixelsPerUnit);

            sprite.name = _texture.name;
            return(sprite);
        }
Beispiel #6
0
        public Sprite CreateSpriteSliceForPosition(Vector2Int ldtkPos)
        {
            Vector2Int realPos = LDtkToolOriginCoordConverter.ImageSliceCoord(ldtkPos, _texture.height, _gridSize);

            Rect srcRect = new Rect(realPos, Vector2.one * _gridSize);

            Vector2 pivot = Vector2.one * 0.5f;

            if (!IsLegalSpriteSlice(_texture, srcRect))
            {
                Debug.LogError($"Illegal sprite slice: {srcRect}, Is the pixels per unit value set too big?");
                return(null);
            }

            Sprite sprite = Sprite.Create(_texture, srcRect, pivot, _gridSize);

            return(sprite);
        }
Beispiel #7
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);
        }
        private void BuildIntGridValue(IntGridValueDefinition definition, int intValueData, LDtkIntGridTile tileAsset)
        {
            Vector2Int cellCoord = LDtkToolOriginCoordConverter.IntGridValueCsvCoord(intValueData, Layer.UnityCellSize);
            Vector2    coord     = ConvertCellCoord(cellCoord);

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

            Tilemap.SetTile(cell, tileAsset);
            Tilemap.SetTileFlags(cell, TileFlags.None);
            Tilemap.SetColor(cell, definition.UnityColor);

            //for some reason a GameObject is instantiated causing two to exist in play mode; maybe because its the import process. destroy it
            GameObject instantiatedObject = Tilemap.GetInstantiatedObject(cell);

            if (instantiatedObject != null)
            {
                Object.DestroyImmediate(instantiatedObject);
            }
        }
Beispiel #9
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 #10
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));
        }
Beispiel #11
0
 private void PositionEntity(EntityInstance entityData, GameObject entityObj)
 {
     entityObj.transform.parent        = LayerGameObject.transform;
     entityObj.transform.localPosition = LDtkToolOriginCoordConverter.EntityLocalPosition(entityData.UnityPx, (int)Layer.LevelReference.PxHei, (int)Layer.GridSize);
 }
Beispiel #12
0
 protected Vector2Int ConvertCellCoord(Vector2Int cellCoord)
 {
     return(LDtkToolOriginCoordConverter.ConvertCell(cellCoord, (int)Layer.CHei));
 }