Persistent unit IDs
This commit is contained in:
@@ -7,7 +7,6 @@ import arc.util.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.*;
|
||||
import mindustry.game.EventType.*;
|
||||
import mindustry.io.legacy.*;
|
||||
import mindustry.io.versions.*;
|
||||
import mindustry.world.*;
|
||||
|
||||
@@ -21,7 +20,7 @@ public class SaveIO{
|
||||
/** Save format header. */
|
||||
public static final byte[] header = {'M', 'S', 'A', 'V'};
|
||||
public static final IntMap<SaveVersion> versions = new IntMap<>();
|
||||
public static final Seq<SaveVersion> versionArray = Seq.with(new Save1(), new Save2(), new Save3(), new Save4(), new Save5());
|
||||
public static final Seq<SaveVersion> versionArray = Seq.with(new Save1(), new Save2(), new Save3(), new Save4(), new Save5(), new Save6());
|
||||
|
||||
static{
|
||||
for(SaveVersion version : versionArray){
|
||||
|
||||
@@ -10,6 +10,7 @@ import mindustry.content.*;
|
||||
import mindustry.content.TechTree.*;
|
||||
import mindustry.core.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.entities.*;
|
||||
import mindustry.game.*;
|
||||
import mindustry.game.Teams.*;
|
||||
import mindustry.gen.*;
|
||||
@@ -316,6 +317,7 @@ public abstract class SaveVersion extends SaveFileReader{
|
||||
|
||||
writeChunk(stream, true, out -> {
|
||||
out.writeByte(entity.classId());
|
||||
out.writeInt(entity.id());
|
||||
entity.write(Writes.get(out));
|
||||
});
|
||||
}
|
||||
@@ -371,7 +373,11 @@ public abstract class SaveVersion extends SaveFileReader{
|
||||
return;
|
||||
}
|
||||
|
||||
int id = in.readInt();
|
||||
|
||||
Entityc entity = (Entityc)mapping[typeid].get();
|
||||
EntityGroup.checkNextId(id);
|
||||
entity.id(id);
|
||||
entity.read(Reads.get(in));
|
||||
entity.add();
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package mindustry.io.legacy;
|
||||
package mindustry.io.versions;
|
||||
|
||||
import arc.*;
|
||||
import arc.struct.*;
|
||||
@@ -1,4 +1,4 @@
|
||||
package mindustry.io.legacy;
|
||||
package mindustry.io.versions;
|
||||
|
||||
import arc.util.*;
|
||||
import arc.util.io.*;
|
||||
37
core/src/mindustry/io/versions/LegacySaveVersion2.java
Normal file
37
core/src/mindustry/io/versions/LegacySaveVersion2.java
Normal file
@@ -0,0 +1,37 @@
|
||||
package mindustry.io.versions;
|
||||
|
||||
import arc.func.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.io.*;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
/** This version did not read/write entity IDs to the save. */
|
||||
public class LegacySaveVersion2 extends SaveVersion{
|
||||
|
||||
public LegacySaveVersion2(int version){
|
||||
super(version);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readWorldEntities(DataInput stream) throws IOException{
|
||||
//entityMapping is null in older save versions, so use the default
|
||||
Prov[] mapping = this.entityMapping == null ? EntityMapping.idMap : this.entityMapping;
|
||||
|
||||
int amount = stream.readInt();
|
||||
for(int j = 0; j < amount; j++){
|
||||
readChunk(stream, true, in -> {
|
||||
int typeid = in.readUnsignedByte();
|
||||
if(mapping[typeid] == null){
|
||||
in.skipBytes(lastRegionLength - 1);
|
||||
return;
|
||||
}
|
||||
|
||||
Entityc entity = (Entityc)mapping[typeid].get();
|
||||
entity.read(Reads.get(in));
|
||||
entity.add();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package mindustry.io.legacy;
|
||||
package mindustry.io.versions;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package mindustry.io.legacy;
|
||||
package mindustry.io.versions;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package mindustry.io.legacy;
|
||||
package mindustry.io.versions;
|
||||
|
||||
import mindustry.game.*;
|
||||
import mindustry.game.Teams.*;
|
||||
@@ -1,22 +1,14 @@
|
||||
package mindustry.io.versions;
|
||||
|
||||
import mindustry.io.*;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
/** This version only writes entities, no entity ID mappings. */
|
||||
public class Save4 extends SaveVersion{
|
||||
/** This version only reads entities, no entity ID mappings. */
|
||||
public class Save4 extends LegacySaveVersion2{
|
||||
|
||||
public Save4(){
|
||||
super(4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeEntities(DataOutput stream) throws IOException{
|
||||
writeTeamBlocks(stream);
|
||||
writeWorldEntities(stream);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readEntities(DataInput stream) throws IOException{
|
||||
readTeamBlocks(stream);
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package mindustry.io.versions;
|
||||
|
||||
import mindustry.io.*;
|
||||
|
||||
public class Save5 extends SaveVersion{
|
||||
/** Uses the legacy readWorldEntities function without entity IDs. */
|
||||
public class Save5 extends LegacySaveVersion2{
|
||||
|
||||
public Save5(){
|
||||
super(5);
|
||||
|
||||
10
core/src/mindustry/io/versions/Save6.java
Normal file
10
core/src/mindustry/io/versions/Save6.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package mindustry.io.versions;
|
||||
|
||||
import mindustry.io.*;
|
||||
|
||||
public class Save6 extends SaveVersion{
|
||||
|
||||
public Save6(){
|
||||
super(6);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user