From 0a558c269217ea1eff20805e8fab8ce3ef0a2910 Mon Sep 17 00:00:00 2001
From: whiteshark0 <whiteshark0@b956fd51-792f-4845-bead-9b4dfca2ff2c>
Date: Mon, 28 May 2007 19:29:24 +0000
Subject: Fixed a bug in Coverloading, that could end up in an endless loop.

git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@233 b956fd51-792f-4845-bead-9b4dfca2ff2c
---
 Game/Code/Screens/UScreenSong.pas | 106 +++++++++++++++++++-------------------
 1 file changed, 54 insertions(+), 52 deletions(-)

(limited to 'Game')

diff --git a/Game/Code/Screens/UScreenSong.pas b/Game/Code/Screens/UScreenSong.pas
index db5eb2b2..45c7c2de 100644
--- a/Game/Code/Screens/UScreenSong.pas
+++ b/Game/Code/Screens/UScreenSong.pas
@@ -718,72 +718,74 @@ begin
 //  Songs.LoadSongList; // moved to the UltraStar unit
   CatSongs.Refresh;
 
-  //Set Length of Button Array one Time Instead of one time for every Song
-  SetButtonLength(Length(CatSongs.Song));
+  if (length(CatSongs.Song) > 0) then
+  begin
+    //Set Length of Button Array one Time Instead of one time for every Song
+    SetButtonLength(Length(CatSongs.Song));
 
-  I := 0;
-  CreateSongButtons:
+    I := 0;
+    CreateSongButtons:
 
-  try
-    for Pet := I to High(CatSongs.Song) do begin // creating all buttons
-      // new
-      Texture.Limit := 512;// 256 0.4.2 value, 512 in 0.5.0
+    try
+      for Pet := I to High(CatSongs.Song) do begin // creating all buttons
+        // new
+        Texture.Limit := 512;// 256 0.4.2 value, 512 in 0.5.0
 
-      if not FileExists(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover) then
-        CatSongs.Song[Pet].Cover := ''; // 0.5.0: if cover not found then show 'no cover'
+        if not FileExists(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover) then
+          CatSongs.Song[Pet].Cover := ''; // 0.5.0: if cover not found then show 'no cover'
 
-      if CatSongs.Song[Pet].Cover = '' then
-        AddButton(300 + Pet*250, 140, 200, 200, Skin.GetTextureFileName('SongCover'), 'JPG', 'Plain', Theme.Song.Cover.Reflections)
-      else begin
-        // cache texture if there is a need to this
-        if not Covers.CoverExists(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover) then begin
-          Texture.CreateCacheMipmap := true;
-          Texture.GetTexture(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover, 'Plain', true); // preloads textures and creates cache mipmap
-          Texture.CreateCacheMipmap := false;
+        if CatSongs.Song[Pet].Cover = '' then
+          AddButton(300 + Pet*250, 140, 200, 200, Skin.GetTextureFileName('SongCover'), 'JPG', 'Plain', Theme.Song.Cover.Reflections)
+        else begin
+          // cache texture if there is a need to this
+          if not Covers.CoverExists(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover) then begin
+            Texture.CreateCacheMipmap := true;
+            Texture.GetTexture(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover, 'Plain', true); // preloads textures and creates cache mipmap
+            Texture.CreateCacheMipmap := false;
 
-          // puts this texture to the cache file
-          Covers.AddCover(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover);
+            // puts this texture to the cache file
+            Covers.AddCover(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover);
 
-          // unload full size texture
-          Texture.UnloadTexture(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover, false);
+            // unload full size texture
+            Texture.UnloadTexture(CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover, false);
 
-          // we should also add mipmap texture by calling createtexture and use mipmap cache as data source
-        end;
+            // we should also add mipmap texture by calling createtexture and use mipmap cache as data source
+          end;
 
-        // and now load it from cache file (small place for the optimization by eliminating reading it from file, but not here)
-        AddButton(300 + Pet*250, 140, 200, 200, CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover, 'JPG', 'Plain', Theme.Song.Cover.Reflections);
+          // and now load it from cache file (small place for the optimization by eliminating reading it from file, but not here)
+          AddButton(300 + Pet*250, 140, 200, 200, CatSongs.Song[Pet].Path + CatSongs.Song[Pet].Cover, 'JPG', 'Plain', Theme.Song.Cover.Reflections);
+        end;
+        Texture.Limit := 1024*1024;
+        I := -1;
       end;
-      Texture.Limit := 1024*1024;
-      I := -1;
-    end;
-  except
-    //When Error is reported the First time for this Song
-    if (I <> Pet) then
-    begin
-      //Some Error reporting:
-      Log.LogError('Could not load Cover: ' + CatSongs.Song[Pet].Cover);
+    except
+      //When Error is reported the First time for this Song
+      if (I <> Pet) then
+      begin
+        //Some Error reporting:
+        Log.LogError('Could not load Cover: ' + CatSongs.Song[Pet].Cover);
 
-      //Change Cover to NoCover and Continue Loading
-      CatSongs.Song[Pet].Cover := '';
-      I := Pet;
-    end
-    else //when Error occurs Multiple Times(NoSong Cover is damaged), then start loading next Song
-    begin
-      Log.LogError('NoCover Cover is damaged!');
-      try
-        AddButton(300 + Pet*250, 140, 200, 200, '', 'JPG', 'Plain', Theme.Song.Cover.Reflections);
-      except
-        Messagebox(0, PChar('No Cover Image is damage. Could not Workaround Song Loading, Ultrastar will exit now.'), PChar(Language.Translate('US_VERSION')), MB_ICONERROR or MB_OK);
-        Halt;
+        //Change Cover to NoCover and Continue Loading
+        CatSongs.Song[Pet].Cover := '';
+        I := Pet;
+      end
+      else //when Error occurs Multiple Times(NoSong Cover is damaged), then start loading next Song
+      begin
+        Log.LogError('NoCover Cover is damaged!');
+        try
+          AddButton(300 + Pet*250, 140, 200, 200, '', 'JPG', 'Plain', Theme.Song.Cover.Reflections);
+        except
+          Messagebox(0, PChar('No Cover Image is damage. Could not Workaround Song Loading, Ultrastar will exit now.'), PChar(Language.Translate('US_VERSION')), MB_ICONERROR or MB_OK);
+          Halt;
+        end;
+        I := Pet + 1;
       end;
-      I := Pet + 1;
     end;
-  end;
-
-  if (I <> -1) then
-    GoTo CreateSongButtons;
 
+    if (I <> -1) then
+      GoTo CreateSongButtons;
 
+  end;
 
   // Randomize Patch
   Randomize;
-- 
cgit v1.2.3