diff --git a/Makefile b/Makefile index 27efdece066be0fff213e822f3f031ff1b732710..95d19433f1faa8bdec120bf2f1227f6e09c0a5bb 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ LDFLAGS = -lm -lmingw32 -lSDL2main -lSDL2 -lSDL2_ttf SDL2_INCLUDE_DIR = src/include SDL2_LIBRARIES_DIR = src/lib -INC = sdl2-light.h sdl2-ttf-light.h library/Display/Display.h library/World/world.h library/Sprites/sprites.h library/utility/utility.h -SRC = main.c sdl2-light.c sdl2-ttf-light.c library/Display/Display.c library/World/world.c library/Sprites/sprites.c library/utility/utility.c +INC = sdl2-light.h sdl2-ttf-light.h library/Display/Display.h library/World/world.h library/Sprites/sprites.h library/utility/utility.h library/menu/menu.h +SRC = main.c sdl2-light.c sdl2-ttf-light.c library/Display/Display.c library/World/world.c library/Sprites/sprites.c library/utility/utility.c library/menu/menu.c OBJ = $(SRC:%.c=%.o) diff --git a/library/Display/Display.c b/library/Display/Display.c index 6fc28aa12a377435fe47d9f2cb6ba62ece7fe193..faa3d0db6d42438d07b05c3a2a0d962d727ea782 100644 --- a/library/Display/Display.c +++ b/library/Display/Display.c @@ -87,6 +87,9 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,ressources_t *textu apply_text(renderer, 10, 10, 100, 33, world->str, textures->font, textures->color); }else{ apply_text(renderer, 10, 10, 100, 33, "Menu", textures->font, textures->color); + apply_text(renderer, 10, 10, 100, 33, "Jouer", textures->font, textures->color); + apply_text(renderer, 10, 10, 100, 33, "Magasin", textures->font, textures->color); + apply_text(renderer, 10, 10, 100, 33, "Exit", textures->font, textures->color); } update_screen(renderer); diff --git a/library/World/world.c b/library/World/world.c index 07e0bdb29aa6fee37a4c83d78ba4cfbd3cefdbbf..dbbf35f8821d7383457551ccb82f10fbad46e21b 100644 --- a/library/World/world.c +++ b/library/World/world.c @@ -19,6 +19,10 @@ void update_data(world_t *world){ allEvents(world); world->timer = SDL_GetTicks(); + }else{ + if (collidePoint(world->play, world->mouseX, world->mouseY)){ + world->isMenu = false; + } } } @@ -37,6 +41,8 @@ void init_data(world_t * world){ init_walls(world); world->ligneArriver = init_sprite(world->ligneArriver, 0, -world->nb_lines_murs*METEORITE_SIZE-30 , SCREEN_WIDTH, FINISH_LINE_HEIGHT, 'z'); + world->play = init_btn(0, 0, 100, 100); + print_sprite(world->vaisseau); world->startTimer = SDL_GetTicks(); world->timer = SDL_GetTicks(); @@ -44,6 +50,9 @@ void init_data(world_t * world){ world->angle = 0.0; world->isFlipping = 0; world->isMenu = true; + + world->mouseX = 0; + world->mouseY = 0; } diff --git a/library/World/world.h b/library/World/world.h index b580f78f0fa6fb5494e07f8879f816f1528dd72e..93d1abc3201ed2c0d336d5369148f29d211a9bd8 100644 --- a/library/World/world.h +++ b/library/World/world.h @@ -4,6 +4,7 @@ #include "../../constante.c" #include "../../src/include/SDL2/SDL.h" #include <stdbool.h> +#include "../menu/menu.h" /** * \file world.h @@ -37,6 +38,9 @@ struct world_s{ sprite_t *vaisseau ; /*!< Représentation du vaisseau */ sprite_t **murs; /*<Représentation des météorites>*/ sprite_t **murs2; /*<Représentation des météorites et de l'air>*/ + + btn_t *play; + int nb_murs; // Nombre de météorites int nb_lines_murs; // Nombre de lignes de météorites sprite_t *ligneArriver; @@ -48,6 +52,9 @@ struct world_s{ double angle; // Angle de rotation de la map int isFlipping; // Indique si l'on est en train de faire une rotation de l'écran et dans quelle sens (0 : non droite, 1 : vers la droite, -1 : vers la gauche, -2 : non gauche) bool isMenu; + + int mouseX; + int mouseY; }; typedef struct world_s world_t; diff --git a/library/menu/menu.c b/library/menu/menu.c index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6fb361e7d3274fb59745002c43e36ea9cb578fff 100644 --- a/library/menu/menu.c +++ b/library/menu/menu.c @@ -0,0 +1,19 @@ +#include "menu.h" + +#include <stdio.h> +#include <stdlib.h> + +btn_t *init_btn(int x, int y, int w, int h){ + btn_t *btn = malloc(sizeof(btn_t)); + btn->rect.x = x; + btn->rect.y = y; + btn->rect.w = w; + btn->rect.h = h; + + return btn; +} + +int collidePoint(btn_t *btn, int x, int y){ + if (btn->rect.x > x && btn->rect.x + btn->rect.w < x && btn->rect.y > y && btn->rect.y + btn->rect.h < y;) return 1; + return 0; +} \ No newline at end of file diff --git a/library/menu/menu.h b/library/menu/menu.h index 0e52d5e7cf299601ac2b5dad594f78d201d4aa60..7857e54df020e28030ef26f24fdcb643734fac0e 100644 --- a/library/menu/menu.h +++ b/library/menu/menu.h @@ -2,7 +2,20 @@ #include <stdlib.h> #include "../../src/include/SDL2/SDL.h" +#ifndef DEF_CONSTANTES +#define DEF_CONSTANTES + +#define LARGEUR_FENETRE 704 +#define HAUTEUR_FENETRE 704 + + struct btn{ SDL_Rect rect; - SDL_Texture *texture; -} \ No newline at end of file +} + +typedef struct btn_t ; + +btn_t *init_btn(int x, int y, int w, int h); +int collidePoint(btn_t *btn, int x, int y); + +#endif \ No newline at end of file diff --git a/main.c b/main.c index 28879a84b03370a3bc975de8e6392742ca7263e8..528cb883075f2b5d9f412a030f567113dd471382 100644 --- a/main.c +++ b/main.c @@ -32,6 +32,8 @@ void handle_events(SDL_Event *event,world_t *world){ world->vaisseau->x += MOVING_STEP; } } + SDL_GetMouseState(&world->mouseX, &world->mouseY); + while( SDL_PollEvent( event ) ) {