From e4725141791d008b87e68a64f02f024adb928eb0 Mon Sep 17 00:00:00 2001 From: Collin Smith Date: Thu, 4 Jun 2020 19:41:55 -0700 Subject: [PATCH] Rolled Deleted component implementation into a Flags component Removed Deleted component and associated flatbuffers classes Created Flags component along with added a bitflags field to EntitySync flatbuffers table It seems plausible more flags will be needed in the future aside from marking an entity as deleted --- .../com/riiablo/net/packet/d2gs/EntityFlags.java | 13 +++++++++++++ .../gen/com/riiablo/net/packet/d2gs/EntitySync.java | 8 ++++---- core/src/com/riiablo/engine/EntityFactory.java | 3 +++ .../engine/client/ClientNetworkReceiver.java | 3 ++- .../riiablo/engine/server/SerializationManager.java | 13 +++++++------ .../server/component/{Deleted.java => Flags.java} | 7 ++++++- core/src/com/riiablo/net/d2gs/Sync.fbs | 6 +++++- .../riiablo/server/d2gs/NetworkSynchronizer.java | 7 ++++--- 8 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 core/gen/com/riiablo/net/packet/d2gs/EntityFlags.java rename core/src/com/riiablo/engine/server/component/{Deleted.java => Flags.java} (51%) diff --git a/core/gen/com/riiablo/net/packet/d2gs/EntityFlags.java b/core/gen/com/riiablo/net/packet/d2gs/EntityFlags.java new file mode 100644 index 00000000..33cc8f9d --- /dev/null +++ b/core/gen/com/riiablo/net/packet/d2gs/EntityFlags.java @@ -0,0 +1,13 @@ +// automatically generated by the FlatBuffers compiler, do not modify + +package com.riiablo.net.packet.d2gs; + +public final class EntityFlags { + private EntityFlags() { } + public static final byte deleted = 1; + + public static final String[] names = { "deleted", }; + + public static String name(int e) { return names[e - deleted]; } +} + diff --git a/core/gen/com/riiablo/net/packet/d2gs/EntitySync.java b/core/gen/com/riiablo/net/packet/d2gs/EntitySync.java index 83d4caa5..b5fd06e8 100644 --- a/core/gen/com/riiablo/net/packet/d2gs/EntitySync.java +++ b/core/gen/com/riiablo/net/packet/d2gs/EntitySync.java @@ -17,7 +17,7 @@ public final class EntitySync extends Table { public int entityId() { int o = __offset(4); return o != 0 ? bb.getInt(o + bb_pos) : 0; } public int type() { int o = __offset(6); return o != 0 ? bb.get(o + bb_pos) & 0xFF : 0; } - public boolean delete() { int o = __offset(8); return o != 0 ? 0!=bb.get(o + bb_pos) : false; } + public int flags() { int o = __offset(8); return o != 0 ? bb.get(o + bb_pos) & 0xFF : 0; } public byte componentType(int j) { int o = __offset(10); return o != 0 ? bb.get(__vector(o) + j * 1) : 0; } public int componentTypeLength() { int o = __offset(10); return o != 0 ? __vector_len(o) : 0; } public ByteBuffer componentTypeAsByteBuffer() { return __vector_as_bytebuffer(10, 1); } @@ -28,14 +28,14 @@ public final class EntitySync extends Table { public static int createEntitySync(FlatBufferBuilder builder, int entityId, int type, - boolean delete, + int flags, int component_typeOffset, int componentOffset) { builder.startObject(5); EntitySync.addComponent(builder, componentOffset); EntitySync.addComponentType(builder, component_typeOffset); EntitySync.addEntityId(builder, entityId); - EntitySync.addDelete(builder, delete); + EntitySync.addFlags(builder, flags); EntitySync.addType(builder, type); return EntitySync.endEntitySync(builder); } @@ -43,7 +43,7 @@ public final class EntitySync extends Table { public static void startEntitySync(FlatBufferBuilder builder) { builder.startObject(5); } public static void addEntityId(FlatBufferBuilder builder, int entityId) { builder.addInt(0, entityId, 0); } public static void addType(FlatBufferBuilder builder, int type) { builder.addByte(1, (byte)type, (byte)0); } - public static void addDelete(FlatBufferBuilder builder, boolean delete) { builder.addBoolean(2, delete, false); } + public static void addFlags(FlatBufferBuilder builder, int flags) { builder.addByte(2, (byte)flags, (byte)0); } public static void addComponentType(FlatBufferBuilder builder, int componentTypeOffset) { builder.addOffset(3, componentTypeOffset, 0); } public static int createComponentTypeVector(FlatBufferBuilder builder, byte[] data) { builder.startVector(1, data.length, 1); for (int i = data.length - 1; i >= 0; i--) builder.addByte(data[i]); return builder.endVector(); } public static void startComponentTypeVector(FlatBufferBuilder builder, int numElems) { builder.startVector(1, numElems, 1); } diff --git a/core/src/com/riiablo/engine/EntityFactory.java b/core/src/com/riiablo/engine/EntityFactory.java index 236216fb..13471c76 100644 --- a/core/src/com/riiablo/engine/EntityFactory.java +++ b/core/src/com/riiablo/engine/EntityFactory.java @@ -11,6 +11,7 @@ import com.riiablo.engine.server.component.Class; import com.riiablo.engine.server.component.Classname; import com.riiablo.engine.server.component.CofReference; import com.riiablo.engine.server.component.DS1ObjectWrapper; +import com.riiablo.engine.server.component.Flags; import com.riiablo.engine.server.component.PathWrapper; import com.riiablo.item.Item; import com.riiablo.map.DS1; @@ -24,6 +25,7 @@ public abstract class EntityFactory extends PassiveSystem { protected ComponentMapper mClass; protected ComponentMapper mClassname; + protected ComponentMapper mFlags; protected ComponentMapper mCofReference; protected ComponentMapper mDS1ObjectWrapper; protected ComponentMapper mPathWrapper; @@ -37,6 +39,7 @@ public abstract class EntityFactory extends PassiveSystem { int id = world.create(); mClass.create(id).type = type; mClassname.create(id).classname = classname; + mFlags.create(id).flags = 0; return id; } diff --git a/core/src/com/riiablo/engine/client/ClientNetworkReceiver.java b/core/src/com/riiablo/engine/client/ClientNetworkReceiver.java index 42de0702..52dd5944 100644 --- a/core/src/com/riiablo/engine/client/ClientNetworkReceiver.java +++ b/core/src/com/riiablo/engine/client/ClientNetworkReceiver.java @@ -49,6 +49,7 @@ import com.riiablo.net.packet.d2gs.D2GS; import com.riiablo.net.packet.d2gs.D2GSData; import com.riiablo.net.packet.d2gs.DS1ObjectWrapperP; import com.riiablo.net.packet.d2gs.Disconnect; +import com.riiablo.net.packet.d2gs.EntityFlags; import com.riiablo.net.packet.d2gs.EntitySync; import com.riiablo.net.packet.d2gs.GroundToCursor; import com.riiablo.net.packet.d2gs.ItemP; @@ -337,7 +338,7 @@ public class ClientNetworkReceiver extends IntervalSystem { private void Synchronize(EntitySync entityData) { int entityId = syncIds.get(entityData.entityId()); - if (entityData.delete()) { + if ((entityData.flags() & EntityFlags.deleted) == EntityFlags.deleted) { if (entityId != Engine.INVALID_ENTITY) { world.delete(entityId); } diff --git a/core/src/com/riiablo/engine/server/SerializationManager.java b/core/src/com/riiablo/engine/server/SerializationManager.java index c7f6593e..3da2ec7c 100644 --- a/core/src/com/riiablo/engine/server/SerializationManager.java +++ b/core/src/com/riiablo/engine/server/SerializationManager.java @@ -15,7 +15,7 @@ import com.riiablo.engine.server.component.CofAlphas; import com.riiablo.engine.server.component.CofComponents; import com.riiablo.engine.server.component.CofTransforms; import com.riiablo.engine.server.component.DS1ObjectWrapper; -import com.riiablo.engine.server.component.Deleted; +import com.riiablo.engine.server.component.Flags; import com.riiablo.engine.server.component.Item; import com.riiablo.engine.server.component.Monster; import com.riiablo.engine.server.component.Player; @@ -39,6 +39,7 @@ import com.riiablo.net.packet.d2gs.CofComponentsP; import com.riiablo.net.packet.d2gs.CofTransformsP; import com.riiablo.net.packet.d2gs.ComponentP; import com.riiablo.net.packet.d2gs.D2GS; +import com.riiablo.net.packet.d2gs.EntityFlags; import com.riiablo.net.packet.d2gs.EntitySync; import net.mostlyoriginal.api.system.core.PassiveSystem; @@ -59,7 +60,7 @@ public class SerializationManager extends PassiveSystem { private Class[] deserializers; private final EntitySync sync = new EntitySync(); - protected ComponentMapper mDeleted; + protected ComponentMapper mFlags; protected ComponentMapper mClass; protected ComponentMapper mCofComponents; @@ -128,11 +129,11 @@ public class SerializationManager extends PassiveSystem { int type = mClass.get(entityId).type.ordinal(); - boolean deleted = mDeleted.has(entityId); - if (deleted) { + int flags = mFlags.get(entityId).flags; + if ((flags & EntityFlags.deleted) == EntityFlags.deleted) { int dataTypeOffset = EntitySync.createComponentTypeVector(builder, ArrayUtils.EMPTY_BYTE_ARRAY); int dataOffset = EntitySync.createComponentVector(builder, ArrayUtils.EMPTY_INT_ARRAY); - return EntitySync.createEntitySync(builder, entityId, type, deleted, dataTypeOffset, dataOffset); + return EntitySync.createEntitySync(builder, entityId, type, flags, dataTypeOffset, dataOffset); } componentManager.getComponentsFor(entityId, components); @@ -157,7 +158,7 @@ public class SerializationManager extends PassiveSystem { for (int i = 0; i < dataSize; i++) builder.addOffset(data[i]); int dataOffset = builder.endVector(); - return EntitySync.createEntitySync(builder, entityId, type, deleted, dataTypeOffset, dataOffset); + return EntitySync.createEntitySync(builder, entityId, type, flags, dataTypeOffset, dataOffset); } public void deserialize(int entityId, D2GS packet) { diff --git a/core/src/com/riiablo/engine/server/component/Deleted.java b/core/src/com/riiablo/engine/server/component/Flags.java similarity index 51% rename from core/src/com/riiablo/engine/server/component/Deleted.java rename to core/src/com/riiablo/engine/server/component/Flags.java index f2e7277c..aa5cc21a 100644 --- a/core/src/com/riiablo/engine/server/component/Deleted.java +++ b/core/src/com/riiablo/engine/server/component/Flags.java @@ -4,4 +4,9 @@ import com.artemis.Component; import com.artemis.annotations.PooledWeaver; @PooledWeaver -public class Deleted extends Component {} +public class Flags extends Component { + /** + * @see com.riiablo.net.packet.d2gs.EntityFlags + */ + public int flags = 0; +} diff --git a/core/src/com/riiablo/net/d2gs/Sync.fbs b/core/src/com/riiablo/net/d2gs/Sync.fbs index 6ba936d4..eb2dcdd7 100644 --- a/core/src/com/riiablo/net/d2gs/Sync.fbs +++ b/core/src/com/riiablo/net/d2gs/Sync.fbs @@ -15,10 +15,14 @@ union ComponentP { ItemP, } +enum EntityFlags:uint8 (bit_flags) { + deleted, +} + table EntitySync { entityId:int32; type:uint8; - delete:bool = false; + flags:EntityFlags; component:[ComponentP]; } diff --git a/server/d2gs/src/com/riiablo/server/d2gs/NetworkSynchronizer.java b/server/d2gs/src/com/riiablo/server/d2gs/NetworkSynchronizer.java index 4fdbf882..a9cff567 100644 --- a/server/d2gs/src/com/riiablo/server/d2gs/NetworkSynchronizer.java +++ b/server/d2gs/src/com/riiablo/server/d2gs/NetworkSynchronizer.java @@ -11,10 +11,11 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.utils.IntIntMap; import com.riiablo.engine.server.SerializationManager; import com.riiablo.engine.server.component.Class; -import com.riiablo.engine.server.component.Deleted; +import com.riiablo.engine.server.component.Flags; import com.riiablo.engine.server.component.Networked; import com.riiablo.net.packet.d2gs.D2GS; import com.riiablo.net.packet.d2gs.D2GSData; +import com.riiablo.net.packet.d2gs.EntityFlags; import java.util.concurrent.BlockingQueue; @@ -34,7 +35,7 @@ public class NetworkSynchronizer extends BaseEntitySystem { protected IntIntMap players; protected ComponentMapper mClass; - protected ComponentMapper mDeleted; + protected ComponentMapper mFlags; @Override protected boolean checkProcessing() { @@ -50,7 +51,7 @@ public class NetworkSynchronizer extends BaseEntitySystem { // TODO: handled by disconnection packet, need to handle here also break; default: - mDeleted.create(entityId); + mFlags.get(entityId).flags |= EntityFlags.deleted; process(entityId); } }