diff --git a/src/game/g_items.pas b/src/game/g_items.pas
index 8d476efe76e6fa3fc1c27f98644e2def961704b4..88a9cba1c433057f3ede53d4bf118ad43aecbc9c 100644 (file)
--- a/src/game/g_items.pas
+++ b/src/game/g_items.pas
function g_Items_Create(X, Y: Integer; ItemType: Byte;
Fall, Respawnable: Boolean; AdjCoord: Boolean = False; ForcedID: Integer = -1): DWORD;
procedure g_Items_SetDrop (ID: DWORD);
+procedure g_Items_PreUpdate();
procedure g_Items_Update();
procedure g_Items_Draw();
procedure g_Items_DrawDrop();
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];
result := find_id;
end;
+procedure g_Items_PreUpdate ();
+var
+ i: Integer;
+begin
+ if (ggItems = nil) then Exit;
+ for i := 0 to High(ggItems) do
+ if (ggItems[i].ItemType <> ITEM_NONE) and ggItems[i].slotIsUsed then
+ begin
+ ggItems[i].Obj.oldX := ggItems[i].Obj.X;
+ ggItems[i].Obj.oldY := ggItems[i].Obj.Y;
+ end;
+end;
procedure g_Items_Update ();
var
Anim.Free();
end;
+ Obj.oldX := InitX;
+ Obj.oldY := InitY;
Obj.X := InitX;
Obj.Y := InitY;
Obj.Vel.X := 0;
procedure itemsDrawInternal (dropflag: Boolean);
var
- i: Integer;
+ i, fX, fY: Integer;
it: PItem;
begin
if (ggItems = nil) then exit;
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], Obj.X, Obj.Y, 0, true, false);
+ e_Draw(gItemsTexturesID[ItemType], fX, fY, 0, true, false);
end
else
begin
- Animation.Draw(Obj.X, Obj.Y, TMirrorType.None);
+ Animation.Draw(fX, fY, TMirrorType.None);
end;
if g_debug_Frames then
begin
if (ID < Length(ggItems)) then
begin
+ ggItems[ID].Obj.oldX := ggItems[ID].Obj.X;
+ ggItems[ID].Obj.oldY := ggItems[ID].Obj.Y;
ggItems[ID].alive := false;
ggItems[ID].RespawnTime := IfThen(gLMSRespawn = LMS_RESPAWN_NONE, gGameSettings.ItemRespawnTime, 15) * 36;
end;
it := @ggItems[ID];
if (it.arrIdx <> Integer(ID)) then raise Exception.Create('g_Items_Remove: arrIdx desync');
+ it.Obj.oldX := it.Obj.X;
+ it.Obj.oldY := it.Obj.Y;
trig := it.SpawnTrigger;
releaseItem(ID);
for i := 0 to High(ggItems) do
begin
it := @ggItems[i];
+ it.Obj.oldX := it.Obj.X;
+ it.Obj.oldY := it.Obj.Y;
if not it.slotIsUsed then continue;
if it.Respawnable and (it.ItemType <> ITEM_NONE) then
begin