Fixed menu, leaks and clickableness
This commit is contained in:
parent
fdfc6fcf77
commit
064e3e0f87
34
src/main.c
34
src/main.c
|
@ -151,8 +151,8 @@ exitGame(void *unused)
|
||||||
static void
|
static void
|
||||||
initMainMenu(void)
|
initMainMenu(void)
|
||||||
{
|
{
|
||||||
static SDL_Color C_WHITE = { 255, 255, 255, 0 };
|
static SDL_Color C_DEFAULT = { 255, 255, 0, 0 };
|
||||||
static SDL_Color C_RED = { 255, 0, 0, 0 };
|
static SDL_Color C_HOVER = { 255, 0, 0, 0 };
|
||||||
|
|
||||||
struct MENU_ITEM {
|
struct MENU_ITEM {
|
||||||
char label[20];
|
char label[20];
|
||||||
|
@ -167,16 +167,16 @@ initMainMenu(void)
|
||||||
|
|
||||||
for (unsigned int i = 0; i < 2; ++i) {
|
for (unsigned int i = 0; i < 2; ++i) {
|
||||||
Sprite *s1 = sprite_create();
|
Sprite *s1 = sprite_create();
|
||||||
sprite_load_text_texture(s1, "assets/GUI/SDS_8x8.ttf", 0, 14);
|
sprite_load_text_texture(s1, "assets/GUI/SDS_8x8.ttf", 0, 20);
|
||||||
texture_load_from_text(s1->textures[0], menu_items[i].label,
|
texture_load_from_text(s1->textures[0], menu_items[i].label,
|
||||||
C_WHITE, gRenderer);
|
C_DEFAULT, gRenderer);
|
||||||
s1->pos = (Position) { 200, 100 + (i*50) };
|
s1->pos = (Position) { 200, 100 + (i*50) };
|
||||||
s1->fixed = true;
|
s1->fixed = true;
|
||||||
|
|
||||||
Sprite *s2 = sprite_create();
|
Sprite *s2 = sprite_create();
|
||||||
sprite_load_text_texture(s2, "assets/GUI/SDS_8x8.ttf", 0, 14);
|
sprite_load_text_texture(s2, "assets/GUI/SDS_8x8.ttf", 0, 20);
|
||||||
texture_load_from_text(s2->textures[0], menu_items[i].label,
|
texture_load_from_text(s2->textures[0], menu_items[i].label,
|
||||||
C_RED, gRenderer);
|
C_HOVER, gRenderer);
|
||||||
s2->pos = (Position) { 200, 100 + (i*50) };
|
s2->pos = (Position) { 200, 100 + (i*50) };
|
||||||
s2->fixed = true;
|
s2->fixed = true;
|
||||||
|
|
||||||
|
@ -191,10 +191,12 @@ resetGame(void)
|
||||||
map_destroy(gMap);
|
map_destroy(gMap);
|
||||||
|
|
||||||
info("Building new map");
|
info("Building new map");
|
||||||
gMap = map_lua_generator_run(++cLevel, gRenderer);
|
gMap = map_lua_generator_run(cLevel, gRenderer);
|
||||||
gPlayer->sprite->pos = (Position) {
|
gPlayer->sprite->pos = (Position) {
|
||||||
TILE_DIMENSION, TILE_DIMENSION };
|
TILE_DIMENSION, TILE_DIMENSION };
|
||||||
gCamera.pos = (Position) { 0, 0 };
|
|
||||||
|
map_set_current_room(gMap, &gPlayer->sprite->pos);
|
||||||
|
camera_follow_position(&gCamera, &gPlayer->sprite->pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
@ -265,6 +267,7 @@ check_next_level(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (tile->levelExit) {
|
if (tile->levelExit) {
|
||||||
|
++cLevel;
|
||||||
resetGame();
|
resetGame();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -272,7 +275,6 @@ check_next_level(void)
|
||||||
static void
|
static void
|
||||||
run_game(void)
|
run_game(void)
|
||||||
{
|
{
|
||||||
SDL_RenderSetViewport(gRenderer, NULL);
|
|
||||||
map_clear_dead_monsters(gMap);
|
map_clear_dead_monsters(gMap);
|
||||||
map_clear_collected_items(gMap);
|
map_clear_collected_items(gMap);
|
||||||
roommatrix_populate_from_map(gRoomMatrix, gMap);
|
roommatrix_populate_from_map(gRoomMatrix, gMap);
|
||||||
|
@ -290,6 +292,7 @@ run_game(void)
|
||||||
map_move_monsters(gMap, gRoomMatrix);
|
map_move_monsters(gMap, gRoomMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_SetRenderDrawColor(gRenderer, 0, 0, 0, 0);
|
||||||
SDL_RenderClear(gRenderer);
|
SDL_RenderClear(gRenderer);
|
||||||
|
|
||||||
SDL_RenderSetViewport(gRenderer, &gameViewport);
|
SDL_RenderSetViewport(gRenderer, &gameViewport);
|
||||||
|
@ -323,6 +326,7 @@ run_game(void)
|
||||||
static void
|
static void
|
||||||
run_menu(void)
|
run_menu(void)
|
||||||
{
|
{
|
||||||
|
SDL_SetRenderDrawColor(gRenderer, 0, 0, 0, 0);
|
||||||
SDL_RenderClear(gRenderer);
|
SDL_RenderClear(gRenderer);
|
||||||
SDL_RenderSetViewport(gRenderer, NULL);
|
SDL_RenderSetViewport(gRenderer, NULL);
|
||||||
menu_render(mainMenu, &gCamera);
|
menu_render(mainMenu, &gCamera);
|
||||||
|
@ -387,17 +391,19 @@ void run(void)
|
||||||
static
|
static
|
||||||
void close(void)
|
void close(void)
|
||||||
{
|
{
|
||||||
player_destroy(gPlayer);
|
if (gPlayer)
|
||||||
map_destroy(gMap);
|
player_destroy(gPlayer);
|
||||||
|
if (gMap)
|
||||||
|
map_destroy(gMap);
|
||||||
|
if (mainMenu)
|
||||||
|
menu_destroy(mainMenu);
|
||||||
|
|
||||||
roommatrix_destroy(gRoomMatrix);
|
roommatrix_destroy(gRoomMatrix);
|
||||||
gui_destroy(gGui);
|
gui_destroy(gGui);
|
||||||
pointer_destroy(gPointer);
|
pointer_destroy(gPointer);
|
||||||
item_builder_close();
|
item_builder_close();
|
||||||
particle_engine_close();
|
particle_engine_close();
|
||||||
|
|
||||||
if (mainMenu)
|
|
||||||
menu_destroy(mainMenu);
|
|
||||||
|
|
||||||
SDL_DestroyRenderer(gRenderer);
|
SDL_DestroyRenderer(gRenderer);
|
||||||
SDL_DestroyWindow(gWindow);
|
SDL_DestroyWindow(gWindow);
|
||||||
gWindow = NULL;
|
gWindow = NULL;
|
||||||
|
|
|
@ -302,6 +302,9 @@ Map* map_lua_generator_run(unsigned int level, SDL_Renderer *renderer)
|
||||||
|
|
||||||
lua_close(L);
|
lua_close(L);
|
||||||
|
|
||||||
|
// Reset the map
|
||||||
|
map->currentRoom = (Position) { 0, 0 };
|
||||||
|
|
||||||
info("Done");
|
info("Done");
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
|
|
11
src/menu.c
11
src/menu.c
|
@ -60,12 +60,13 @@ menu_render(Menu *m, Camera *cam)
|
||||||
|
|
||||||
while (items) {
|
while (items) {
|
||||||
MenuItem *item = items->data;
|
MenuItem *item = items->data;
|
||||||
|
items = items->next;
|
||||||
if (item->selected)
|
if (item->selected)
|
||||||
sprite_render(item->hsprite, cam);
|
sprite_render(item->hsprite, cam);
|
||||||
else
|
else
|
||||||
sprite_render(item->sprite, cam);
|
sprite_render(item->sprite, cam);
|
||||||
items = items->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -82,11 +83,9 @@ menu_item_destroy(MenuItem *item)
|
||||||
void
|
void
|
||||||
menu_destroy(Menu *m)
|
menu_destroy(Menu *m)
|
||||||
{
|
{
|
||||||
LinkedList *items = m->items;
|
while (m->items)
|
||||||
while (items) {
|
menu_item_destroy(linkedlist_pop(&m->items));
|
||||||
menu_item_destroy(items->data);
|
|
||||||
items = items->next;
|
|
||||||
}
|
|
||||||
free(m);
|
free(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,10 @@ void
|
||||||
pointer_handle_event(Pointer *p, SDL_Event *event)
|
pointer_handle_event(Pointer *p, SDL_Event *event)
|
||||||
{
|
{
|
||||||
if (event->type == SDL_MOUSEMOTION) {
|
if (event->type == SDL_MOUSEMOTION) {
|
||||||
p->sprite->pos.x = event->motion.x;
|
// Compensate for a small offset in the sprite
|
||||||
p->sprite->pos.y = event->motion.y;
|
p->sprite->pos.x = event->motion.x - 6;
|
||||||
// debug("Pointer pos: %dx%d", p->sprite->pos.x, p->sprite->pos.y);
|
p->sprite->pos.y = event->motion.y - 6;
|
||||||
|
//debug("Pointer pos: %dx%d", p->sprite->pos.x, p->sprite->pos.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue