add game scene
This commit is contained in:
@@ -27,6 +27,7 @@ set(SRC
|
|||||||
src/input.c
|
src/input.c
|
||||||
src/scaller.c
|
src/scaller.c
|
||||||
src/scene.c
|
src/scene.c
|
||||||
|
src/game.c
|
||||||
)
|
)
|
||||||
|
|
||||||
# add the executable
|
# add the executable
|
||||||
|
|||||||
Binary file not shown.
+41
@@ -0,0 +1,41 @@
|
|||||||
|
#include "game.h"
|
||||||
|
#include <SDL2/SDL_image.h>
|
||||||
|
#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;
|
||||||
|
}
|
||||||
+13
@@ -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
|
||||||
+12
-1
@@ -1,3 +1,4 @@
|
|||||||
|
#include "game.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "renderer.h"
|
#include "renderer.h"
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
@@ -15,6 +16,7 @@ clock_t timecode;
|
|||||||
long iter;
|
long iter;
|
||||||
Mix_Music *prout;
|
Mix_Music *prout;
|
||||||
|
|
||||||
|
|
||||||
static void space(void) {
|
static void space(void) {
|
||||||
printf("space!\n");
|
printf("space!\n");
|
||||||
if(Mix_PlayMusic(prout, 0) != 0){
|
if(Mix_PlayMusic(prout, 0) != 0){
|
||||||
@@ -23,6 +25,11 @@ static void space(void) {
|
|||||||
Mix_FreeMusic(prout);
|
Mix_FreeMusic(prout);
|
||||||
running = false;
|
running = false;
|
||||||
}
|
}
|
||||||
|
if(renderer_getScene() == &menuScene){
|
||||||
|
menu_remove();
|
||||||
|
renderer_setScene(&gameScene);
|
||||||
|
game_staticRender();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Scene_t demo;
|
Scene_t demo;
|
||||||
@@ -43,8 +50,12 @@ static void game_loop(void) {
|
|||||||
float delta = ((float)(clock() - timecode)) / CLOCKS_PER_SEC;
|
float delta = ((float)(clock() - timecode)) / CLOCKS_PER_SEC;
|
||||||
|
|
||||||
//update time
|
//update time
|
||||||
|
if(renderer_getScene() == &menuScene){
|
||||||
menu_render(delta);
|
menu_render(delta);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
game_render(delta);
|
||||||
|
}
|
||||||
timecode = clock();
|
timecode = clock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "renderer.h"
|
#include "renderer.h"
|
||||||
|
|
||||||
|
extern Scene_t menuScene;
|
||||||
|
|
||||||
int menu_staticRender(void);
|
int menu_staticRender(void);
|
||||||
int menu_render(float delta);
|
int menu_render(float delta);
|
||||||
|
|||||||
@@ -89,3 +89,7 @@ void renderer_setScene(Scene_t * newScene) {
|
|||||||
MonitorSize_t renderer_getMonitorSize() {
|
MonitorSize_t renderer_getMonitorSize() {
|
||||||
return monitorSize;
|
return monitorSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Scene_t * renderer_getScene(void){
|
||||||
|
return scene;
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,5 +19,6 @@ typedef struct MonitorSize {
|
|||||||
void renderer_main(void(*game_setup)(void), void(*game_loop)(void));
|
void renderer_main(void(*game_setup)(void), void(*game_loop)(void));
|
||||||
MonitorSize_t renderer_getMonitorSize(void);
|
MonitorSize_t renderer_getMonitorSize(void);
|
||||||
void renderer_setScene(Scene_t * newScene);
|
void renderer_setScene(Scene_t * newScene);
|
||||||
|
const Scene_t * renderer_getScene(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ void scene_render(Scene_t * scene) {
|
|||||||
int maxScanX = scene->x + CAMERA_WIDTH;
|
int maxScanX = scene->x + CAMERA_WIDTH;
|
||||||
int maxScanY = scene->y + CAMERA_HEIGHT;
|
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++) {
|
for(int i = 0; i < scene->objectCount; i++) {
|
||||||
SceneObject_t * object = &scene->objects[i];
|
SceneObject_t * object = &scene->objects[i];
|
||||||
@@ -25,8 +24,6 @@ void scene_render(Scene_t * scene) {
|
|||||||
float y = (object->y) / CAMERA_HEIGHT;
|
float y = (object->y) / CAMERA_HEIGHT;
|
||||||
//the object is to be rendered
|
//the object is to be rendered
|
||||||
|
|
||||||
printf("%f %f\n", x, y);
|
|
||||||
|
|
||||||
SDL_Rect rect = {
|
SDL_Rect rect = {
|
||||||
round(x * monitorSize.width) ,
|
round(x * monitorSize.width) ,
|
||||||
round(y * monitorSize.height),
|
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 scene_addRenderObject(Scene_t * scene, RenderObject_t object, int x, int y) {
|
||||||
RenderId_t itemId = scene->objectCount++;
|
RenderId_t itemId = scene->objectCount++;
|
||||||
printf("Adding: %s\n", object.name);
|
|
||||||
scene->objects = realloc(scene->objects, scene->objectCount * sizeof(SceneObject_t));
|
scene->objects = realloc(scene->objects, scene->objectCount * sizeof(SceneObject_t));
|
||||||
|
|
||||||
SceneObject_t item = {
|
SceneObject_t item = {
|
||||||
|
|||||||
Reference in New Issue
Block a user