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
This commit is contained in:
Collin Smith
2020-06-04 19:41:55 -07:00
parent 7301c483ca
commit e472514179
8 changed files with 44 additions and 16 deletions

View File

@ -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]; }
}

View File

@ -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); }

View File

@ -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<Class> mClass;
protected ComponentMapper<Classname> mClassname;
protected ComponentMapper<Flags> mFlags;
protected ComponentMapper<CofReference> mCofReference;
protected ComponentMapper<DS1ObjectWrapper> mDS1ObjectWrapper;
protected ComponentMapper<PathWrapper> 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;
}

View File

@ -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);
}

View File

@ -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<? extends Component>[] deserializers;
private final EntitySync sync = new EntitySync();
protected ComponentMapper<Deleted> mDeleted;
protected ComponentMapper<Flags> mFlags;
protected ComponentMapper<com.riiablo.engine.server.component.Class> mClass;
protected ComponentMapper<CofComponents> 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) {

View File

@ -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;
}

View File

@ -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];
}

View File

@ -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<Class> mClass;
protected ComponentMapper<Deleted> mDeleted;
protected ComponentMapper<Flags> 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);
}
}