From 125677f787234b74d854c9468c4790790529d9ba Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 13 Jun 2018 23:16:34 -0400 Subject: [PATCH] Added toggleable syncing --- core/src/io/anuke/mindustry/Vars.java | 2 +- .../anuke/mindustry/core/ContentLoader.java | 2 ++ .../io/anuke/mindustry/core/NetServer.java | 16 ++++++++-- .../src/io/anuke/mindustry/core/Renderer.java | 10 +++++- .../mindustry/entities/bullet/Bullet.java | 31 +++++++++++++------ .../entities/traits/RepairTrait.java | 19 ++++++++++++ .../mindustry/entities/traits/SyncTrait.java | 5 +++ .../anuke/mindustry/world/WorldGenerator.java | 2 -- 8 files changed, 70 insertions(+), 17 deletions(-) create mode 100644 core/src/io/anuke/mindustry/entities/traits/RepairTrait.java diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index c61258ff5d..15c69e5be4 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -147,7 +147,7 @@ public class Vars{ playerGroup = Entities.addGroup(Player.class).enableMapping(); tileGroup = Entities.addGroup(TileEntity.class, false); - bulletGroup = Entities.addGroup(Bullet.class); + bulletGroup = Entities.addGroup(Bullet.class).enableMapping(); shieldGroup = Entities.addGroup(Shield.class, false); effectGroup = Entities.addGroup(EffectEntity.class, false); groundEffectGroup = Entities.addGroup(DrawTrait.class, false); diff --git a/core/src/io/anuke/mindustry/core/ContentLoader.java b/core/src/io/anuke/mindustry/core/ContentLoader.java index 08b18207ad..dd95b86bad 100644 --- a/core/src/io/anuke/mindustry/core/ContentLoader.java +++ b/core/src/io/anuke/mindustry/core/ContentLoader.java @@ -8,6 +8,7 @@ import io.anuke.mindustry.content.blocks.*; import io.anuke.mindustry.content.bullets.*; import io.anuke.mindustry.content.fx.*; import io.anuke.mindustry.entities.Player; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.entities.effect.Fire; import io.anuke.mindustry.entities.effect.ItemDrop; @@ -136,5 +137,6 @@ public class ContentLoader { ItemDrop.typeID = TypeTrait.registerType(ItemDrop::new); Fire.typeID = TypeTrait.registerType(Fire::new); Puddle.typeID = TypeTrait.registerType(Puddle::new); + Bullet.typeID = TypeTrait.registerType(Bullet::new); } } diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 0e6f47dd4b..1f0598ea90 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -351,11 +351,21 @@ public class NetServer extends Module{ throw new RuntimeException("Entity group '" + group.getType() + "' contains SyncTrait entities, yet mapping is not enabled. In order for syncing to work, you must enable mapping for this group."); } - //write group ID + group size - dataStream.writeByte(group.getID()); - dataStream.writeShort(group.size()); + int amount = 0; for(Entity entity : group.all()){ + if(((SyncTrait)entity).isSyncing()){ + amount ++; + } + } + + //write group ID + group sizeif(((SyncTrait)entity).isSyncing()) + dataStream.writeByte(group.getID()); + dataStream.writeShort(amount); + + for(Entity entity : group.all()){ + if(!((SyncTrait)entity).isSyncing()) continue;; + int position = syncStream.position(); //write all entities now dataStream.writeInt(entity.getID()); //write id diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index d1c1e0d016..ec3cb21347 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -200,7 +200,6 @@ public class Renderer extends RendererModule{ EntityDraw.draw(groundEffectGroup, e -> e instanceof BelowLiquidTrait); EntityDraw.draw(puddleGroup); EntityDraw.draw(groundEffectGroup, e -> !(e instanceof BelowLiquidTrait)); - EntityDraw.draw(itemGroup); blocks.processBlocks(); blocks.drawBlocks(Layer.block); @@ -211,6 +210,14 @@ public class Renderer extends RendererModule{ blocks.drawBlocks(Layer.overlay); + if(itemGroup.size() > 0){ + Shaders.outline.color.set(Team.none.color); + + Graphics.beginShaders(Shaders.outline); + EntityDraw.draw(itemGroup); + Graphics.endShaders(); + } + drawAllTeams(false); blocks.skipLayer(Layer.turret); @@ -240,6 +247,7 @@ public class Renderer extends RendererModule{ private void drawAllTeams(boolean flying){ for(Team team : Team.values()){ EntityGroup group = unitGroups[team.ordinal()]; + if(group.count(p -> p.isFlying() == flying) + playerGroup.count(p -> p.isFlying() == flying && p.getTeam() == team) == 0 && flying) continue; diff --git a/core/src/io/anuke/mindustry/entities/bullet/Bullet.java b/core/src/io/anuke/mindustry/entities/bullet/Bullet.java index a7c13d7d57..0121d0b38a 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/Bullet.java +++ b/core/src/io/anuke/mindustry/entities/bullet/Bullet.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.utils.Pools; import io.anuke.annotations.Annotations.Loc; import io.anuke.annotations.Annotations.Remote; import io.anuke.mindustry.entities.Unit; +import io.anuke.mindustry.entities.traits.SyncTrait; import io.anuke.mindustry.entities.traits.TeamTrait; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.net.In; @@ -16,10 +17,16 @@ import io.anuke.ucore.entities.trait.SolidTrait; import io.anuke.ucore.entities.trait.VelocityTrait; import io.anuke.ucore.util.Timer; +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + import static io.anuke.mindustry.Vars.bulletGroup; import static io.anuke.mindustry.Vars.world; -public class Bullet extends BulletEntity implements TeamTrait{ +public class Bullet extends BulletEntity implements TeamTrait, SyncTrait{ + public static int typeID = -1; + private static Vector2 vector = new Vector2(); //private Interpolator interpolator = new Interpolator(); @@ -69,21 +76,23 @@ public class Bullet extends BulletEntity implements TeamTrait{ public boolean collidesTiles(){ return true; //TODO make artillery and such not do this } -/* + @Override - public boolean doSync(){ + public int getTypeID() { + return typeID; + } + + @Override + public boolean isSyncing(){ return type.syncable; } @Override - public Interpolator getInterpolator() { - return interpolator; - } - - @Override - public void write(DataOutput data) throws IOException{ + public void write(DataOutput data) throws IOException { data.writeFloat(x); data.writeFloat(y); + data.writeFloat(velocity.x); + data.writeFloat(velocity.y); data.writeByte(team.ordinal()); data.writeByte(type.id); } @@ -92,9 +101,11 @@ public class Bullet extends BulletEntity implements TeamTrait{ public void read(DataInput data, long time) throws IOException{ x = data.readFloat(); y = data.readFloat(); + velocity.x = data.readFloat(); + velocity.y = data.readFloat(); team = Team.values()[data.readByte()]; type = BulletType.getByID(data.readByte()); - }*/ + } @Override public Team getTeam() { diff --git a/core/src/io/anuke/mindustry/entities/traits/RepairTrait.java b/core/src/io/anuke/mindustry/entities/traits/RepairTrait.java new file mode 100644 index 0000000000..52e9a1c86c --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/traits/RepairTrait.java @@ -0,0 +1,19 @@ +package io.anuke.mindustry.entities.traits; + +import io.anuke.ucore.entities.trait.HealthTrait; + +//TODO implement +public interface RepairTrait extends TeamTrait { + + HealthTrait getRepairing(); + + void setRepairing(HealthTrait trait); + + default void drawRepair(){ + if(getRepairing() == null) return; + } + + default void updateRepair(){ + if(getRepairing() == null) return; + } +} diff --git a/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java b/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java index e1ee55d364..91f74c8640 100644 --- a/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java @@ -44,6 +44,11 @@ public interface SyncTrait extends Entity, TypeTrait { return null; } + /**Whether syncing is enabled for this entity; true by default.*/ + default boolean isSyncing(){ + return true; + } + //Read and write sync data, usually position void write(DataOutput data) throws IOException; void read(DataInput data, long time) throws IOException; diff --git a/core/src/io/anuke/mindustry/world/WorldGenerator.java b/core/src/io/anuke/mindustry/world/WorldGenerator.java index 035ad3b320..7e3f81b46b 100644 --- a/core/src/io/anuke/mindustry/world/WorldGenerator.java +++ b/core/src/io/anuke/mindustry/world/WorldGenerator.java @@ -124,8 +124,6 @@ public class WorldGenerator { final RidgedPerlin ridge; final int index; - int used; - OreEntry(Block block, float frequency, int seed) { this.frequency = frequency; this.block = block;