Skip to content

Commit 2598f1e

Browse files
authored
Render player current room on big map (#137)
Fixes: #131
1 parent 22d5593 commit 2598f1e

3 files changed

Lines changed: 47 additions & 28 deletions

File tree

src/gui.c

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,29 @@ create_label_sprite(Position pos)
103103
return s;
104104
}
105105

106+
static Sprite*
107+
create_minimap_blank_sprite(SDL_Renderer *renderer)
108+
{
109+
Sprite *sprite = sprite_create();
110+
Texture *texture = texture_create();
111+
texture->dim = (Dimension) {
112+
RIGHT_GUI_WIDTH,
113+
MINIMAP_GUI_HEIGHT - 8
114+
};
115+
sprite->textures[0] = texture;
116+
sprite->destroyTextures = true;
117+
sprite->pos = (Position) { 0, 4 };
118+
sprite->dim = (Dimension) { RIGHT_GUI_WIDTH, MINIMAP_GUI_HEIGHT - 8 };
119+
sprite->fixed = true;
120+
texture_create_blank(texture,
121+
SDL_TEXTUREACCESS_TARGET,
122+
renderer);
123+
texture_set_blend_mode(texture, SDL_BLENDMODE_BLEND);
124+
texture_set_scale_mode(texture, SDL_SCALEMODE_NEAREST);
125+
126+
return sprite;
127+
}
128+
106129
static void
107130
init_sprites(Gui *gui, Camera *cam)
108131
{
@@ -193,24 +216,8 @@ init_sprites(Gui *gui, Camera *cam)
193216
BOTTOM_GUI_HEIGHT/16,
194217
cam);
195218

196-
Sprite *minimap = sprite_create();
197-
Texture *texture = texture_create();
198-
texture->dim = (Dimension) {
199-
RIGHT_GUI_WIDTH,
200-
MINIMAP_GUI_HEIGHT - 8
201-
};
202-
minimap->textures[0] = texture;
203-
minimap->destroyTextures = true;
204-
minimap->pos = (Position) { 0, 4 };
205-
minimap->dim = (Dimension) { RIGHT_GUI_WIDTH, MINIMAP_GUI_HEIGHT - 8 };
206-
minimap->fixed = true;
207-
texture_create_blank(texture,
208-
SDL_TEXTUREACCESS_TARGET,
209-
cam->renderer);
210-
texture_set_blend_mode(texture, SDL_BLENDMODE_BLEND);
211-
texture_set_scale_mode(texture, SDL_SCALEMODE_NEAREST);
212-
213-
gui->miniMap = minimap;
219+
gui->miniMap = create_minimap_blank_sprite(cam->renderer);
220+
gui->miniMapOverlay = create_minimap_blank_sprite(cam->renderer);
214221

215222
texture_load_from_text(gui->labels[KEY_LABEL]->textures[0], "Keys:", C_WHITE, C_BLACK, cam->renderer);
216223
gui->labels[KEY_LABEL]->dim = gui->labels[KEY_LABEL]->textures[0]->dim;
@@ -533,20 +540,27 @@ gui_update_minimap(Gui *gui, Camera *cam, RoomMatrix *rm)
533540
SDL_RenderFillRect(cam->renderer, &mod_box);
534541
}
535542

536-
SDL_SetRenderTarget(cam->renderer, NULL);
537-
}
543+
SDL_SetRenderTarget(cam->renderer, gui->miniMapOverlay->textures[0]->texture);
544+
SDL_SetRenderDrawColor(cam->renderer, 0, 0, 0, SDL_ALPHA_TRANSPARENT);
545+
SDL_RenderClear(cam->renderer);
538546

539-
void
540-
gui_render_minimap(Gui *gui, Camera *cam, RoomMatrix *rm)
541-
{
542-
sprite_render(gui->miniMap, cam);
547+
// Render current room square
543548
const SDL_FRect r = {
544549
(float) rm->roomPos.x * MAP_ROOM_WIDTH,
545-
4.0f + (float) rm->roomPos.y * MAP_ROOM_HEIGHT,
550+
(float) rm->roomPos.y * MAP_ROOM_HEIGHT,
546551
MAP_ROOM_WIDTH,
547552
MAP_ROOM_HEIGHT };
548-
SDL_SetRenderDrawColor(cam->renderer, 0, 255, 255, 100);
553+
SDL_SetRenderDrawColor(cam->renderer, 235, 235, 52, 200);
549554
SDL_RenderRect(cam->renderer, &r);
555+
556+
SDL_SetRenderTarget(cam->renderer, NULL);
557+
}
558+
559+
void
560+
gui_render_minimap(Gui *gui, Camera *cam)
561+
{
562+
sprite_render(gui->miniMap, cam);
563+
sprite_render(gui->miniMapOverlay, cam);
550564
}
551565

552566
void
@@ -556,10 +570,14 @@ gui_render_minimap_overlay(Gui *gui, Camera *cam)
556570
50, 50, GAME_VIEW_WIDTH - 100, GAME_VIEW_HEIGHT - 100
557571
};
558572

573+
// Render map
559574
Texture *texture = gui->miniMap->textures[0];
560575
texture_set_alpha(texture, 200);
561576
texture_render_clip_ex(texture, &target_box, NULL, 0.0, NULL, SDL_FLIP_NONE, cam);
562577
texture_set_alpha(texture, SDL_ALPHA_OPAQUE);
578+
579+
// Render map overlay
580+
texture_render_clip_ex(gui->miniMapOverlay->textures[0], &target_box, NULL, 0.0, NULL, SDL_FLIP_NONE, cam);
563581
}
564582

565583
void

src/gui.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ typedef struct Gui {
5151
Sprite *bottomFrame;
5252
Sprite *statsFrame;
5353
Sprite *miniMap;
54+
Sprite *miniMapOverlay;
5455
Sprite *labels[LABEL_COUNT];
5556
Sprite *activeTooltip;
5657
Sprite *goldKey;
@@ -93,7 +94,7 @@ gui_reset(Gui *gui, Camera *cam);
9394
* \param[in] rm The room matrix
9495
*/
9596
void
96-
gui_render_minimap(Gui *gui, Camera *cam, RoomMatrix *rm);
97+
gui_render_minimap(Gui *gui, Camera *cam);
9798

9899
/**
99100
* \brief Render the large minimap overlay

src/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ render_gui(void)
10111011
SDL_SetRenderViewport(gRenderer, &statsGuiViewport);
10121012
gui_render_panel(gGui, gCamera);
10131013
SDL_SetRenderViewport(gRenderer, &minimapViewport);
1014-
gui_render_minimap(gGui, gCamera, gRoomMatrix);
1014+
gui_render_minimap(gGui, gCamera);
10151015
SDL_SetRenderViewport(gRenderer, &skillBarViewport);
10161016
skillbar_render(gSkillBar, gPlayer, gCamera);
10171017
SDL_SetRenderViewport(gRenderer, &bottomGuiViewport);

0 commit comments

Comments
 (0)