DEADSOFTWARE

gl: implement load screen
[d2df-sdl.git] / src / game / g_items.pas
index 6ff6b86e6010e11caf2ba007fc645c388fe61c05..8f369bb61926fe6247ee2c9c1923c334042110d2 100644 (file)
@@ -19,7 +19,10 @@ interface
 
 uses
   SysUtils, Classes,
-  MAPDEF, g_textures, g_phys, g_saveload;
+  MAPDEF, g_phys, g_saveload;
+
+const
+  ITEM_LAST = ITEM_MAX;
 
 Type
   PItem = ^TItem;
@@ -39,7 +42,6 @@ Type
     QuietRespawn: Boolean;
     SpawnTrigger: Integer;
     Obj: TObj;
-    Animation: TAnimationState;
     dropped: Boolean; // dropped from the monster? drops should be rendered after corpses, so zombie corpse will not obscure ammo container, for example
     NeedSend: Boolean;
 
@@ -83,20 +85,21 @@ type
 function g_Items_ForEachAlive (cb: TItemEachAliveCB; backwards: Boolean=false): Boolean;
 function g_Items_NextAlive (startIdx: Integer): PItem;
 
-var
-  gMaxDist: Integer = 1; // for sounds
-
   var (* private state *)
     ggItems: Array of TItem = nil;
 
 implementation
 
-uses
-  Math,
-  g_basic, g_sound, g_gfx, g_map, r_animations, r_gfx,
-  g_game, g_triggers, g_console, g_player, g_net, g_netmsg,
-  e_log, g_options,
-  g_grid, binheap, idpool, utils, xstreams;
+  uses
+    {$IFDEF ENABLE_GFX}
+      g_gfx,
+    {$ENDIF}
+    Math,
+    g_basic, g_sound, g_map,
+    g_game, g_triggers, g_console, g_player, g_net, g_netmsg,
+    e_log, g_options, g_language, g_window,
+    g_grid, binheap, idpool, utils, xstreams
+  ;
 
 // ////////////////////////////////////////////////////////////////////////// //
 var
@@ -200,6 +203,7 @@ const
 procedure g_Items_LoadData();
 begin
   e_WriteLog('Loading items data...', TMsgType.Notify);
+  g_Game_SetLoadingText(_lc[I_LOAD_ITEMS_DATA], 0, False);
 
   g_Sound_CreateWADEx('SOUND_ITEM_RESPAWNITEM', GameWAD+':SOUNDS\RESPAWNITEM');
   g_Sound_CreateWADEx('SOUND_ITEM_GETRULEZ', GameWAD+':SOUNDS\GETRULEZ');
@@ -234,11 +238,6 @@ begin
   if not it.slotIsUsed then raise Exception.Create('releaseItem: trying to release unallocated item (1)');
   if (it.arrIdx <> idx) then raise Exception.Create('releaseItem: arrIdx inconsistency');
   it.slotIsUsed := false;
-  if (it.Animation <> nil) then
-  begin
-    it.Animation.Free();
-    it.Animation := nil;
-  end;
   it.alive := False;
   it.SpawnTrigger := -1;
   it.ItemType := ITEM_NONE;
@@ -262,7 +261,6 @@ begin
     it.slotIsUsed := false;
     it.arrIdx := i;
     it.ItemType := ITEM_NONE;
-    it.Animation := nil;
     it.alive := false;
     it.SpawnTrigger := -1;
     it.Respawnable := false;
@@ -309,24 +307,14 @@ end;
 
 // ////////////////////////////////////////////////////////////////////////// //
 procedure g_Items_Init ();
-var
-  a, b: Integer;
 begin
-  if gMapInfo.Height > gPlayerScreenSize.Y then a := gMapInfo.Height-gPlayerScreenSize.Y else a := gMapInfo.Height;
-  if gMapInfo.Width > gPlayerScreenSize.X then b := gMapInfo.Width-gPlayerScreenSize.X else b := gMapInfo.Width;
-  gMaxDist := Trunc(Hypot(a, b));
 end;
 
 
 procedure g_Items_Free ();
-var
-  i: Integer;
 begin
   if (ggItems <> nil) then
-  begin
-    for i := 0 to High(ggItems) do ggItems[i].Animation.Free();
     ggItems := nil;
-  end;
   freeIds.clear();
 end;
 
@@ -364,7 +352,6 @@ begin
   it.Obj.Rect.Width := ITEMSIZE[ItemType][0];
   it.Obj.Rect.Height := ITEMSIZE[ItemType][1];
 
-  it.Animation := nil;
   it.SpawnTrigger := -1;
 
   // Êîîðäèíàòû îòíîñèòåëüíî öåíòðà íèæíåãî ðåáðà
@@ -382,19 +369,6 @@ begin
   it.Obj.oldX := it.Obj.X;
   it.Obj.oldY := it.Obj.Y;
 
-  // Óñòàíîâêà àíèìàöèè
-  case it.ItemType of
-    ITEM_ARMOR_GREEN: it.Animation := TAnimationState.Create(True, 20, 3);
-    ITEM_ARMOR_BLUE: it.Animation := TAnimationState.Create(True, 20, 3);
-    ITEM_JETPACK: it.Animation := TAnimationState.Create(True, 15, 3);
-    ITEM_SPHERE_BLUE: it.Animation := TAnimationState.Create(True, 15, 4);
-    ITEM_SPHERE_WHITE: it.Animation := TAnimationState.Create(True, 20, 4);
-    ITEM_INVUL: it.Animation := TAnimationState.Create(True, 20, 4);
-    ITEM_INVIS: it.Animation := TAnimationState.Create(True, 20, 4);
-    ITEM_BOTTLE: it.Animation := TAnimationState.Create(True, 20, 4);
-    ITEM_HELMET: it.Animation := TAnimationState.Create(True, 20, 4);
-  end;
-
   it.positionChanged();
 
   result := find_id;
@@ -509,7 +483,13 @@ begin
         if (RespawnTime = 0) and (not alive) then
         begin
           if not QuietRespawn then g_Sound_PlayExAt('SOUND_ITEM_RESPAWNITEM', InitX, InitY);
-          r_GFX_OnceAnim(R_GFX_ITEM_RESPAWN, InitX + (Obj.Rect.Width div 2) - 16, InitY + (Obj.Rect.Height div 2) - 16);
+          {$IFDEF ENABLE_GFX}
+            g_GFX_QueueEffect(
+              R_GFX_ITEM_RESPAWN,
+              InitX + (Obj.Rect.Width div 2) - 16,
+              InitY + (Obj.Rect.Height div 2) - 16
+            );
+          {$ENDIF}
           Obj.oldX := InitX;
           Obj.oldY := InitY;
           Obj.X := InitX;
@@ -526,8 +506,6 @@ begin
           QuietRespawn := false;
         end;
       end;
-
-      if (Animation <> nil) then Animation.Update();
     end;
   end;
 end;