public static TileSet Import(WorldJson.TileSetDefinition tileSetJson, string sourceFile) { var texture = GD.Load <Texture>(GetTexturePath(tileSetJson, sourceFile)); Image textureImage = texture.GetData(); TileSet tileSet = new(); int tileFullSize = tileSetJson.TileGridSize + tileSetJson.Spacing; int gridWidth = (tileSetJson.PxWidth - tileSetJson.Padding) / tileFullSize; int gridHeight = (tileSetJson.PxHeight - tileSetJson.Padding) / tileFullSize; int gridSize = gridWidth * gridHeight; for (int tileId = 0; tileId < gridSize; tileId++) { var tileRegion = GetTileRegion(tileId, tileSetJson); if (!textureImage.GetRect(tileRegion).IsInvisible()) { tileSet.CreateTile(tileId); tileSet.TileSetTileMode(tileId, TileSet.TileMode.SingleTile); tileSet.TileSetTexture(tileId, texture); tileSet.TileSetRegion(tileId, tileRegion); } } return(tileSet); }
private static Rect2 GetTileRegion(int tileId, WorldJson.TileSetDefinition tileSetJson) => new()
private static string GetTexturePath(WorldJson.TileSetDefinition tileSetJson, string worldSourceFile) { return(worldSourceFile.GetBaseDir() + "/" + tileSetJson.TextureRelPath); }
public virtual void PrepareTileSet(TileSet tileSet, WorldJson.TileSetDefinition json) { }
public static Vector2 IdToPx(int tileId, WorldJson.TileSetDefinition tileSetJson) { var atlasGridWidth = tileSetJson.PxWidth / tileSetJson.TileGridSize; return(IdToPx(tileId, tileSetJson.TileGridSize, atlasGridWidth, tileSetJson.Padding, tileSetJson.Spacing)); }