This commit is contained in:
Marc
2023-01-21 12:55:27 +01:00
parent 7af164dd20
commit 781f4ba7be
8 changed files with 64 additions and 38 deletions
+1
View File
@@ -25,6 +25,7 @@ set(SRC
src/text.c
src/menu.c
src/input.c
src/scaller.c
)
# add the executable
+7 -4
View File
@@ -8,7 +8,7 @@
#include <SDL2/SDL_surface.h>
#include <time.h>
#include <unistd.h>
#include "scaller.h"
long timecode;
long iter;
@@ -29,10 +29,11 @@ static void game_main(void) {
//main game code
if(iter == 0) {
menu_render();
RenderObject_t text;
SDL_Color white = {255, 255, 255, 255};
TTF_Init();
if(text_renderText(&text, 0.f, 0.f, 1000, 1, white, "./assets/fonts/arial.ttf", 25, "Hello World") < 0){
if(text_renderText(&text, 0.1f, 0.1f, 1000, 1, white, "./assets/fonts/arial.ttf", 25, "Hello World") < 0){
printf("error");
exit(1);
}
@@ -40,14 +41,16 @@ static void game_main(void) {
SDL_Surface* img = IMG_Load("./assets/img/pp.png");
RenderObject_t duck = {
0.2,
0.2,
0.5,
0.5,
0,
0.50,
0.50,
0,
img
};
scaller(duck.surface, 1, &duck.width, &duck.height);
placer(duck.surface, 1, &duck.x, &duck.y);
renderer_renderObject(text);
renderer_renderObject(duck);
+14 -19
View File
@@ -1,34 +1,30 @@
#include "menu.h"
#include <SDL2/SDL_image.h>
#include "renderer.h"
#include "scaller.h"
static RenderId_t menuObjects[10];
static unsigned menuObjectsSize = 0;
int menu_render(int windowWidth, int windowHeight){
int menu_render(void){
SDL_Surface* buttonImageSurface = IMG_Load("./assets/img/start.png");
if(buttonImageSurface == NULL){
printf("cannot load");
return -1;
}
RenderObject_t buttonImage;
float buttonScale = 0.3f;
// float buttonX = ((float)windowWidth - (float)buttonImageSurface->w) / (2.f * (float)buttonImageSurface->w);
// float buttonY = ((float)windowHeight - (float)buttonImageSurface->h) / (2.f * (float)buttonImageSurface->h);
float buttonX = 0.5f - buttonScale * (float)buttonImageSurface->w / (2.f * (float)windowWidth);
float buttonY = 0.5f - buttonScale * (float)buttonImageSurface->h / (2.f * (float)windowHeight);
printf("buttonImageSurface->w: %d\n", buttonImageSurface->w);
printf("buttonImageSurface->h: %d\n", buttonImageSurface->h);
printf("windowWidth: %d\n", windowWidth);
printf("buttonX: %f\n", buttonX);
RenderObject_t buttonImage = {
buttonX,
buttonY,
0,
buttonScale,
buttonScale,
0,
buttonImageSurface
};
MonitorSize_t size = renderer_getMonitorSize();
float aspectRatio = (float)size.width / size.height;
buttonImage.x = 0.5f;
buttonImage.y = 0.5f;
scaller(buttonImageSurface, buttonScale, &buttonImage.width, &buttonImage.height);
placer(buttonImageSurface, buttonScale, &buttonImage.x, &buttonImage.y);
buttonImage.surface = buttonImageSurface;
menuObjects[menuObjectsSize] = renderer_renderObject(buttonImage);
++menuObjectsSize;
return 0;
@@ -40,4 +36,3 @@ void menu_remove(void){
}
menuObjectsSize = 0;
}
+1 -1
View File
@@ -3,7 +3,7 @@
#include "renderer.h"
int menu_render(int windowWidth, int windowHeight);
int menu_render(void);
void menu_remove(void);
+13 -12
View File
@@ -46,7 +46,7 @@ void renderer_main(void(*game_main)(void)) {
win = SDL_CreateWindow("GAME", // creates a window
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
500, 500, 0);
1280, 720, 0);
Uint32 render_flags = SDL_RENDERER_ACCELERATED;
@@ -95,17 +95,6 @@ void renderer_main(void(*game_main)(void)) {
for(int i = 0; i < objectCount; i++) {
RenderItem_t * object = &objects[i];
if(object->cache == NULL) {
SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, object->object.surface);
if(texture == NULL) {
fprintf(stderr, "Error while creating texture %s is_null: %d\n", SDL_GetError(), object->object.surface == NULL);
exit(1);
}
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
object->cache = texture;
printf("Built cache\n");
}
int error = SDL_RenderCopyEx(renderer, object->cache, NULL, &object->rect, object->object.angle_degre, NULL, SDL_FLIP_NONE);
if(error != 0) {
fprintf(stderr, "Render error in object %d with error %s\n", object->id, SDL_GetError());
@@ -117,6 +106,16 @@ void renderer_main(void(*game_main)(void)) {
}
}
static void buildCache(RenderItem_t * object) {
SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, object->object.surface);
if(texture == NULL) {
fprintf(stderr, "Error while creating texture %s is_null: %d\n", SDL_GetError(), object->object.surface == NULL);
exit(1);
}
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
object->cache = texture;
}
RenderId_t renderer_renderObject(RenderObject_t object) {
RenderId_t itemId = objectCount++;
@@ -134,6 +133,8 @@ RenderId_t renderer_renderObject(RenderObject_t object) {
itemId
};
buildCache(&item);
objects[itemId] = item;
//the objects are sorted
qsort(objects, objectCount, sizeof(RenderItem_t), (__compar_fn_t)compartSort);
+15
View File
@@ -0,0 +1,15 @@
#include "renderer.h"
#include <SDL2/SDL_surface.h>
#include "scaller.h"
void scaller(SDL_Surface * surface, float scale, float * width, float * height) {
MonitorSize_t size = renderer_getMonitorSize();
*width = (float)surface->w / size.width * scale;
*height = (float)surface->h / size.height * scale;
}
void placer(SDL_Surface * surface, float scale, float * x, float * y) {
MonitorSize_t size = renderer_getMonitorSize();
*x = *x - scale * surface->w / (2.f * (float)size.width);
*y = *y - scale * surface->h / (2.f * (float)size.height);
}
+9
View File
@@ -0,0 +1,9 @@
#ifndef __SCALLER_H__
#define __SCALLER_H__
#include <SDL2/SDL_surface.h>
void scaller(SDL_Surface * surface, float scale, float * width, float * height);
void placer(SDL_Surface * surface, float scale, float * x, float * y);
#endif
+4 -2
View File
@@ -1,6 +1,7 @@
#include <SDL2/SDL_error.h>
#include <unistd.h>
#include "renderer.h"
#include "scaller.h"
#include "text.h"
#include <SDL2/SDL_log.h>
@@ -72,10 +73,11 @@ int text_renderText(RenderObject_t* renderObject, float x, float y, int z, float
renderObject->x = x;
renderObject->y = y;
renderObject->z = z;
renderObject->width = w * scale / 500;
renderObject->height = h * scale / 500;
renderObject->angle_degre = 0;
renderObject->surface = surface;
scaller(surface, scale, &renderObject->width, &renderObject->height);
placer(renderObject->surface, scale, &renderObject->x, &renderObject->y);
return 0;
}