Compare commits
3 Commits
2a0803d4c4
...
1d2a6da977
| Author | SHA1 | Date |
|---|---|---|
|
|
1d2a6da977 | |
|
|
45a7323213 | |
|
|
6ef77524ac |
35
src/camera.c
35
src/camera.c
|
|
@ -26,4 +26,39 @@ void camera_update(void)
|
|||
game.camera.view_rect.x = game.camera.tracking_pos->x + game.camera.tracking_center_offset.x - game.camera.view_rect.w / 2;
|
||||
game.camera.view_rect.y = game.camera.tracking_pos->y + game.camera.tracking_center_offset.y - game.camera.view_rect.h / 2;
|
||||
}
|
||||
|
||||
if(game.map)
|
||||
{
|
||||
if(game.camera.view_rect.w > game.map->width * TILE_SIZE)
|
||||
{
|
||||
game.camera.view_rect.x = game.map->width * TILE_SIZE / 2 - game.camera.view_rect.w / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(game.camera.view_rect.x < 0)
|
||||
{
|
||||
game.camera.view_rect.x = 0;
|
||||
}
|
||||
else if(game.camera.view_rect.x + game.camera.view_rect.w > game.map->width * TILE_SIZE)
|
||||
{
|
||||
game.camera.view_rect.x = game.map->width * TILE_SIZE - game.camera.view_rect.w;
|
||||
}
|
||||
}
|
||||
|
||||
if(game.camera.view_rect.h > game.map->height * TILE_SIZE)
|
||||
{
|
||||
game.camera.view_rect.y = game.map->height * TILE_SIZE / 2 - game.camera.view_rect.h / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(game.camera.view_rect.y < 0)
|
||||
{
|
||||
game.camera.view_rect.y = 0;
|
||||
}
|
||||
else if(game.camera.view_rect.y + game.camera.view_rect.h > game.map->height * TILE_SIZE)
|
||||
{
|
||||
game.camera.view_rect.y = game.map->height * TILE_SIZE - game.camera.view_rect.h;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,9 +7,6 @@
|
|||
#include "texture.h"
|
||||
#include "errors.h"
|
||||
|
||||
SDL_Window *window = NULL;
|
||||
SDL_Renderer *renderer = NULL;
|
||||
|
||||
inline int display_init(void)
|
||||
{
|
||||
if(!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS))
|
||||
|
|
@ -24,8 +21,8 @@ inline int display_init(void)
|
|||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
window = SDL_CreateWindow("2D_Engine", DISPLAY_WIDTH, DISPLAY_HEIGHT, 0);
|
||||
if(!window)
|
||||
game.display.window = SDL_CreateWindow("2D_Engine", DISPLAY_WIDTH, DISPLAY_HEIGHT, 0);
|
||||
if(!game.display.window)
|
||||
{
|
||||
error_printf("Failed to create window : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
|
|
@ -38,26 +35,26 @@ inline int display_init(void)
|
|||
|
||||
if(DRIVERS) warning_printf("This build of 2D_Engine_C only support the following drivers : %s", DRIVERS);
|
||||
|
||||
renderer = SDL_CreateRenderer(window, DRIVERS);
|
||||
if(!renderer)
|
||||
game.display.renderer = SDL_CreateRenderer(game.display.window, DRIVERS);
|
||||
if(!game.display.renderer)
|
||||
{
|
||||
error_printf("Failed to create renderer : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if(!SDL_SetRenderVSync(renderer, SDL_RENDERER_VSYNC_ADAPTIVE))
|
||||
if(!SDL_SetRenderVSync(game.display.renderer, SDL_RENDERER_VSYNC_ADAPTIVE))
|
||||
{
|
||||
error_printf("Failed to activate adaptative vsync : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if(!SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND))
|
||||
if(!SDL_SetRenderDrawBlendMode(game.display.renderer, SDL_BLENDMODE_BLEND))
|
||||
{
|
||||
error_printf("Failed to set renderer draw blend mode : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if(!SDL_SetDefaultTextureScaleMode(renderer, SDL_SCALEMODE_NEAREST))
|
||||
if(!SDL_SetDefaultTextureScaleMode(game.display.renderer, SDL_SCALEMODE_NEAREST))
|
||||
{
|
||||
error_printf("Failed to set default texture scale mode : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
|
|
@ -69,8 +66,8 @@ inline int display_init(void)
|
|||
|
||||
inline void display_exit(void)
|
||||
{
|
||||
if(renderer) SDL_DestroyRenderer(renderer);
|
||||
if(window) SDL_DestroyWindow(window);
|
||||
if(game.display.renderer) SDL_DestroyRenderer(game.display.renderer);
|
||||
if(game.display.window) SDL_DestroyWindow(game.display.window);
|
||||
SDL_Quit();
|
||||
|
||||
debug_printf("Exited display.");
|
||||
|
|
@ -78,13 +75,13 @@ inline void display_exit(void)
|
|||
|
||||
inline int display_clear(void)
|
||||
{
|
||||
if(!SDL_SetRenderDrawColor(renderer, C_WHITE, 255))
|
||||
if(!SDL_SetRenderDrawColor(game.display.renderer, C_WHITE, 255))
|
||||
{
|
||||
error_printf("Failed to change renderer draw color : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if(!SDL_RenderClear(renderer))
|
||||
if(!SDL_RenderClear(game.display.renderer))
|
||||
{
|
||||
error_printf("Failed to clear renderer : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
|
|
@ -95,7 +92,7 @@ inline int display_clear(void)
|
|||
|
||||
inline int display_update(void)
|
||||
{
|
||||
if(!SDL_RenderPresent(renderer))
|
||||
if(!SDL_RenderPresent(game.display.renderer))
|
||||
{
|
||||
error_printf("Failed to present renderer : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
|
|
@ -121,7 +118,7 @@ inline int display_update(void)
|
|||
error_printf("Sprintf failed : %d", errno);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if(!SDL_SetWindowTitle(window, title))
|
||||
if(!SDL_SetWindowTitle(game.display.window, title))
|
||||
{
|
||||
error_printf("Failed to set window title : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
|
|
@ -156,7 +153,7 @@ int display_draw_texture(texture_t *texture, const rect_t *src_rect, const rect_
|
|||
.h = dst_rect->h * (DISPLAY_HEIGHT / game.camera.view_rect.h)
|
||||
};
|
||||
|
||||
if(!SDL_RenderTextureRotated(renderer, texture, src_rect ? &src_frect : NULL, dst_rect ? &dst_frect : NULL, 0, NULL, flip))
|
||||
if(!SDL_RenderTextureRotated(game.display.renderer, texture, src_rect ? &src_frect : NULL, dst_rect ? &dst_frect : NULL, 0, NULL, flip))
|
||||
{
|
||||
error_printf("Failed to copy texture to renderer : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
|
|
@ -167,7 +164,7 @@ int display_draw_texture(texture_t *texture, const rect_t *src_rect, const rect_
|
|||
|
||||
int display_draw_frect(const frect_t *frect, unsigned int r, unsigned int g, unsigned int b, unsigned int a)
|
||||
{
|
||||
if(!SDL_SetRenderDrawColor(renderer, r, g, b, a))
|
||||
if(!SDL_SetRenderDrawColor(game.display.renderer, r, g, b, a))
|
||||
{
|
||||
error_printf("Failed to change renderer draw color : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
|
|
@ -180,7 +177,7 @@ int display_draw_frect(const frect_t *frect, unsigned int r, unsigned int g, uns
|
|||
.h = frect->h * (DISPLAY_HEIGHT / game.camera.view_rect.h)
|
||||
};
|
||||
|
||||
if(!SDL_RenderRect(renderer, &display_frect))
|
||||
if(!SDL_RenderRect(game.display.renderer, &display_frect))
|
||||
{
|
||||
error_printf("Failed to draw rectangle to renderer : %s", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
|
|
|
|||
|
|
@ -18,8 +18,10 @@
|
|||
//#define DRIVERS NULL
|
||||
#define DRIVERS "vulkan,gpu,software"
|
||||
|
||||
extern SDL_Window *window;
|
||||
extern SDL_Renderer *renderer;
|
||||
typedef struct display_t {
|
||||
SDL_Window *window;
|
||||
SDL_Renderer *renderer;
|
||||
} display_t;
|
||||
|
||||
int display_init(void);
|
||||
void display_exit(void);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define GAME_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "display.h"
|
||||
#include "asset_manager.h"
|
||||
#include "camera.h"
|
||||
#include "event_bus.h"
|
||||
|
|
@ -20,6 +21,7 @@
|
|||
* @param delta_time_ms Frame time
|
||||
*/
|
||||
typedef struct game_t {
|
||||
display_t display;
|
||||
camera_t camera;
|
||||
asset_manager_t asset_manager;
|
||||
event_bus_t event_bus;
|
||||
|
|
|
|||
|
|
@ -405,6 +405,8 @@ int map_remove_entities(map_t *map)
|
|||
|
||||
static inline int draw_tile(uint32_t tile_x, uint32_t tile_y, uint16_t tile_id)
|
||||
{
|
||||
if(!tile_id) return EXIT_SUCCESS;
|
||||
|
||||
rect_t src_frect = {
|
||||
.x = tile_id * TILE_SIZE % game.map->tileset->w,
|
||||
.y = tile_id * TILE_SIZE / game.map->tileset->w * TILE_SIZE,
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ texture_t *load_texture(void)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
texture_t *texture = SDL_CreateTextureFromSurface(renderer, tmp_surface);
|
||||
texture_t *texture = SDL_CreateTextureFromSurface(game.display.renderer, tmp_surface);
|
||||
if(!texture)
|
||||
{
|
||||
error_printf("Failed to create texture from temporary surface : %s", SDL_GetError());
|
||||
|
|
|
|||
Loading…
Reference in New Issue