Plus jammais on en reparle
This commit is contained in:
+22
-6
@@ -1,5 +1,6 @@
|
|||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include <SDL2/SDL_image.h>
|
#include <SDL2/SDL_image.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "renderer.h"
|
#include "renderer.h"
|
||||||
#include "scaller.h"
|
#include "scaller.h"
|
||||||
#include "scene.h"
|
#include "scene.h"
|
||||||
@@ -15,9 +16,10 @@ static bool increaseTextBrightness = false;
|
|||||||
static Uint8 textOpacity = 255;
|
static Uint8 textOpacity = 255;
|
||||||
|
|
||||||
|
|
||||||
Scene_t menuScene = { NULL, 0, 0, 0 };
|
Scene_t menuScene = { NULL, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
int menu_staticRender(void){
|
int menu_staticRender(void){
|
||||||
|
|
||||||
MonitorSize_t size = renderer_getMonitorSize();
|
MonitorSize_t size = renderer_getMonitorSize();
|
||||||
float aspectRatio = (float)size.width / size.height;
|
float aspectRatio = (float)size.width / size.height;
|
||||||
|
|
||||||
@@ -35,17 +37,31 @@ int menu_staticRender(void){
|
|||||||
backgroundImage.width = 1;
|
backgroundImage.width = 1;
|
||||||
backgroundImage.height = 1;
|
backgroundImage.height = 1;
|
||||||
menuObjects[menuObjectsSize] = scene_addRenderObject(&menuScene, backgroundImage, 0, 0);
|
menuObjects[menuObjectsSize] = scene_addRenderObject(&menuScene, backgroundImage, 0, 0);
|
||||||
renderer_setScene(&menuScene);
|
|
||||||
++menuObjectsSize;
|
++menuObjectsSize;
|
||||||
|
|
||||||
|
RenderObject_t legendOfAdam;
|
||||||
|
strcpy(legendOfAdam.name, "TheLegendOfA");
|
||||||
|
SDL_Color white = {255, 255, 255, 255};
|
||||||
|
text_renderText(&legendOfAdam, 9, 1.f, white, "./assets/fonts/Quinquefive.ttf", 48, "The legend of adame");
|
||||||
|
menuObjects[menuObjectsSize] = scene_addRenderObject(&menuScene, legendOfAdam, CAMERA_WIDTH * 0.095f, CAMERA_HEIGHT * 0.2f);
|
||||||
|
++menuObjectsSize;
|
||||||
|
|
||||||
|
RenderObject_t shadowOfAdam;
|
||||||
|
strcpy(legendOfAdam.name, "shadowOfAdam");
|
||||||
|
SDL_Color black = {0, 0, 0, 255};
|
||||||
|
text_renderText(&legendOfAdam, 8, 1.f, black, "./assets/fonts/Quinquefive.ttf", 48, "The legend of adame");
|
||||||
|
menuObjects[menuObjectsSize] = scene_addRenderObject(&menuScene, legendOfAdam, CAMERA_WIDTH * 0.085f, CAMERA_HEIGHT * 0.23f);
|
||||||
|
++menuObjectsSize;
|
||||||
|
|
||||||
|
renderer_setScene(&menuScene);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int menu_render(float delta){
|
int menu_render(float delta){
|
||||||
|
for(unsigned i = 3; i < menuObjectsSize; ++i){
|
||||||
for(unsigned i = 1; i < menuObjectsSize; ++i){
|
|
||||||
scene_removeRenderObject(&menuScene, menuObjects[i]);
|
scene_removeRenderObject(&menuScene, menuObjects[i]);
|
||||||
}
|
}
|
||||||
menuObjectsSize = 1;
|
menuObjectsSize = 3;
|
||||||
|
|
||||||
blinkDelta += delta;
|
blinkDelta += delta;
|
||||||
|
|
||||||
@@ -77,6 +93,6 @@ int menu_render(float delta){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void menu_remove(void){
|
void menu_remove(void){
|
||||||
scene_free(&menuScene);
|
//scene_free(&menuScene);
|
||||||
menuObjectsSize = 0;
|
menuObjectsSize = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -17,7 +17,7 @@ bool running;
|
|||||||
MonitorSize_t monitorSize;
|
MonitorSize_t monitorSize;
|
||||||
SDL_Window* win;
|
SDL_Window* win;
|
||||||
SDL_Renderer * renderer;
|
SDL_Renderer * renderer;
|
||||||
Scene_t * scene;
|
const Scene_t * scene;
|
||||||
int scenesCount = 0;
|
int scenesCount = 0;
|
||||||
|
|
||||||
//int (*compar)(const void [.size], const void [.size], void *)
|
//int (*compar)(const void [.size], const void [.size], void *)
|
||||||
@@ -26,7 +26,7 @@ void renderer_main(void(*game_setup)(void), void(*game_loop)(void)) {
|
|||||||
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
|
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
|
||||||
printf("error initializing SDL: %s\n", SDL_GetError());
|
printf("error initializing SDL: %s\n", SDL_GetError());
|
||||||
}
|
}
|
||||||
win = SDL_CreateWindow("GAME", // creates a window
|
win = SDL_CreateWindow("The legend of ADAM", // creates a window
|
||||||
SDL_WINDOWPOS_CENTERED,
|
SDL_WINDOWPOS_CENTERED,
|
||||||
SDL_WINDOWPOS_CENTERED,
|
SDL_WINDOWPOS_CENTERED,
|
||||||
1280, 720, 0);
|
1280, 720, 0);
|
||||||
@@ -82,7 +82,7 @@ void renderer_main(void(*game_setup)(void), void(*game_loop)(void)) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderer_setScene(Scene_t * newScene) {
|
void renderer_setScene(const Scene_t * newScene) {
|
||||||
scene = newScene;
|
scene = newScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -18,6 +18,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(const Scene_t * newScene);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+31
-19
@@ -4,29 +4,27 @@
|
|||||||
#include <SDL2/SDL_image.h>
|
#include <SDL2/SDL_image.h>
|
||||||
#include <SDL2/SDL_render.h>
|
#include <SDL2/SDL_render.h>
|
||||||
#include <SDL2/SDL_surface.h>
|
#include <SDL2/SDL_surface.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
static int compartSort(const SceneObject_t * a, const SceneObject_t * b) {
|
static int compartSort(const SceneObject_t * a, const SceneObject_t * b) {
|
||||||
return a->renderObj.z - b->renderObj.z;
|
return a->renderObj.z - b->renderObj.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void scene_render(Scene_t * scene) {
|
void scene_render(const Scene_t * scene) {
|
||||||
MonitorSize_t monitorSize = renderer_getMonitorSize();
|
MonitorSize_t monitorSize = renderer_getMonitorSize();
|
||||||
int minScanX = scene->x - CAMERA_WIDTH;
|
int minScanX = scene->x - CAMERA_WIDTH;
|
||||||
int minScanY = scene->y - CAMERA_HEIGHT;
|
int minScanY = scene->y - CAMERA_HEIGHT;
|
||||||
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];
|
const SceneObject_t * object = &scene->objects[i];
|
||||||
if(object->x > minScanX && object->x < maxScanX && object->y > minScanY && object->y < maxScanY) {
|
if(object->x > minScanX && object->x < maxScanX && object->y > minScanY && object->y < maxScanY) {
|
||||||
float x = (object->x) / CAMERA_WIDTH;
|
float x = (object->x) / CAMERA_WIDTH;
|
||||||
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),
|
||||||
@@ -54,9 +52,16 @@ 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++;
|
scene->objectCount++;
|
||||||
printf("Adding: %s\n", object.name);
|
RenderId_t itemId = scene->lastId++;
|
||||||
scene->objects = realloc(scene->objects, scene->objectCount * sizeof(SceneObject_t));
|
|
||||||
|
if(scene->objectCount * sizeof(SceneObject_t) > scene->objectArraySize) {
|
||||||
|
scene->objectArraySize = scene->objectCount * sizeof(SceneObject_t);
|
||||||
|
scene->objects = realloc(scene->objects, scene->objectArraySize);
|
||||||
|
if(scene->objects == NULL) {
|
||||||
|
printf("Realloc failed\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SceneObject_t item = {
|
SceneObject_t item = {
|
||||||
x, y,
|
x, y,
|
||||||
@@ -67,7 +72,8 @@ RenderId_t scene_addRenderObject(Scene_t * scene, RenderObject_t object, int x,
|
|||||||
|
|
||||||
buildCache(&item);
|
buildCache(&item);
|
||||||
|
|
||||||
scene->objects[itemId] = item;
|
scene->objects[scene->objectCount - 1] = item;
|
||||||
|
|
||||||
//the objects are sorted
|
//the objects are sorted
|
||||||
qsort(scene->objects, scene->objectCount, sizeof(SceneObject_t), (__compar_fn_t)compartSort);
|
qsort(scene->objects, scene->objectCount, sizeof(SceneObject_t), (__compar_fn_t)compartSort);
|
||||||
return itemId;
|
return itemId;
|
||||||
@@ -75,18 +81,23 @@ RenderId_t scene_addRenderObject(Scene_t * scene, RenderObject_t object, int x,
|
|||||||
|
|
||||||
void scene_removeRenderObject(Scene_t * scene, RenderId_t id) {
|
void scene_removeRenderObject(Scene_t * scene, RenderId_t id) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for(int i = 0; i < scene->objectCount - 1; i++) {
|
int index = 0;
|
||||||
if(scene->objects[i].id == id) {
|
for(int i = 0; i < scene->objectCount; i++) {
|
||||||
SDL_FreeSurface(scene->objects[i].renderObj.surface);
|
if(scene->objects[i].id == id){
|
||||||
if(scene->objects[i].cache != NULL) {
|
found = true;
|
||||||
SDL_DestroyTexture(scene->objects[i].cache);
|
index = i;
|
||||||
}
|
break;
|
||||||
}
|
|
||||||
if(found) {
|
|
||||||
scene->objects[i] = scene->objects[i + 1];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(!found){
|
||||||
|
printf("object %d not found\n", id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
scene->objectCount--;
|
scene->objectCount--;
|
||||||
|
|
||||||
|
for(int i = index; i < scene->objectCount; i++) {
|
||||||
|
scene->objects[i] = scene->objects[i + 1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void scene_free(Scene_t * scene) {
|
void scene_free(Scene_t * scene) {
|
||||||
@@ -97,6 +108,7 @@ void scene_free(Scene_t * scene) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(scene->objects);
|
free(scene->objects);
|
||||||
|
scene->objectArraySize = 0;
|
||||||
scene->objectCount = 0;
|
scene->objectCount = 0;
|
||||||
scene->objects = NULL;
|
scene->objects = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -26,10 +26,12 @@ typedef struct SceneObject {
|
|||||||
typedef struct Scene {
|
typedef struct Scene {
|
||||||
SceneObject_t * objects;
|
SceneObject_t * objects;
|
||||||
int objectCount;
|
int objectCount;
|
||||||
|
unsigned long objectArraySize;
|
||||||
|
int lastId;
|
||||||
int x,y;
|
int x,y;
|
||||||
} Scene_t;
|
} Scene_t;
|
||||||
|
|
||||||
void scene_render(Scene_t * scene);
|
void scene_render(const Scene_t * scene);
|
||||||
void scene_removeRenderObject(Scene_t * scene, RenderId_t id);
|
void scene_removeRenderObject(Scene_t * scene, RenderId_t id);
|
||||||
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);
|
||||||
void scene_free(Scene_t * scene);
|
void scene_free(Scene_t * scene);
|
||||||
|
|||||||
Reference in New Issue
Block a user