From 14f8206f5e660d1956a69f91f03eca275c77822a Mon Sep 17 00:00:00 2001 From: Metin Ozyildirim Date: Sat, 14 Dec 2019 22:46:08 +0000 Subject: [PATCH] (#450) Render debug details for platforms --- src/game/level/platforms.c | 45 ++++++++++++++++++++++++++++++++++++-- src/math/extrema.h | 2 ++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/game/level/platforms.c b/src/game/level/platforms.c index 55b98682..e066d1a3 100644 --- a/src/game/level/platforms.c +++ b/src/game/level/platforms.c @@ -11,6 +11,7 @@ #include "system/nth_alloc.h" #include "system/log.h" #include "game/level/level_editor/rect_layer.h" +#include "math/extrema.h" struct Platforms { Lt *lt; @@ -59,17 +60,57 @@ void destroy_platforms(Platforms *platforms) RETURN_LT0(platforms->lt); } -/* TODO(#450): platforms do not render their ids in debug mode */ int platforms_render(const Platforms *platforms, const Camera *camera) { for (size_t i = 0; i < platforms->rects_size; ++i) { + Rect platform_rect = platforms->rects[i]; if (camera_fill_rect( camera, - platforms->rects[i], + platform_rect, platforms->colors[i]) < 0) { return -1; } + + char debug_text[256]; + snprintf(debug_text, 256, + "id:%zd\n" + "x:%.2f\n" + "y:%.2f\n" + "w:%.2f\n" + "h:%.2f\n", + i, platform_rect.x, platform_rect.y, platform_rect.w, platform_rect.h); + + Vec2f text_pos = (Vec2f){.x = platform_rect.x, .y = platform_rect.y}; + Rect text_rect = sprite_font_boundary_box(text_pos, vec(2.0f, 2.0f), debug_text); + + Rect world_viewport = camera_view_port(camera); + Rect viewport = camera_view_port_screen(camera); + + if (rects_overlap( + camera_rect( + camera, + platform_rect), + viewport) && + camera_is_point_visible( + camera, + text_pos) == false) { + if (platform_rect.w > text_rect.w){ + text_pos.x = MAX(float, MIN(float, world_viewport.x, platform_rect.x + platform_rect.w - text_rect.w), + platform_rect.x); + } + if (platform_rect.h > text_rect.h){ + text_pos.y = MAX(float, MIN(float, world_viewport.y, platform_rect.y + platform_rect.h - text_rect.h), + platform_rect.y); + } + } + + if (camera_render_debug_text( + camera, + debug_text, + text_pos) < 0) { + return -1; + } } return 0; diff --git a/src/math/extrema.h b/src/math/extrema.h index d0622942..1f49bd28 100644 --- a/src/math/extrema.h +++ b/src/math/extrema.h @@ -9,6 +9,7 @@ return a > b ? a : b; \ } \ +MAX_INSTANCE(float) MAX_INSTANCE(int64_t) MAX_INSTANCE(size_t) #define MAX(type, a, b) max_##type(a, b) @@ -19,6 +20,7 @@ MAX_INSTANCE(size_t) return a < b ? a : b; \ } \ +MIN_INSTANCE(float) MIN_INSTANCE(int64_t) MIN_INSTANCE(size_t) #define MIN(type, a, b) min_##type(a, b) -- 2.44.0