X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_items.pas;h=6c8041ddd97bfe0ba46c4e2081f5dd1ffd8ab866;hb=d0936017ccb8a078d1b03f55478af284bb015bbc;hp=88a9cba1c433057f3ede53d4bf118ad43aecbc9c;hpb=dffafd305d0df029f317cc92c1968ba0065c0cd8;p=d2df-sdl.git diff --git a/src/game/g_items.pas b/src/game/g_items.pas index 88a9cba..6c8041d 100644 --- a/src/game/g_items.pas +++ b/src/game/g_items.pas @@ -44,6 +44,7 @@ Type procedure positionChanged (); //WARNING! call this after monster position was changed, or coldet will not work right! + property used: Boolean read slotIsUsed; property myid: Integer read arrIdx; end; @@ -56,8 +57,6 @@ function g_Items_Create(X, Y: Integer; ItemType: Byte; procedure g_Items_SetDrop (ID: DWORD); procedure g_Items_PreUpdate(); procedure g_Items_Update(); -procedure g_Items_Draw(); -procedure g_Items_DrawDrop(); procedure g_Items_Pick(ID: DWORD); procedure g_Items_Remove(ID: DWORD); procedure g_Items_SaveState (st: TStream); @@ -85,20 +84,18 @@ var gItemsTexturesID: Array [1..ITEM_MAX] of DWORD; gMaxDist: Integer = 1; // for sounds + var (* private state *) + ggItems: Array of TItem = nil; + implementation uses Math, - g_basic, e_graphics, g_sound, g_main, g_gfx, g_map, + g_basic, g_sound, g_gfx, g_map, g_game, g_triggers, g_console, g_player, g_net, g_netmsg, - e_log, + e_log, g_options, g_grid, binheap, idpool, utils, xstreams; - -var - ggItems: Array of TItem = nil; - - // ////////////////////////////////////////////////////////////////////////// // var freeIds: TIdPool = nil; @@ -463,8 +460,6 @@ begin it.dropped := false; g_Obj_Init(@it.Obj); - it.Obj.oldX := X; - it.Obj.oldY := Y; it.Obj.X := X; it.Obj.Y := Y; it.Obj.Rect.Width := ITEMSIZE[ItemType][0]; @@ -485,6 +480,9 @@ begin end; end; + it.Obj.oldX := it.Obj.X; + it.Obj.oldY := it.Obj.Y; + // Óñòàíîâêà àíèìàöèè case it.ItemType of ITEM_ARMOR_GREEN: if g_Frames_Get(ID, 'FRAMES_ITEM_ARMORGREEN') then it.Animation := TAnimation.Create(ID, True, 20); @@ -644,60 +642,6 @@ begin end; end; - -procedure itemsDrawInternal (dropflag: Boolean); -var - i, fX, fY: Integer; - it: PItem; -begin - if (ggItems = nil) then exit; - - for i := 0 to High(ggItems) do - begin - it := @ggItems[i]; - if (not it.slotIsUsed) or (it.ItemType = ITEM_NONE) then continue; // just in case - if not it.alive then continue; - if (it.dropped <> dropflag) then continue; - - with it^ do - begin - if g_Collide(Obj.X, Obj.Y, Obj.Rect.Width, Obj.Rect.Height, sX, sY, sWidth, sHeight) then - begin - Obj.lerp(gLerpFactor, fX, fY); - if (Animation = nil) then - begin - e_Draw(gItemsTexturesID[ItemType], fX, fY, 0, true, false); - end - else - begin - Animation.Draw(fX, fY, TMirrorType.None); - end; - - if g_debug_Frames then - begin - e_DrawQuad(Obj.X+Obj.Rect.X, - Obj.Y+Obj.Rect.Y, - Obj.X+Obj.Rect.X+Obj.Rect.Width-1, - Obj.Y+Obj.Rect.Y+Obj.Rect.Height-1, - 0, 255, 0); - end; - end; - end; - end; -end; - - -procedure g_Items_Draw (); -begin - itemsDrawInternal(false); -end; - -procedure g_Items_DrawDrop (); -begin - itemsDrawInternal(true); -end; - - procedure g_Items_SetDrop (ID: DWORD); begin if (ID < Length(ggItems)) then