mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-10-01 10:40:38 +03:00
Initial network entity sync fixes
This commit is contained in:
@@ -416,8 +416,12 @@ public abstract class SaveVersion extends SaveFileReader{
|
||||
}
|
||||
|
||||
public void writeWorldEntities(DataOutput stream) throws IOException{
|
||||
writeWorldEntities(stream, null);
|
||||
}
|
||||
|
||||
public void writeWorldEntities(DataOutput stream, @Nullable Boolf<Unit> unitFilter) throws IOException{
|
||||
//units are not included in Groups.all
|
||||
stream.writeInt(Groups.all.count(Entityc::serialize) + Groups.unit.size());
|
||||
stream.writeInt(Groups.all.count(Entityc::serialize) + (unitFilter == null ? Groups.unit.size() : Groups.unit.count(unitFilter)));
|
||||
|
||||
for(Entityc entity : Groups.all){
|
||||
if(!entity.serialize()) continue;
|
||||
@@ -425,7 +429,9 @@ public abstract class SaveVersion extends SaveFileReader{
|
||||
writeEntity(entity, stream);
|
||||
}
|
||||
|
||||
for(Entityc entity : Groups.unit){
|
||||
for(Unit entity : Groups.unit){
|
||||
if(unitFilter != null && !unitFilter.get(entity)) continue;
|
||||
|
||||
writeEntity(entity, stream);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -475,7 +475,7 @@ public class TypeIO{
|
||||
entity = (Unit)EntityMapping.map(typeID & 0xFF).get();
|
||||
entity.id(id);
|
||||
|
||||
if(!netClient.isEntityUsed(entity.id())){
|
||||
if(!netClient.isEntityUsed(id)){
|
||||
add = true;
|
||||
}
|
||||
created = true;
|
||||
|
||||
@@ -62,8 +62,11 @@ public class NetworkIO{
|
||||
|
||||
writer.writeContentHeader(stream);
|
||||
writer.writeMap(stream);
|
||||
writer.writeEntities(stream);
|
||||
//these three calls mimic what writeEntities has, except with a custom filter, which is a bit fragile
|
||||
writer.writeEntityMapping(stream);
|
||||
writer.writeTeamBlocks(stream);
|
||||
writer.writeWorldEntities(stream, state.rules.fog ? u -> !u.inFogTo(player.team()) : null);
|
||||
|
||||
writer.writeMarkers(stream);
|
||||
writer.writeCustomChunks(stream, true);
|
||||
}catch(IOException e){
|
||||
@@ -102,9 +105,11 @@ public class NetworkIO{
|
||||
writer.readContentHeader(stream);
|
||||
writer.readMap(stream, state);
|
||||
writer.readEntities(stream, state);
|
||||
writer.readTeamBlocks(stream);
|
||||
writer.readMarkers(stream);
|
||||
writer.readCustomChunks(stream);
|
||||
|
||||
Groups.all.each(e -> netClient.addRemovedEntity(e.id()));
|
||||
Groups.unit.each(e -> netClient.addRemovedEntity(e.id()));
|
||||
}catch(IOException e){
|
||||
throw new RuntimeException(e);
|
||||
}finally{
|
||||
|
||||
Reference in New Issue
Block a user