diff --git a/CMakeLists.txt b/CMakeLists.txt index e63d842..37b9f37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ set(SRC src/input.c src/scaller.c src/scene.c + src/game.c ) # add the executable diff --git a/assets/music/chinese rap.mp3 b/assets/music/chinese rap.mp3 new file mode 100644 index 0000000..2f1ac78 Binary files /dev/null and b/assets/music/chinese rap.mp3 differ diff --git a/src/game.c b/src/game.c new file mode 100644 index 0000000..9ef7a3e --- /dev/null +++ b/src/game.c @@ -0,0 +1,41 @@ +#include "game.h" +#include +#include "scaller.h" + +static RenderId_t menuObjects[10]; +static unsigned menuObjectsSize = 0; + + +Scene_t gameScene; + +int game_staticRender(void){ + MonitorSize_t size = renderer_getMonitorSize(); + float aspectRatio = (float)size.width / size.height; + + SDL_Surface* ppSurface = IMG_Load("./assets/img/pp.png"); + if(ppSurface == NULL){ + printf("cannot load background"); + return -1; + } + + RenderObject_t pp; + strcpy(pp.name, "pp"); + pp.z = 10; + pp.surface = ppSurface; + pp.width = 1; + pp.height = 1; + scaller(pp.surface, 1, &pp.width, &pp.height); + menuObjects[menuObjectsSize] = scene_addRenderObject(&gameScene, pp, CAMERA_WIDTH * 0.35f, 0); + renderer_setScene(&gameScene); + ++menuObjectsSize; + return 0; +} + +int game_render([[maybe_unused]] float delta){ + return 0; +} + +void game_remove(void){ + scene_free(&gameScene); + menuObjectsSize = 0; +} diff --git a/src/game.h b/src/game.h new file mode 100644 index 0000000..79b1438 --- /dev/null +++ b/src/game.h @@ -0,0 +1,13 @@ +#ifndef __GAME_H__ +#define __GAME_H__ + +#include "renderer.h" + +extern Scene_t gameScene; + +int game_staticRender(void); +int game_render(float delta); + +void game_remove(void); + +#endif diff --git a/src/main.c b/src/main.c index 63a0956..541a8ec 100644 --- a/src/main.c +++ b/src/main.c @@ -1,3 +1,4 @@ +#include "game.h" #include "input.h" #include "renderer.h" #include "text.h" @@ -15,6 +16,7 @@ clock_t timecode; long iter; Mix_Music *prout; + static void space(void) { printf("space!\n"); if(Mix_PlayMusic(prout, 0) != 0){ @@ -23,6 +25,11 @@ static void space(void) { Mix_FreeMusic(prout); running = false; } + if(renderer_getScene() == &menuScene){ + menu_remove(); + renderer_setScene(&gameScene); + game_staticRender(); + } } Scene_t demo; @@ -43,8 +50,12 @@ static void game_loop(void) { float delta = ((float)(clock() - timecode)) / CLOCKS_PER_SEC; //update time - menu_render(delta); - + if(renderer_getScene() == &menuScene){ + menu_render(delta); + } + else{ + game_render(delta); + } timecode = clock(); } diff --git a/src/menu.h b/src/menu.h index e2f6aec..01eafbb 100644 --- a/src/menu.h +++ b/src/menu.h @@ -3,6 +3,7 @@ #include "renderer.h" +extern Scene_t menuScene; int menu_staticRender(void); int menu_render(float delta); diff --git a/src/renderer.c b/src/renderer.c index 2403559..650639a 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -89,3 +89,7 @@ void renderer_setScene(const Scene_t * newScene) { MonitorSize_t renderer_getMonitorSize() { return monitorSize; } + +const Scene_t * renderer_getScene(void){ + return scene; +} diff --git a/src/renderer.h b/src/renderer.h index dee0a9c..827cf5f 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -19,5 +19,6 @@ typedef struct MonitorSize { void renderer_main(void(*game_setup)(void), void(*game_loop)(void)); MonitorSize_t renderer_getMonitorSize(void); void renderer_setScene(const Scene_t * newScene); +const Scene_t * renderer_getScene(void); #endif