diff --git a/assets/fonts/Quinquefive.ttf b/assets/fonts/Quinquefive.ttf new file mode 100644 index 0000000..fdafa36 Binary files /dev/null and b/assets/fonts/Quinquefive.ttf differ diff --git a/assets/img/menu_bg.png b/assets/img/menu_bg.png new file mode 100644 index 0000000..d5cc6e2 Binary files /dev/null and b/assets/img/menu_bg.png differ diff --git a/src/main.c b/src/main.c index 387a7c2..fbc5bc8 100644 --- a/src/main.c +++ b/src/main.c @@ -10,7 +10,7 @@ #include #include "scaller.h" -long timecode; +clock_t timecode; long iter; Mix_Music *prout; @@ -25,15 +25,15 @@ static void space(void) { } static void game_main(void) { - long delta = time(NULL) - timecode; + + float delta = ((float)(clock() - timecode)) / CLOCKS_PER_SEC; //main game code if(iter == 0) { - menu_render(); + menu_staticRender(); RenderObject_t text; SDL_Color white = {255, 255, 255, 255}; - TTF_Init(); - if(text_renderText(&text, 0.1f, 0.1f, 1000, 1, white, "./assets/fonts/arial.ttf", 25, "Hello World") < 0){ + if(text_renderText(&text, 0.1f, 0.1f, 1000, 0.7f, white, "./assets/fonts/Quinquefive.ttf", 25, "Hello World") < 0){ printf("error"); exit(1); } @@ -41,13 +41,8 @@ static void game_main(void) { SDL_Surface* img = IMG_Load("./assets/img/pp.png"); RenderObject_t duck = { -<<<<<<< HEAD - 0.25, - 0.25, -======= 0.5, 0.5, ->>>>>>> 781f4ba7beb2793dbdb38f1f2ca35f8a5fb52da3 0, 0.50, 0.50, @@ -57,20 +52,22 @@ static void game_main(void) { scaller(duck.surface, 1, &duck.width, &duck.height); placer(duck.surface, 1, &duck.x, &duck.y); - renderer_renderObject(text); - renderer_renderObject(duck); + // renderer_renderObject(text); + // renderer_renderObject(duck); input_listen(SDL_SCANCODE_SPACE, space); } + menu_render(delta); //update time - timecode = time(NULL); + timecode = clock(); iter++; } int main(void) { + TTF_Init(); if(Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096) != 0){ printf("Music sound could not be open!\n" "SDL_Error: %s\n", Mix_GetError()); @@ -84,7 +81,7 @@ int main(void) { } iter = 0; - timecode = time(NULL); + timecode = clock(); Mix_Init(MIX_INIT_MP3); renderer_main(game_main); diff --git a/src/menu.c b/src/menu.c index 3030882..cc73d73 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2,30 +2,71 @@ #include #include "renderer.h" #include "scaller.h" +#include "text.h" + +#define BLINK_FREQUENCY 0.00005 static RenderId_t menuObjects[10]; static unsigned menuObjectsSize = 0; -int menu_render(void){ - SDL_Surface* buttonImageSurface = IMG_Load("./assets/img/start.png"); - if(buttonImageSurface == NULL){ - printf("cannot load"); - return -1; - } - RenderObject_t buttonImage; - float buttonScale = 0.3f; +static float blinkDelta = 0; +static bool increaseTextBrightness = false; +static Uint8 textOpacity = 255; + + +int menu_staticRender(void){ MonitorSize_t size = renderer_getMonitorSize(); float aspectRatio = (float)size.width / size.height; - buttonImage.x = 0.5f; - buttonImage.y = 0.5f; - scaller(buttonImageSurface, buttonScale, &buttonImage.width, &buttonImage.height); - placer(buttonImageSurface, buttonScale, &buttonImage.x, &buttonImage.y); + SDL_Surface* backgroundImageSurface = IMG_Load("./assets/img/menu_bg.png"); + if(backgroundImageSurface == NULL){ + printf("cannot load background"); + return -1; + } - buttonImage.surface = buttonImageSurface; - menuObjects[menuObjectsSize] = renderer_renderObject(buttonImage); + RenderObject_t backgroundImage; + backgroundImage.x = 0; + backgroundImage.y = 0; + backgroundImage.z = 0; + backgroundImage.surface = backgroundImageSurface; + backgroundImage.width = 1; + backgroundImage.height = 1; + menuObjects[menuObjectsSize] = renderer_renderObject(backgroundImage); + ++menuObjectsSize; + return 0; +} + +int menu_render(float delta){ + + for(unsigned i = 1; i < menuObjectsSize; ++i){ + renderer_removeObject(menuObjects[i]); + } + menuObjectsSize = 1; + + blinkDelta += delta; + + if(increaseTextBrightness && blinkDelta >= BLINK_FREQUENCY){ + textOpacity += 1; + if(textOpacity == 255) increaseTextBrightness = false; + blinkDelta = 0; + } + else if(!increaseTextBrightness && blinkDelta >= BLINK_FREQUENCY){ + textOpacity -= 1; + if(textOpacity == 1) increaseTextBrightness = true; + blinkDelta = 0; + } + RenderObject_t startTextShadow; + SDL_Color black = {0, 0, 0, textOpacity}; + text_renderText(&startTextShadow, 0.495f, 0.855f, 9, 1.f, black, "./assets/fonts/Quinquefive.ttf", 28, "Press space to start"); + menuObjects[menuObjectsSize] = renderer_renderObject(startTextShadow); + ++menuObjectsSize; + + RenderObject_t startText; + SDL_Color orange = {255,165,0, textOpacity}; + text_renderText(&startText, 0.5f, 0.85f, 10, 1.f, orange, "./assets/fonts/Quinquefive.ttf", 28, "Press space to start"); + menuObjects[menuObjectsSize] = renderer_renderObject(startText); ++menuObjectsSize; return 0; } diff --git a/src/menu.h b/src/menu.h index c62fbc6..e2f6aec 100644 --- a/src/menu.h +++ b/src/menu.h @@ -3,7 +3,9 @@ #include "renderer.h" -int menu_render(void); + +int menu_staticRender(void); +int menu_render(float delta); void menu_remove(void); diff --git a/src/text.c b/src/text.c index d4a84b7..bfafa5c 100644 --- a/src/text.c +++ b/src/text.c @@ -33,7 +33,7 @@ int text_renderText(RenderObject_t* renderObject, float x, float y, int z, float TTF_Font* font = NULL; for(unsigned i = 0; i < fontCacheSize; ++i){ - if(strcmp(fontCache[i].file, fontFilename) && fontCache[i].size == fontSize){ + if(strcmp(fontCache[i].file, fontFilename) == 0 && fontCache[i].size == fontSize){ font = fontCache[i].font; break; }