80 lines
2.3 KiB
C
80 lines
2.3 KiB
C
#include "menu.h"
|
|
#include <SDL2/SDL_image.h>
|
|
#include "renderer.h"
|
|
#include "scaller.h"
|
|
#include "text.h"
|
|
|
|
#define BLINK_FREQUENCY 0.00005
|
|
|
|
static RenderId_t menuObjects[10];
|
|
static unsigned menuObjectsSize = 0;
|
|
|
|
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;
|
|
|
|
|
|
SDL_Surface* backgroundImageSurface = IMG_Load("./assets/img/menu_bg.png");
|
|
if(backgroundImageSurface == NULL){
|
|
printf("cannot load background");
|
|
return -1;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
void menu_remove(void){
|
|
for(unsigned i = 0; i < menuObjectsSize; ++i){
|
|
renderer_removeObject(menuObjects[i]);
|
|
}
|
|
menuObjectsSize = 0;
|
|
}
|