X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_items.pas;h=8f369bb61926fe6247ee2c9c1923c334042110d2;hb=0c447046675a6de0d4cfb88e3cfc31b885138ba1;hp=1ee3fec1b60dd6f7490401081245f37770940e60;hpb=f899678def9ad87fd359763cade7910ad8e69a34;p=d2df-sdl.git diff --git a/src/game/g_items.pas b/src/game/g_items.pas index 1ee3fec..8f369bb 100644 --- a/src/game/g_items.pas +++ b/src/game/g_items.pas @@ -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_textures, r_animations, - 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; @@ -416,8 +390,6 @@ end; procedure g_Items_Update (); var i, j, k: Integer; - ID: DWord; - Anim: TAnimation; m, ItemRespawnTime: Word; r, nxt: Boolean; begin @@ -511,14 +483,13 @@ begin if (RespawnTime = 0) and (not alive) then begin if not QuietRespawn then g_Sound_PlayExAt('SOUND_ITEM_RESPAWNITEM', InitX, InitY); - - if g_Frames_Get(ID, 'FRAMES_ITEM_RESPAWN') then - begin - Anim := TAnimation.Create(ID, False, 4); - g_GFX_OnceAnim(InitX+(Obj.Rect.Width div 2)-16, InitY+(Obj.Rect.Height div 2)-16, Anim); - Anim.Free(); - end; - + {$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; @@ -535,8 +506,6 @@ begin QuietRespawn := false; end; end; - - if (Animation <> nil) then Animation.Update(); end; end; end;