mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-07-06 16:27:34 +07:00
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:
13
core/gen/com/riiablo/net/packet/d2gs/EntityFlags.java
Normal file
13
core/gen/com/riiablo/net/packet/d2gs/EntityFlags.java
Normal 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]; }
|
||||
}
|
||||
|
@ -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); }
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
@ -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];
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user