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..2eeff6e --- /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 = { NULL, 0, 0, 0 }; + +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 3508bbe..ff71399 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -89,3 +89,7 @@ void renderer_setScene(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 f9f2221..22a8ce8 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(Scene_t * newScene); +const Scene_t * renderer_getScene(void); #endif diff --git a/src/scene.c b/src/scene.c index 4d3ad60..fa1339f 100644 --- a/src/scene.c +++ b/src/scene.c @@ -16,7 +16,6 @@ void scene_render(Scene_t * scene) { int maxScanX = scene->x + CAMERA_WIDTH; int maxScanY = scene->y + CAMERA_HEIGHT; - printf("camera: %d %d %d %d\n", minScanX, minScanY, maxScanX, maxScanY); for(int i = 0; i < scene->objectCount; i++) { SceneObject_t * object = &scene->objects[i]; @@ -25,8 +24,6 @@ void scene_render(Scene_t * scene) { float y = (object->y) / CAMERA_HEIGHT; //the object is to be rendered - printf("%f %f\n", x, y); - SDL_Rect rect = { round(x * monitorSize.width) , round(y * monitorSize.height), @@ -55,7 +52,6 @@ static void buildCache(SceneObject_t * object) { RenderId_t scene_addRenderObject(Scene_t * scene, RenderObject_t object, int x, int y) { RenderId_t itemId = scene->objectCount++; - printf("Adding: %s\n", object.name); scene->objects = realloc(scene->objects, scene->objectCount * sizeof(SceneObject_t)); SceneObject_t item = {