diff --git a/bin/assets/images/upload.png b/bin/assets/images/upload.png new file mode 100644 index 0000000..a54d318 Binary files /dev/null and b/bin/assets/images/upload.png differ diff --git a/breakout.c b/breakout.c index 6344b35..3ca5f2d 100644 --- a/breakout.c +++ b/breakout.c @@ -151,7 +151,6 @@ void BREAKOUT_Update(Scenery * scenery, const Uint8 * keystate){ PADDLE_ResetPosition(&(scenery->paddle)); scenery->StartCountdown = 240; scenery->IsGameOver = false; - scenery->Frames = 0; if (--(scenery->Lives) <= 0) GAME_ChangeState(GameOver); else diff --git a/gameover.c b/gameover.c index 8ece8c7..161848c 100644 --- a/gameover.c +++ b/gameover.c @@ -9,47 +9,47 @@ #include "gameover.h" #include "gamestate.h" +#include "breakout.h" +#include "vector.h" +#include "background.h" #include "main.h" #define GAMEOVER_TexturePath "assets/images/gameover.png" #define GAMEOVER_NumbersTexturePath "assets/images/numbers.png" #define GAMEOVER_ScoreTexturePath "assets/images/yourscore.png" +#define GAMEOVER_UploadTexturePath "assets/images/upload.png" #define GAMEOVER_HUDScale 16.0f #define GAMEOVER_Scale 4.0f -#include -#include -#include -#include -#include -#include -#include -#include - -#include "breakout.h" -#include "vector.h" -#include "background.h" +extern int width, height; int GAMEOVER_HUDMargin = 5; SDL_Texture * GAMEOVER_Texture; SDL_Texture * GAMEOVER_Numbers; SDL_Texture * GAMEOVER_ScoreTexture; +SDL_Texture * GAMEOVER_UploadTexture; SDL_Rect * GAMEOVER_NumberRects; +SDL_Rect * GAMEOVER_UploadRects; SDL_Rect GAMEOVER_TargetRect; SDL_Rect GAMEOVER_ScoreTargetRect; SDL_Rect GAMEOVER_HUDScoreTargetRect; +SDL_Rect GAMEOVER_UploadTargetRect; int * GAMEOVER_Digits; bool GAMEOVER_IsInit = false; +UploadState GAMEOVER_UploadState = Initial; void GAMEOVER_Initialize(SDL_Renderer * renderer){ if (!GAMEOVER_IsInit) { printf("Initializing Gameover...\n"); + GAMEOVER_UploadState = Initial; GAMEOVER_Texture = IMG_LoadTexture(renderer, GAMEOVER_TexturePath); if (!GAMEOVER_Texture) printf("Gameover Texture couldn't be loaded!\n"); GAMEOVER_Numbers = IMG_LoadTexture(renderer, GAMEOVER_NumbersTexturePath); if (!GAMEOVER_Numbers) printf("Gameover Numbers couldn't be loaded!\n"); GAMEOVER_ScoreTexture = IMG_LoadTexture(renderer, GAMEOVER_ScoreTexturePath); if (!GAMEOVER_ScoreTexture) printf("Gameover Score Texture couldn't be loaded!\n"); + GAMEOVER_UploadTexture = IMG_LoadTexture(renderer, GAMEOVER_UploadTexturePath); + if (!GAMEOVER_UploadTexture) printf("Gameover Score Texture couldn't be loaded!\n"); int w, h; SDL_QueryTexture(GAMEOVER_Texture, NULL, NULL, &w, &h); w /= 2; @@ -73,6 +73,12 @@ void GAMEOVER_Initialize(SDL_Renderer * renderer){ GAMEOVER_ScoreTargetRect.y = 450; GAMEOVER_ScoreTargetRect.h = 183; GAMEOVER_ScoreTargetRect.w = 1000; + GAMEOVER_UploadTargetRect = (SDL_Rect) {.x = 0, .y = 600, .w = 1000, .h = 200 }; + GAMEOVER_UploadRects = calloc(3, sizeof(SDL_Rect)); + if (!GAMEOVER_UploadRects) printf("FATAL: Memory Allocation Failed!\n"); + GAMEOVER_UploadRects[0] = (SDL_Rect) {.x = 1, .y = 735, .w = 3981, .h = 734 }; + GAMEOVER_UploadRects[1] = (SDL_Rect) {.x = 1, .y = 1, .w = 4634, .h = 732 }; + GAMEOVER_UploadRects[2] = (SDL_Rect) {.x = 1, .y = 1471, .w = 3024, .h = 666 }; GAMEOVER_HUDScoreTargetRect = (SDL_Rect) {.x = GAMEOVER_HUDMargin, .y = GAMEOVER_HUDMargin, .w = 250, .h = 46 }; GAMEOVER_Digits = malloc(25 * sizeof(int)); printf("Gameover initialized!\n"); @@ -100,10 +106,18 @@ void GAMEOVER_Draw(SDL_Renderer * renderer, Scenery * scenery){ target.h = (int)roundf((float)(GAMEOVER_NumberRects[GAMEOVER_Digits[i]].h) / GAMEOVER_Scale); target.w = (int)roundf((float)(GAMEOVER_NumberRects[GAMEOVER_Digits[i]].w) / GAMEOVER_Scale); SDL_RenderCopy(renderer, GAMEOVER_Numbers, (GAMEOVER_NumberRects + GAMEOVER_Digits[i]), &target); - xOffset += target.w; + xOffset += target.w - 1; } + GAMEOVER_DrawHorizontalCenter(renderer, GAMEOVER_UploadTexture, (GAMEOVER_UploadRects + GAMEOVER_UploadState), &GAMEOVER_UploadTargetRect); } /* GAMEOVER_Draw */ +void GAMEOVER_DrawHorizontalCenter(SDL_Renderer * renderer, SDL_Texture * texture, SDL_Rect * srcRect, SDL_Rect * dstRect){ + SDL_Rect target = *dstRect; + + target.x = ((width - target.x) / 2); + SDL_RenderCopy(renderer, texture, srcRect, &target); +} + void GAMEOVER_GetDigits(int input, int * digitCount){ int score = input; int count = 0; @@ -137,7 +151,7 @@ void SCORE_DrawHUD(SDL_Renderer * renderer, Scenery * scenery){ target.h = (int)roundf((float)(GAMEOVER_NumberRects[GAMEOVER_Digits[i]].h) / GAMEOVER_HUDScale); target.w = (int)roundf((float)(GAMEOVER_NumberRects[GAMEOVER_Digits[i]].w) / GAMEOVER_HUDScale); SDL_RenderCopy(renderer, GAMEOVER_Numbers, (GAMEOVER_NumberRects + GAMEOVER_Digits[i]), &target); - xOffset += target.w; + xOffset += target.w - 1; } } /* SCORE_DrawHUD */ @@ -145,9 +159,12 @@ void GAMEOVER_Deinitialize(){ if (GAMEOVER_IsInit) { printf("De-initializing Gameover...\n"); free(GAMEOVER_Digits); + free(GAMEOVER_NumberRects); + free(GAMEOVER_UploadRects); SDL_DestroyTexture(GAMEOVER_Texture); SDL_DestroyTexture(GAMEOVER_ScoreTexture); SDL_DestroyTexture(GAMEOVER_Numbers); + SDL_DestroyTexture(GAMEOVER_UploadTexture); printf("Gameover de-initialized!\n"); GAMEOVER_IsInit = false; } else diff --git a/gameover.h b/gameover.h index 9180055..69c27f0 100644 --- a/gameover.h +++ b/gameover.h @@ -14,9 +14,14 @@ #include "gamestate.h" #include "main.h" +// Enums +typedef enum uploadStateEnum { Initial = 0, Uploading = 1, Finished = 2 } UploadState; +// Enums + // Prototypes void GAMEOVER_Initialize(SDL_Renderer * renderer); void GAMEOVER_Draw(SDL_Renderer * renderer, Scenery * scenery); +void GAMEOVER_DrawHorizontalCenter(SDL_Renderer * renderer, SDL_Texture * texture, SDL_Rect * srcRect, SDL_Rect * dstRect); void GAMEOVER_GetDigits(int input, int * digitCount); void SCORE_DrawHUD(SDL_Renderer * renderer, Scenery * scenery); void GAMEOVER_Deinitialize();