Files
PyYoda/tools/tile_map_generator.py
2023-05-21 13:11:32 -04:00

63 lines
1.9 KiB
Python

import os
import json
from PIL import Image
from tqdm import tqdm # for progress bar
# Define input and output directories
input_dir = "../data/tiles"
output_dir = "../data/tiles"
# Define tile size and number of tiles
tile_size = 32
num_tiles = 2123
# Define metadata keys
metadata_keys = ["ID", "Filename", "Type", "Name", "Description", "X", "Y"]
# Create empty list to store tile metadata
tile_metadata = []
# Compute number of rows and columns in tile map
num_cols = int(num_tiles ** 0.5)
num_rows = (num_tiles + num_cols - 1) // num_cols # round up division
# Create empty image to store tile map
tile_map = Image.new("RGBA", (tile_size * num_cols, tile_size * num_rows), (0, 0, 0, 0))
# Loop through all tiles and create metadata and tile map
for i in tqdm(range(num_tiles)):
# Define filename and ID
filename = f"{i}.png"
tile_id = i
# Define type, name, and description
tile_type = "Terrain" # Change this as necessary
tile_name = f"Tile {i}" # Change this as necessary
tile_description = f"This is tile {i}" # Change this as necessary
# Define X and Y position in tile map array
tile_x = i % num_cols
tile_y = i // num_cols
# Add metadata to list
tile_metadata.append(dict(zip(metadata_keys, [tile_id, filename, tile_type, tile_name, tile_description, tile_x, tile_y])))
# Load tile image and paste into tile map
tile_path = os.path.join(input_dir, filename)
try:
with Image.open(tile_path) as tile_image:
tile_map.paste(tile_image, (tile_x * tile_size, tile_y * tile_size))
except FileNotFoundError as e:
print(f"Error: {e}")
continue
# Save tile map to output directory
tile_map_path = os.path.join(output_dir, "tile_map.png")
tile_map.save(tile_map_path)
# Write metadata to JSON file
metadata_file = os.path.join(output_dir, "tile_metadata.json")
with open(metadata_file, "w") as f:
json.dump(tile_metadata, f, indent=4)
print("Tile Map Generated!")