Actually implemented puddle syncing

This commit is contained in:
Anuken
2018-06-10 21:00:23 -04:00
parent c508f30d92
commit 2ddd768393
2 changed files with 36 additions and 5 deletions

View File

@@ -11,6 +11,7 @@ import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.bullet.BulletType;
import io.anuke.mindustry.entities.effect.Fire;
import io.anuke.mindustry.entities.effect.ItemDrop;
import io.anuke.mindustry.entities.effect.Puddle;
import io.anuke.mindustry.entities.traits.SyncTrait;
import io.anuke.mindustry.entities.units.UnitType;
import io.anuke.mindustry.entities.units.types.Drone;
@@ -135,5 +136,6 @@ public class ContentLoader {
Scout.typeID = SyncTrait.registerType(Scout::new);
ItemDrop.typeID = SyncTrait.registerType(ItemDrop::new);
Fire.typeID = SyncTrait.registerType(Fire::new);
Puddle.typeID = SyncTrait.registerType(Puddle::new);
}
}

View File

@@ -15,6 +15,7 @@ import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.content.fx.EnvironmentFx;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.traits.SaveTrait;
import io.anuke.mindustry.entities.traits.SyncTrait;
import io.anuke.mindustry.gen.CallEntity;
import io.anuke.mindustry.net.In;
import io.anuke.mindustry.net.Net;
@@ -38,7 +39,7 @@ import java.io.IOException;
import static io.anuke.mindustry.Vars.*;
public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait {
public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait, SyncTrait {
private static final IntMap<Puddle> map = new IntMap<>();
private static final float maxLiquid = 70f;
private static final int maxGeneration = 2;
@@ -47,13 +48,15 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
private static final Rectangle rect2 = new Rectangle();
private static int seeds;
public static int typeID = -1;
private int loadedPosition = -1;
private Tile tile;
private Liquid liquid;
private float amount;
private byte generation;
private float amount, targetAmount;
private float accepting;
private byte generation;
/**Deposists a puddle between tile and source.*/
public static void deposit(Tile tile, Tile source, Liquid liquid, float amount){
@@ -143,7 +146,7 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
@Override
public void update() {
if(amount >= maxLiquid/2f && Timers.get(this, "update", 20)){
Units.getNearby(rect.setSize(Mathf.clamp(amount/(maxLiquid/1.5f))*10f).setCenter(tile.worldx(), tile.worldy()), unit -> {
Units.getNearby(rect.setSize(Mathf.clamp(amount/(maxLiquid/1.5f))*10f).setCenter(x, y), unit -> {
unit.getHitbox(rect2);
if(!rect.overlaps(rect2)) return;
@@ -160,7 +163,10 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
}
//no updating happens clientside
if(Net.client()) return;
if(Net.client()){
amount = Mathf.lerpDelta(amount, targetAmount, 0.15f);
return;
}
float addSpeed = accepting > 0 ? 3f : 0f;
@@ -255,6 +261,29 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
reset();
}
@Override
public int getTypeID() {
return typeID;
}
@Override
public void write(DataOutput data) throws IOException {
data.writeFloat(x);
data.writeFloat(y);
data.writeByte(liquid.id);
data.writeShort((short)(amount * 4));
data.writeInt(tile.packedPosition());
}
@Override
public void read(DataInput data, long time) throws IOException {
x = data.readFloat();
y = data.readFloat();
liquid = Liquid.getByID(data.readByte());
targetAmount = data.readShort()/4f;
tile = world.tile(data.readInt());
}
@Override
public EntityGroup targetGroup() {
return puddleGroup;