]> git.lizzy.rs Git - nothing.git/blob - src/game.c
d56d99176e106b1ed77627ffa566d9d1b3c4922a
[nothing.git] / src / game.c
1 #include <stdio.h>
2 #include <assert.h>
3 #include <SDL2/SDL.h>
4
5 #include "./player.h"
6 #include "./platforms.h"
7 #include "./camera.h"
8 #include "./game.h"
9 #include "./error.h"
10
11 typedef struct game_t {
12     player_t *player;
13     platforms_t *platforms;
14     camera_t *camera;
15 } game_t;
16
17 game_t *create_game(const char *platforms_file_path)
18 {
19     assert(platforms_file_path);
20
21     game_t *game = malloc(sizeof(game_t));
22     if (game == NULL) {
23         throw_error(ERROR_TYPE_LIBC);
24         goto malloc_game_failed;
25     }
26
27     if ((game->player = create_player(100.0f, 0.0f)) == NULL) {
28         goto create_player_failed;
29     }
30
31     if ((game->platforms = load_platforms_from_file(platforms_file_path)) == NULL) {
32         goto create_platforms_failed;
33     }
34
35     if ((game->camera = create_camera(vec(0.0f, 0.0f))) == NULL) {
36         goto create_camera_failed;
37     }
38
39     return game;
40
41 create_camera_failed:
42     free(game->platforms);
43 create_platforms_failed:
44     free(game->player);
45 create_player_failed:
46     free(game);
47 malloc_game_failed:
48     return NULL;
49 }
50
51 void destroy_game(game_t *game)
52 {
53     assert(game);
54
55     free(game->camera);
56     free(game->platforms);
57     free(game->player);
58     free(game);
59 }
60
61 int game_render(const game_t *game, SDL_Renderer *renderer)
62 {
63     assert(game);
64     assert(renderer);
65
66     if (SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255) < 0) {
67         throw_error(ERROR_TYPE_SDL2);
68         return -1;
69     }
70
71     if (SDL_RenderClear(renderer) < 0) {
72         throw_error(ERROR_TYPE_SDL2);
73         return -1;
74     }
75
76     if (render_player(game->player, renderer, game->camera) < 0) {
77         return -1;
78     }
79
80     if (render_platforms(game->platforms, renderer, game->camera) < 0) {
81         return -1;
82     }
83
84     SDL_RenderPresent(renderer);
85
86     return 0;
87 }
88
89 int game_update(game_t *game, Uint32 delta_time)
90 {
91     assert(game);
92     assert(delta_time > 0);
93
94     return 0;
95 }
96
97 int game_event(game_t *game, const SDL_Event *event)
98 {
99     assert(game);
100     assert(event);
101
102     return 0;
103 }
104
105 int game_input(game_t *game,
106                const Uint8 *const keyboard_state,
107                SDL_Joystick *the_stick_of_joy)
108 {
109     assert(game);
110     assert(keyboard_state);
111     assert(the_stick_of_joy);
112
113     return 0;
114 }