From cb92e568b6af4c7a5cdfa4fccf20d6dd1d6e0727 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Thu, 28 Nov 2024 21:32:10 +0100 Subject: working on shadows --- src/scenes/world_map.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'src/scenes') diff --git a/src/scenes/world_map.c b/src/scenes/world_map.c index 1e3f76d..39aa749 100644 --- a/src/scenes/world_map.c +++ b/src/scenes/world_map.c @@ -1054,6 +1054,51 @@ static void world_handle_scroll(platform_window* window) if (camera_x < max_camera_offset_x) camera_x = max_camera_offset_x; } +static vec4 world_map_get_daytime_rect() +{ + int hour = _active_world->current_time.tm_hour; + int minutes = _active_world->current_time.tm_min; + + int offset = area.w*zoom - ((((hour*60.0f) + minutes) / (24*60.0f)) * area.w*zoom); + + vec4 rec = (vec4){0,0,0,0}; + return rec; +} + +static color img_get_px(image* img, s32 x, s32 y) +{ + if (x < 0 || y < 0) return rgba(0,0,0,0); + if (x > img->width || y > img->height) return rgba(0,0,0,0); + u8* bytes = (((u8*)img->data) + (img->width * img->channels * y) + (img->channels * x)); + color c = *(color*)(bytes); + return c; +} + +static s32 shadow_offset = 0; +static s32 shadow2_offset = 0; + +bool world_map_location_is_in_sun(vec2f px_pos) +{ + return !(img_get_px(img_shadow, shadow_offset + px_pos.x, px_pos.y).a == 255); + // return img_get_px(img_shadow, shadow2_offset - px_pos.x, px_pos.y).a == 255; +} + +static void world_map_draw_night(platform_window* window) +{ + int hour = _active_world->current_time.tm_hour; + int minutes = _active_world->current_time.tm_min; + + int offset = area.w*zoom - ((((hour*60.0f) + minutes) / (24*60.0f)) * area.w*zoom); + + shadow_offset = area.x + camera_x + offset; + shadow2_offset = area.x + camera_x + offset - area.w*zoom; + + renderer->render_image_tint(img_shadow, shadow_offset, area.y + camera_y, area.w*zoom, area.h*zoom, rgba(255,255,255,100)); + //renderer->render_image_tint(img_shadow, shadow2_offset, area.y + camera_y, area.w*zoom, area.h*zoom, rgba(255,255,255,100)); + + img_get_px(img_shadow, offset, img_shadow->height/2); +} + void world_map_scene_render(platform_window* window) { renderer->set_render_depth(5); @@ -1106,6 +1151,8 @@ void world_map_scene_render(platform_window* window) vec4 area = camera_get_target_rectangle(window); renderer->render_rectangle(area.x + camera_x, area.y + camera_y, area.w*zoom, area.h*zoom, COLOR_WORLD_MAP_BACKGROUND); renderer->render_image(img_world_map, area.x + camera_x, area.y + camera_y, area.w*zoom, area.h*zoom); + + world_map_draw_night(window); } void world_map_scene_update(platform_window* window) -- cgit v1.2.3-70-g09d2