From ce6bd0fd6da0671012d780212abea1938370b2fb Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 9 Jun 2018 23:33:01 -0400 Subject: [PATCH] Fixed item drop quantities not syncing --- .../mindustry/entities/effect/ItemDrop.java | 17 ++++++++++++----- .../io/anuke/mindustry/net/Interpolator.java | 10 ++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/core/src/io/anuke/mindustry/entities/effect/ItemDrop.java b/core/src/io/anuke/mindustry/entities/effect/ItemDrop.java index 782a9d226d..a3f223d541 100644 --- a/core/src/io/anuke/mindustry/entities/effect/ItemDrop.java +++ b/core/src/io/anuke/mindustry/entities/effect/ItemDrop.java @@ -11,6 +11,7 @@ import io.anuke.mindustry.entities.traits.SyncTrait; import io.anuke.mindustry.gen.CallEntity; import io.anuke.mindustry.net.In; import io.anuke.mindustry.net.Interpolator; +import io.anuke.mindustry.net.Net; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; @@ -119,8 +120,12 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait, Veloc @Override public void update() { - updateVelocity(0.2f); - updateTime(); + if(Net.client()) { + interpolate(); + }else{ + updateVelocity(0.2f); + updateTime(); + } Tile tile = world.tileWorld(x, y); @@ -132,7 +137,7 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait, Veloc } if(sinktime >= sinkLifetime){ - remove(); + CallEntity.onPickup(getID()); } }else{ sinktime = 0f; @@ -147,6 +152,7 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait, Veloc @Override public void reset() { time = 0f; + interpolator.reset(); } @Override @@ -169,12 +175,13 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait, Veloc data.writeFloat(x); data.writeFloat(y); data.writeByte(item.id); + data.writeShort(amount); } @Override public void read(DataInput data, long time) throws IOException{ - x = data.readFloat(); - y = data.readFloat(); + interpolator.read(x, y, data.readFloat(), data.readFloat(), time); item = Item.getByID(data.readByte()); + amount = data.readShort(); } } diff --git a/core/src/io/anuke/mindustry/net/Interpolator.java b/core/src/io/anuke/mindustry/net/Interpolator.java index 06e3ae2183..b6c73801b4 100644 --- a/core/src/io/anuke/mindustry/net/Interpolator.java +++ b/core/src/io/anuke/mindustry/net/Interpolator.java @@ -26,6 +26,16 @@ public class Interpolator { spacing = Math.min(Math.max(((TimeUtils.timeSinceMillis(sent) / 1000f) * 60f), 4f), 10); } + public void reset(){ + values = new float[0]; + targets = new float[0]; + target.setZero(); + last.setZero(); + spacing = 1f; + time = 0f; + pos.setZero(); + } + public void update(){ time += 1f / spacing * Math.min(Timers.delta(), 1f);