Fix preview render size & add to level select

main
En Yi 2025-01-21 21:31:03 +08:00
parent 925526199e
commit 9598fe7d35
2 changed files with 22 additions and 6 deletions

View File

@ -151,10 +151,12 @@ converted_filename = '.'.join(fileparts)
# Get the tile size that fit within the dimensions # Get the tile size that fit within the dimensions
# Error out if tile size is zero # Error out if tile size is zero
# Figure out the offset to center the render # Figure out the offset to center the render
TILE_SIZE = 8
IMG_WIDTH = 400
IMG_HEIGHT = 400
# Each level should be packed as: [width, 2 bytes][height, 2 bytes][tile_type,entity,water,padding 1,1,1,1 bytes][tile_type,entity,water,padding 1,1,1,1 bytes]... # Each level should be packed as: [width, 2 bytes][height, 2 bytes][tile_type,entity,water,padding 1,1,1,1 bytes][tile_type,entity,water,padding 1,1,1,1 bytes]...
# Then loop the levels. Read the layerIndstances # Then loop the levels. Read the layerIndstances
for level in all_levels[13:15]: for level in all_levels[18:21]:
n_chests : int = 0 n_chests : int = 0
# Search for __identifier for the level layout # Search for __identifier for the level layout
level_name = "" level_name = ""
@ -184,16 +186,22 @@ for level in all_levels[13:15]:
width = level_layout["__cWid"] width = level_layout["__cWid"]
height = level_layout["__cHei"] height = level_layout["__cHei"]
print(f"Dim.: {width}x{height}. N Tiles: {width * height}") print(f"Dim.: {width}x{height}. N Tiles: {width * height}")
IMG_WIDTH = width * TILE_SIZE
IMG_HEIGHT = height * TILE_SIZE TILE_SIZE = 400 // max(width, height)
TILE_SIZE = max(min(TILE_SIZE, 10),1)
# Create a W x H array of tile information # Create a W x H array of tile information
n_tiles = width * height n_tiles = width * height
lvl_render = Image.new("RGBA", (IMG_WIDTH, IMG_HEIGHT), (255,255,255,0)) lvl_render = Image.new("RGBA", (IMG_WIDTH, IMG_HEIGHT), (255,255,255,0))
render_ctx = ImageDraw.Draw(lvl_render) render_ctx = ImageDraw.Draw(lvl_render)
LVL_SIZE = (width*TILE_SIZE-1, height*TILE_SIZE-1)
OFFSET = ((IMG_WIDTH - LVL_SIZE[0]) // 2, (IMG_HEIGHT - LVL_SIZE[1])//2)
render_ctx.rectangle((OFFSET, (OFFSET[0]+width*TILE_SIZE-1, OFFSET[1] + height*TILE_SIZE-1)), (64,64,64,255))
# Loop through gridTiles, get "d" as the index to fill the info # Loop through gridTiles, get "d" as the index to fill the info
for i, tile in enumerate(level_layout["gridTiles"]): for i, tile in enumerate(level_layout["gridTiles"]):
x, y= (tile["d"][0] % width * TILE_SIZE, tile["d"][0] // width * TILE_SIZE) x, y= (tile["d"][0] % width * TILE_SIZE + OFFSET[0], tile["d"][0] // width * TILE_SIZE + OFFSET[1])
try: try:
if ids_tiletype_map[tile["t"]] in TILETYPE_SHAPE_MAP: if ids_tiletype_map[tile["t"]] in TILETYPE_SHAPE_MAP:
draw_func, colour = TILETYPE_SHAPE_MAP[ids_tiletype_map[tile["t"]]] draw_func, colour = TILETYPE_SHAPE_MAP[ids_tiletype_map[tile["t"]]]
@ -209,7 +217,9 @@ for level in all_levels[13:15]:
for ent in entity_layout["entityInstances"]: for ent in entity_layout["entityInstances"]:
x,y = ent["__grid"] x,y = ent["__grid"]
x *= TILE_SIZE x *= TILE_SIZE
x += OFFSET[0]
y *= TILE_SIZE y *= TILE_SIZE
y += OFFSET[1]
ent = ent["__identifier"] ent = ent["__identifier"]
try: try:
if ent in TILETYPE_SHAPE_MAP: if ent in TILETYPE_SHAPE_MAP:
@ -225,7 +235,7 @@ for level in all_levels[13:15]:
for i, water_level in enumerate(water_layout["intGridCsv"]): for i, water_level in enumerate(water_layout["intGridCsv"]):
if water_level == 0: if water_level == 0:
continue continue
x, y = (i % width * TILE_SIZE, i // width * TILE_SIZE) x, y = (i % width * TILE_SIZE + OFFSET[0], i // width * TILE_SIZE + OFFSET[1])
height = TILE_SIZE * water_level / 4 height = TILE_SIZE * water_level / 4
render_ctx.rectangle(((x,y+TILE_SIZE-height), (x+TILE_SIZE-1, y+TILE_SIZE-1)), WATER_COLOUR) render_ctx.rectangle(((x,y+TILE_SIZE-height), (x+TILE_SIZE-1, y+TILE_SIZE-1)), WATER_COLOUR)
lvl_render.show() lvl_render.show()

View File

@ -10,10 +10,16 @@ static void level_select_render_func(Scene_t* scene)
Sprite_t* spr = get_sprite(&scene->engine->assets, "bunny_spr1"); Sprite_t* spr = get_sprite(&scene->engine->assets, "bunny_spr1");
Sprite_t* level_board = get_sprite(&scene->engine->assets, "lvl_board"); Sprite_t* level_board = get_sprite(&scene->engine->assets, "lvl_board");
Sprite_t* level_select = get_sprite(&scene->engine->assets, "lvl_select"); Sprite_t* level_select = get_sprite(&scene->engine->assets, "lvl_select");
Sprite_t* preview = get_sprite(&scene->engine->assets, "lvlprvw");
BeginTextureMode(scene->layers.render_layers[0].layer_tex); BeginTextureMode(scene->layers.render_layers[0].layer_tex);
ClearBackground(BLANK); ClearBackground(BLANK);
draw_sprite(level_select, 0, (Vector2){0,0},0, false); draw_sprite(level_select, 0, (Vector2){0,0},0, false);
draw_sprite(level_board, 0, (Vector2){level_select->frame_size.x,0},0, false); draw_sprite(level_board, 0, (Vector2){level_select->frame_size.x,0},0, false);
draw_sprite(preview, 0, (Vector2){
level_select->frame_size.x + (level_board->frame_size.x - preview->frame_size.x) / 2,
(level_board->frame_size.y - preview->frame_size.y) / 2,
},0, false);
DrawText("Level Select", 10, 10, 40, BLACK); DrawText("Level Select", 10, 10, 40, BLACK);
vert_scrollarea_render(&data->scroll_area); vert_scrollarea_render(&data->scroll_area);
draw_sprite( draw_sprite(