c-pong/src/render.c
2023-10-06 17:30:56 +02:00

70 lines
1.9 KiB
C

#include <SDL2/SDL.h>
#include <ball.h>
#include <game.h>
#include <player.h>
struct render_data
{
SDL_Renderer* renderer;
SDL_Window* window;
};
struct render_data* render_init(int width, int height)
{
// Initialize SDL2
struct render_data* data = malloc(sizeof(struct render_data));
memset(data, 0, sizeof(struct render_data));
printf("Start initializing SDL2\n");
if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
fprintf(stderr, "Could not initialize SDL2: '%s'\n", SDL_GetError());
data->window =
SDL_CreateWindow("Pong", 50, 50, width, height, SDL_WINDOW_SHOWN);
if (!data->window)
fprintf(stderr, "Could not create window: '%s'\n", SDL_GetError());
data->renderer =
SDL_CreateRenderer(data->window, -1, SDL_RENDERER_PRESENTVSYNC);
printf("Finished initializing SDL2\n");
return data;
}
static void player_render(struct player* player, struct render_data* data)
{
SDL_Rect rect;
rect.x = player->x_location;
rect.y = player->y_location;
rect.w = PLAYER_WIDTH;
rect.h = PLAYER_HEIGHT;
SDL_SetRenderDrawColor(data->renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderDrawRect(data->renderer, &rect);
}
static void ball_render(struct ball* ball, struct render_data* data)
{
SDL_Rect rect;
rect.x = ball->x_location;
rect.y = ball->y_location;
rect.w = ball->width;
rect.h = ball->width;
SDL_SetRenderDrawColor(data->renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderDrawRect(data->renderer, &rect);
}
void render(struct game_data* game)
{
// Clear the screen of the game
SDL_SetRenderDrawColor(game->render_data->renderer, 0, 0, 0, 0xFF);
SDL_RenderClear(game->render_data->renderer);
player_render(game->player1, game->render_data);
player_render(game->player2, game->render_data);
ball_render(game->ball, game->render_data);
// Show the newly rendered screen
SDL_RenderPresent(game->render_data->renderer);
}