6 #include "./platforms.h"
8 #define SCREEN_WIDTH 800
9 #define SCREEN_HEIGHT 600
11 #define LEVEL_FILE_NAME "./levels/platforms.txt"
13 int main(int argc, char *argv[])
15 (void) argc; /* unused */
16 (void) argv; /* unused */
20 if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
21 fprintf(stderr, "Could not initialize SDL: %s", SDL_GetError());
26 SDL_Window *const window = SDL_CreateWindow("Nothing",
28 SCREEN_WIDTH, SCREEN_HEIGHT,
32 fprintf(stderr, "Could not create SDL window: %s", SDL_GetError());
34 goto sdl_create_window_fail;
37 SDL_Renderer *const renderer = SDL_CreateRenderer(window, -1,
38 SDL_RENDERER_ACCELERATED |
39 SDL_RENDERER_PRESENTVSYNC);
40 if (renderer == NULL) {
41 fprintf(stderr, "Could not create SDL renderer: %s", SDL_GetError());
43 goto sdl_create_renderer_fail;
46 SDL_Joystick *the_stick_of_joy = NULL;
48 if (SDL_NumJoysticks() > 0) {
49 the_stick_of_joy = SDL_JoystickOpen(0);
51 if (the_stick_of_joy == NULL) {
52 fprintf(stderr, "Could not open 0th Stick of the Joy: %s\n", SDL_GetError());
54 goto sdl_joystick_open_fail;
57 printf("Opened Joystick 0\n");
58 printf("Name: %s\n", SDL_JoystickNameForIndex(0));
59 printf("Number of Axes: %d\n", SDL_JoystickNumAxes(the_stick_of_joy));
60 printf("Number of Buttons: %d\n", SDL_JoystickNumButtons(the_stick_of_joy));
61 printf("Number of Balls: %d\n", SDL_JoystickNumBalls(the_stick_of_joy));
63 SDL_JoystickEventState(SDL_ENABLE);
65 fprintf(stderr, "[WARNING] Could not find any Sticks of the Joy\n");
68 // ------------------------------
70 player_t *const player = create_player(100.0f, 0.0f);
72 perror("Could not create player");
74 goto create_player_fail;
77 platforms_t *platforms = load_platforms_from_file(LEVEL_FILE_NAME);
78 if (platforms == NULL) {
79 perror("Could not read platforms from " LEVEL_FILE_NAME);
81 goto create_platforms_fail;
84 camera_t *const camera = create_camera(vec(0.0f, 0.0f));
86 perror("Could not create camera");
88 goto create_camera_fail;
93 const Uint8 *const keyboard_state = SDL_GetKeyboardState(NULL);
94 const Uint32 delay_ms = (Uint32) roundf(1000.0f / GAME_FPS);
97 while (SDL_PollEvent(&e)) {
104 switch (e.key.keysym.sym) {
110 printf("Reloading the level from '%s'...", LEVEL_FILE_NAME);
112 destroy_platforms(platforms);
113 platforms = load_platforms_from_file(LEVEL_FILE_NAME);
115 if (platforms == NULL) {
117 goto reload_platforms_failed;
123 case SDL_JOYBUTTONDOWN:
124 if (e.jbutton.button == 1) {
132 if (keyboard_state[SDL_SCANCODE_A]) {
133 player_move_left(player);
134 } else if (keyboard_state[SDL_SCANCODE_D]) {
135 player_move_right(player);
136 } else if (the_stick_of_joy && SDL_JoystickGetAxis(the_stick_of_joy, 0) < 0) {
137 player_move_left(player);
138 } else if (the_stick_of_joy && SDL_JoystickGetAxis(the_stick_of_joy, 0) > 0) {
139 player_move_right(player);
144 update_player(player, platforms, delay_ms);
145 player_focus_camera(player, camera);
147 SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
148 SDL_RenderClear(renderer);
149 render_player(player, renderer, camera);
150 render_platforms(platforms, renderer, camera);
151 SDL_RenderPresent(renderer);
155 reload_platforms_failed:
156 destroy_camera(camera);
158 if (platforms) { destroy_platforms(platforms); }
159 create_platforms_fail:
160 destroy_player(player);
162 if (the_stick_of_joy) { SDL_JoystickClose(the_stick_of_joy); }
163 sdl_joystick_open_fail:
164 SDL_DestroyRenderer(renderer);
165 sdl_create_renderer_fail:
166 SDL_DestroyWindow(window);
167 sdl_create_window_fail: