#include #include #include #include #include #include #include #include #include "breakout.h" #include "vector.h" #ifndef __nullptr__ #define Nullptr(type) (type *)0 #endif // __nullptr__ int BREAKOUT_BoxWidth, BREAKOUT_BoxHeight; SDL_Texture * BALL_Texture; SDL_Rect * BALL_SourceRects; Ball ball; void BREAKOUT_INITIALIZE(SDL_Renderer * renderer, int width, int height){ printf("Initializing Game...\n"); srand(time(NULL)); BREAKOUT_BoxWidth = width; BREAKOUT_BoxHeight = height; BALL_Initialize(renderer); printf("Game initialized!\n"); } void BREAKOUT_Update(Uint8 * keystate){ BALL_Update(&ball); } void BREAKOUT_Draw(SDL_Renderer * renderer){ BALL_Draw(renderer, &ball); } void BREAKOUT_DEINITIALIZE(){ printf("De-initializing Game...\n"); SDL_DestroyTexture(BALL_Texture); printf("Game de-initialized!\n"); } void BALL_Initialize(SDL_Renderer * renderer){ printf("Initializing Ball...\n"); BALL_Texture = IMG_LoadTexture(renderer, "assets/images/ball.png"); if (!BALL_Texture) printf("Ball texture failed to load!\n"); BALL_SourceRects = (SDL_Rect *)malloc(1 * sizeof(SDL_Rect)); BALL_SourceRects[0] = (SDL_Rect) {.x = 0, .y = 0, .w = 512, .h = 512 }; ball = BALL_CreateDefault(); printf("Ball initialized!\n"); } Ball BALL_CreateDefault(){ double rotation = (double)(rand() % 360); return (Ball) { .Location = (Vector) {.x = BREAKOUT_BoxWidth / 2, .y = BREAKOUT_BoxHeight / 2 }, .Momentum = (Vector) {.x = 0.0f, .y = 6.0f }, .TargetRect = (SDL_Rect) {.x = BREAKOUT_BoxWidth / 2, .y = BREAKOUT_BoxHeight / 2, .w = 50, .h = 50 }, .Size = 50.0f, .Rotation = rotation, .RotationValue = 2, .TextureIndex = 0 }; // Objekt für die Eigenschaften des Balls } void BALL_Draw(SDL_Renderer * renderer, Ball * obj){ printf("Ball drawn at (%d|%d)!\n", (obj->TargetRect).x, (obj->TargetRect).x); SDL_RenderCopyEx(renderer, BALL_Texture, BALL_SourceRects + (obj->TextureIndex), &(obj->TargetRect), obj->Rotation, NULL, SDL_FLIP_NONE); } void BALL_Update(Ball * obj){ obj->Location = vectorAdd(obj->Location, obj->Momentum); (obj->TargetRect).x = (int)round((obj->Location).x); (obj->TargetRect).y = (int)round((obj->Location).y); obj->Rotation += obj->RotationValue; if ((obj->Location).y > BREAKOUT_BoxHeight) obj->Location = (Vector) {.x = BREAKOUT_BoxWidth / 2, .y = BREAKOUT_BoxHeight / 2 }; } void BALL_DestroyObject(Ball * obj){ } void BALL_Deinitialize(){ printf("De-initializing Ball...\n"); printf("Ball de-initialized!\n"); }