Compare commits

..

3 Commits

Author SHA1 Message Date
En Yi 4e51f01cea Fix urchin sometimes not bouncing 2025-01-25 17:00:52 +08:00
En Yi b46097f735 Update preview rendering 2025-01-25 17:00:32 +08:00
En Yi bbf06c5655 Fix scroll area jittering 2025-01-25 16:59:57 +08:00
4 changed files with 15 additions and 8 deletions

View File

@ -678,6 +678,9 @@ bool vert_scrollarea_n_items(VertScrollArea_t* scroll_area, unsigned int n_items
scroll_area->n_items = n_items;
scroll_area->scroll_bounds.x =
(scroll_area->max_items - n_items)* (scroll_area->item_height + scroll_area->item_padding) + scroll_area->item_padding;
if (scroll_area->scroll_bounds.x > scroll_area->scroll_bounds.y) {
scroll_area->scroll_bounds.x = scroll_area->scroll_bounds.y;
}
return true;
}

View File

@ -47,9 +47,10 @@ ENUMIDS_TILETYPE_MAPPING = {
DANGER_COLOUR = (239,79,81,255)
WCRATE_COLOUR = (160,117,48,255)
MCRATE_COLOUR = (110,110,110,255)
WATER_COLOUR = (0,0,110,128)
WATER_COLOUR = (0,0,128,64)
REC_DRAW_FUNCTION = lambda ctx,x,y,s,c : ctx.rectangle(((x,y), (x+s-1, y+s-1)), c)
RECLINE_DRAW_FUNCTION = lambda ctx,x,y,s,c : ctx.rectangle(((x,y), (x+s-1, y+s-1)), fill=None, outline=c)
UPHALFREC_DRAW_FUNCTION = lambda ctx,x,y,s,c : ctx.rectangle(((x,y), (x+s-1, y+s//2-1)), c)
DOWNHALFREC_DRAW_FUNCTION = lambda ctx,x,y,s,c : ctx.rectangle(((x, y+s//2), (x+s-1,y+s-1)), c)
LEFTHALFREC_DRAW_FUNCTION = lambda ctx,x,y,s,c : ctx.rectangle(((x,y), (x+s//2-1, y+s-1)), c)
@ -82,7 +83,7 @@ def draw_urchin_tile(ctx, x, y, s, c):
TILETYPE_SHAPE_MAP = {
'Solid': (REC_DRAW_FUNCTION, (0,0,0,255)),
'WoodenPlat': (UPHALFREC_DRAW_FUNCTION, (128,64,0,255)),
'Ladder': (REC_DRAW_FUNCTION, (214,141,64,255)),
'Ladder': (RECLINE_DRAW_FUNCTION, (214,141,64,255)),
'LSpike': (LEFTHALFREC_DRAW_FUNCTION, DANGER_COLOUR),
'RSpike': (RIGHTHALFREC_DRAW_FUNCTION, DANGER_COLOUR),
'USpike': (UPHALFREC_DRAW_FUNCTION, DANGER_COLOUR),
@ -165,7 +166,9 @@ FULL_IMG_HEIGHT = N_ROWS * IMG_HEIGHT
# Then loop the levels. Read the layerIndstances
lvl_render = Image.new("RGBA", (FULL_IMG_WIDTH, FULL_IMG_HEIGHT), (255,255,255,0))
water_render = Image.new("RGBA", (FULL_IMG_WIDTH, FULL_IMG_HEIGHT), (255,255,255,0))
render_ctx = ImageDraw.Draw(lvl_render)
water_render_ctx = ImageDraw.Draw(water_render)
for l, level in enumerate(all_levels):
lx = (l % LEVELS_PER_ROW) * IMG_WIDTH
ly = (l // LEVELS_PER_ROW) * IMG_HEIGHT
@ -247,7 +250,8 @@ for l, level in enumerate(all_levels):
continue
x, y = (i % width * TILE_SIZE + OFFSET[0], i // width * TILE_SIZE + OFFSET[1])
height = TILE_SIZE * water_level / 4
render_ctx.rectangle(((x,y+TILE_SIZE-height), (x+TILE_SIZE-1, y+TILE_SIZE-1)), WATER_COLOUR)
water_render_ctx.rectangle(((x,y+TILE_SIZE-height), (x+TILE_SIZE-1, y+TILE_SIZE-1)), WATER_COLOUR)
lvl_render = Image.alpha_composite(lvl_render, water_render)
lvl_render.save("preview.png")
lvl_render.show()

View File

@ -1,3 +1,3 @@
#!/bin/sh
python ldtk_repacker.py $1.ldtk && zstd $1.lvldata
#!/bin/bash
source venv/bin/activate
python ldtk_repacker.py $1.ldtk && zstd $1.lvldata && python level_render.py $1.ldtk

View File

@ -878,7 +878,7 @@ void tile_collision_system(Scene_t* scene)
if ((collide_side & (1<<2)) || (collide_side & (1<<3)))
{
Vector2 check_pos = p_ent->position;
check_pos.x += p_ctransform->velocity.x * scene->delta_time;
check_pos.x += (signbit(p_ctransform->velocity.x) ? -1: 1);
if (check_collision_at(p_ent, check_pos, p_bbox->size, &tilemap))
{
p_ctransform->velocity.x *= -p_ctransform->bounce_coeff;
@ -889,7 +889,7 @@ void tile_collision_system(Scene_t* scene)
if ((collide_side & (1<<1)) || (collide_side & (1)))
{
Vector2 check_pos = p_ent->position;
check_pos.y += p_ctransform->velocity.y * scene->delta_time;
check_pos.y += (signbit(p_ctransform->velocity.y) ? -1: 1);
if (check_collision_at(p_ent, check_pos, p_bbox->size, &tilemap))
{
p_ctransform->velocity.y *= -p_ctransform->bounce_coeff;