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 --- data/img/shadow.png | Bin 0 -> 4286 bytes data/world/download.png | Bin 23270 -> 0 bytes src/data.c | 1 + src/include/data.h | 1 + src/scenes/world_map.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/world.c | 6 ++++++ 6 files changed, 55 insertions(+) create mode 100644 data/img/shadow.png delete mode 100644 data/world/download.png diff --git a/data/img/shadow.png b/data/img/shadow.png new file mode 100644 index 0000000..02216f2 Binary files /dev/null and b/data/img/shadow.png differ diff --git a/data/world/download.png b/data/world/download.png deleted file mode 100644 index 294fa03..0000000 Binary files a/data/world/download.png and /dev/null differ diff --git a/src/data.c b/src/data.c index bf84628..db55518 100644 --- a/src/data.c +++ b/src/data.c @@ -53,6 +53,7 @@ void data_load() img_denied = assets_load_image_from_file("data/img/denied.png"); img_world_map = assets_load_image_from_file("data/img/world_background.png"); img_invest = assets_load_image_from_file("data/img/invest.png"); + img_shadow = assets_load_image_from_file("data/img/shadow.png"); img_panel_bottom = assets_load_image_from_file("data/img/panel_bottom.png"); img_panel_top = assets_load_image_from_file("data/img/panel_top.png"); diff --git a/src/include/data.h b/src/include/data.h index 65f7389..b5e038c 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -55,6 +55,7 @@ image* img_hired; image* img_denied; image* img_world_map; image* img_invest; +image* img_shadow; image* img_button_bottom; image* img_button_top; 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) diff --git a/src/world.c b/src/world.c index 8ceb5b3..13dc644 100644 --- a/src/world.c +++ b/src/world.c @@ -1351,6 +1351,8 @@ static bool world_check_location_accessibility(world_location* orig, world_locat return false; } +bool world_map_location_is_in_sun(vec2f px_pos); + world_update_result world_render(platform_window* window, world* world) { world_update_result result = {0,0}; @@ -1391,6 +1393,10 @@ world_update_result world_render(platform_window* window, world* world) if (!location->is_accessible) { tint = COLOR_LOCATION_DOT_UNACCESSIBLE; } + + if (!world_map_location_is_in_sun(map_pos)) { + tint = rgb(255, 255, 0); + } renderer->render_image_tint(img_locationdot, circle_x, circle_y, dotsize, dotsize, tint); } -- cgit v1.2.3-70-g09d2