about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorCharadon <dev@iotib.net>2022-06-12 17:18:40 -0400
committerCharadon <dev@iotib.net>2022-06-12 17:18:40 -0400
commit2fef65fbe758daffab758960719dbb088d264651 (patch)
treeda1af3ed88bed4059ee9147e97172335d995c49b /src
parentbe121c63b03cf4b36793351ae0d733866512bd4c (diff)
downloadPong-C-2fef65fbe758daffab758960719dbb088d264651.tar.gz
Fixed odd memory corruption bug, and more work on All Scores Screen
Diffstat (limited to 'src')
-rw-r--r--src/title.c69
1 files changed, 41 insertions, 28 deletions
diff --git a/src/title.c b/src/title.c
index 01cc508..25e0112 100644
--- a/src/title.c
+++ b/src/title.c
@@ -6,18 +6,7 @@ struct LeaderboardEntries {
     char Name[16];
 };
 
-struct LeaderboardEntries Top10[10] = {
-    0, " ",
-    0, " ",
-    0, " ",
-    0, " ",
-    0, " ",
-    0, " ",
-    0, " ",
-    0, " ",
-    0, " ",
-    0, " "
-};
+struct LeaderboardEntries Top10[10];
 
 static int compare_int(const void *Score1, const void *Score2) {
     const struct LeaderboardEntries *Entry1 = *(struct LeaderboardEntries**) Score1;
@@ -37,7 +26,7 @@ static void order_leaderboard() {
     if((LeaderboardFile = fopen(LeaderboardFilePath, "r")) == NULL) {
         return; //If it doesn't exist yet, we don't need to care.
     }
-    
+
     // Init a temporary pointer to store scores and names into. This will be organized into Top10.
     struct LeaderboardEntries *TmpStore[UINT16_MAX*2];
     for (int size = 0; size < (UINT16_MAX*2); size++) //If there's 131,000 entries, I dunno what to tell you. You really like pong...
@@ -52,15 +41,15 @@ static void order_leaderboard() {
         fscanf(LeaderboardFile, "%s %d\n", TmpStore[a]->Name, &TmpStore[a]->Score);
     }
     qsort(TmpStore, size, sizeof(struct LeaderboardEntries *), compare_int);
+
     for(int i = 0; i < size; i++) { //Copy first 10 elements into top10
-        strcpy(Top10[i].Name, TmpStore[i]->Name);
-        Top10[i].Score = TmpStore[i]->Score;
+	strcpy(Top10[i].Name, TmpStore[i]->Name);
+	Top10[i].Score = TmpStore[i]->Score;
     }
 
     // Cleanup
     // Free TmpStore
-    for(int i = 0; i < (UINT16_MAX*2); i++)
-    	free(TmpStore[i]); //Truth be told, I dunno if this even works, since the amount of memory used is kilobytes...
+    free(*TmpStore); //Truth be told, I dunno if this even works, since the amount of memory used is kilobytes...
     // Close leaderboard file.
     if (LeaderboardFile != NULL) {
 	    fclose(LeaderboardFile);
@@ -77,7 +66,6 @@ static void score_screen(Camera2D *MainCamera) {
     if((LeaderboardFile = fopen(LeaderboardFilePath, "r")) == NULL) {
         return; //If it doesn't exist yet, we don't need to care.
     }
-    
     // Init a temporary pointer to store scores and names into. This will be organized into Top10.
     struct LeaderboardEntries *Scores[UINT16_MAX*2];
     for (int size = 0; size < (UINT16_MAX*2); size++) //If there's 131,000 entries, I dunno what to tell you. You really like pong...
@@ -92,12 +80,14 @@ static void score_screen(Camera2D *MainCamera) {
     // Load Scores and Names
     int size = 0;
     for (int a = 0; !feof(LeaderboardFile); a++, size++) { //Load data from file into array.
-        fscanf(LeaderboardFile, "%s %d\n", Scores[a]->Name, &Scores[a]->Score);
+        fscanf(LeaderboardFile, "%s %d", Scores[a]->Name, &Scores[a]->Score);
+	if(feof(LeaderboardFile)) {
+		break;
+	}
     }
     qsort(Scores, size, sizeof(struct LeaderboardEntries *), compare_int);
 
     //Begin drawing scores.
-
     //Mouse
     bool LookingAtScores = true;
     bool MouseCursorIn = true;
@@ -106,13 +96,17 @@ static void score_screen(Camera2D *MainCamera) {
     Rectangle MouseCursor = {0,0,1,1};
     Texture2D MouseCursorSprite = LoadTexture("resources/cursor.png");
 
+    //Page Buttons Rectangles
+    Rectangle PrevPage = {5, 720-50, 70, 45};
+    Rectangle NextPage = {1280-70, 720-50, 70, 45};
+
     int Page = 0;
     bool EndOfPages = false;
     while(LookingAtScores == true && GameGoing == true) {
         // Update Camera
         MainCamera->zoom = GetScreenHeight()/720.0f;
-	    MainCamera->offset = (Vector2){GetScreenWidth()/2.0f, GetScreenHeight()/2.0f};
-	    MainCamera->target = (Vector2){1280/2.0f, 720/2.0f};
+	MainCamera->offset = (Vector2){GetScreenWidth()/2.0f, GetScreenHeight()/2.0f};
+	MainCamera->target = (Vector2){1280/2.0f, 720/2.0f};
 
         //Mouse
         if (MouseCursorIn == true) {
@@ -127,7 +121,6 @@ static void score_screen(Camera2D *MainCamera) {
                 MouseCursor.x += OldPosition.x-NewPosition.x;
             }
         }
-
         if (IsKeyPressed(KEY_ESCAPE)) {
             EnableCursor();
             MouseCursorIn = false;
@@ -135,20 +128,40 @@ static void score_screen(Camera2D *MainCamera) {
             DisableCursor();
             MouseCursorIn = true;
         }
+
         EndOfPages = false;
         BeginDrawing();
             ClearBackground(BLACK);
             BeginMode2D(*MainCamera);
                 DrawRectangle(0, 0, 1280, 720, (Color){20, 20, 20, 255});
-                DrawText("<--", 5, 720-50, 48, WHITE);
-                DrawText("-->", 1280-70, 720-50, 48, WHITE);
-                for (int i = 1; i <= 10; i++) {
+		// Scores
+		int a = 0;
+                for (int i = 1+(10*Page); i <= 10+(10*Page); i++, a++) {
                     if(Scores[i-1]->Name[0] != ' ') {
-                        DrawText(TextFormat("%d. %s: %d", i, Scores[i-1]->Name, Scores[i-1]->Score), 500, 50*i, 48, WHITE);
+                        DrawText(TextFormat("%d. %s: %d", i, Scores[i-1]->Name, Scores[i-1]->Score), 460, 60+(50*a), 48, WHITE);
                     } else {
                         EndOfPages = true;
                     }
                 }
+		// Page Buttons
+		if(CheckCollisionRecs(MouseCursor, PrevPage)) {
+			DrawRectangleRec(PrevPage, RED);
+			if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
+				if(Page > 0) {
+					Page--;
+				}
+			}
+		} else if(CheckCollisionRecs(MouseCursor, NextPage) && EndOfPages == false) {
+			DrawRectangleRec(NextPage, RED);
+			if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
+				if(EndOfPages == false) {
+					Page++;
+				}
+			}
+		}
+                DrawText("<--", 5, 720-50, 48, WHITE);
+                DrawText("-->", 1280-70, 720-50, 48, WHITE);
+		// Cursor
                 DrawTexture(MouseCursorSprite, MouseCursor.x, MouseCursor.y, WHITE);
             EndMode2D();
         EndDrawing();
@@ -297,7 +310,7 @@ static void settings(Camera2D *MainCamera, Mix_Music *TitleScreenMusic) {
             DrawText("Windowed", 100, 242, 42, WHITE);
             DrawText("Fullscreen", 100, 284, 42, WHITE);
             DrawText("Borderless", 100, 326, 42, WHITE);
-	        DrawTexture(MouseCursorSprite, MouseCursor.x, MouseCursor.y, WHITE);
+	    DrawTexture(MouseCursorSprite, MouseCursor.x, MouseCursor.y, WHITE);
         EndMode2D();
         EndDrawing();
     }