Better IO

This commit is contained in:
Anuken
2020-02-13 22:11:59 -05:00
parent e3621f44da
commit 09c57c32d6
54 changed files with 568 additions and 619 deletions

View File

@@ -1,10 +1,9 @@
package mindustry.world.modules;
import java.io.*;
import arc.util.io.*;
/** A class that represents compartmentalized tile entity state. */
public abstract class BlockModule{
public abstract void write(DataOutput stream) throws IOException;
public abstract void read(DataInput stream) throws IOException;
public abstract void write(Writes write);
public abstract void read(Reads read);
}

View File

@@ -1,10 +1,9 @@
package mindustry.world.modules;
import arc.util.io.*;
import mindustry.gen.*;
import mindustry.world.consumers.Consume;
import java.io.*;
public class ConsumeModule extends BlockModule{
private boolean valid, optionalValid;
private final Tilec entity;
@@ -59,12 +58,12 @@ public class ConsumeModule extends BlockModule{
}
@Override
public void write(DataOutput stream) throws IOException{
stream.writeBoolean(valid);
public void write(Writes write){
write.bool(valid);
}
@Override
public void read(DataInput stream) throws IOException{
valid = stream.readBoolean();
public void read(Reads read){
valid = read.bool();
}
}

View File

@@ -1,9 +1,9 @@
package mindustry.world.modules;
import arc.util.io.*;
import mindustry.type.Item;
import mindustry.type.ItemStack;
import java.io.*;
import java.util.Arrays;
import static mindustry.Vars.content;
@@ -121,32 +121,32 @@ public class ItemModule extends BlockModule{
}
@Override
public void write(DataOutput stream) throws IOException{
public void write(Writes write){
byte amount = 0;
for(int item : items){
if(item > 0) amount++;
}
stream.writeByte(amount); //amount of items
write.b(amount); //amount of items
for(int i = 0; i < items.length; i++){
if(items[i] > 0){
stream.writeByte(i); //item ID
stream.writeInt(items[i]); //item amount
write.b(i); //item ID
write.i(items[i]); //item amount
}
}
}
@Override
public void read(DataInput stream) throws IOException{
public void read(Reads read){
//just in case, reset items
Arrays.fill(items, 0);
byte count = stream.readByte();
byte count = read.b();
total = 0;
for(int j = 0; j < count; j++){
int itemid = stream.readByte();
int itemamount = stream.readInt();
int itemid = read.b();
int itemamount = read.i();
items[content.item(itemid).id] = itemamount;
total += itemamount;
}

View File

@@ -1,9 +1,9 @@
package mindustry.world.modules;
import arc.math.*;
import arc.util.io.*;
import mindustry.type.Liquid;
import java.io.*;
import java.util.Arrays;
import static mindustry.Vars.content;
@@ -83,31 +83,31 @@ public class LiquidModule extends BlockModule{
}
@Override
public void write(DataOutput stream) throws IOException{
public void write(Writes write){
byte amount = 0;
for(float liquid : liquids){
if(liquid > 0) amount++;
}
stream.writeByte(amount); //amount of liquids
write.b(amount); //amount of liquids
for(int i = 0; i < liquids.length; i++){
if(liquids[i] > 0){
stream.writeByte(i); //liquid ID
stream.writeFloat(liquids[i]); //item amount
write.b(i); //liquid ID
write.f(liquids[i]); //item amount
}
}
}
@Override
public void read(DataInput stream) throws IOException{
public void read(Reads read){
Arrays.fill(liquids, 0);
total = 0f;
byte count = stream.readByte();
byte count = read.b();
for(int j = 0; j < count; j++){
int liquidid = stream.readByte();
float amount = stream.readFloat();
int liquidid = read.b();
float amount = read.f();
liquids[liquidid] = amount;
if(amount > 0){
current = content.liquid(liquidid);

View File

@@ -1,12 +1,9 @@
package mindustry.world.modules;
import arc.struct.IntArray;
import arc.util.io.*;
import mindustry.world.blocks.power.PowerGraph;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
public class PowerModule extends BlockModule{
/**
* In case of unbuffered consumers, this is the percentage (1.0f = 100%) of the demanded power which can be supplied.
@@ -18,22 +15,22 @@ public class PowerModule extends BlockModule{
public IntArray links = new IntArray();
@Override
public void write(DataOutput stream) throws IOException{
stream.writeShort(links.size);
public void write(Writes write){
write.s(links.size);
for(int i = 0; i < links.size; i++){
stream.writeInt(links.get(i));
write.i(links.get(i));
}
stream.writeFloat(status);
write.f(status);
}
@Override
public void read(DataInput stream) throws IOException{
public void read(Reads read){
links.clear();
short amount = stream.readShort();
short amount = read.s();
for(int i = 0; i < amount; i++){
links.add(stream.readInt());
links.add(read.i());
}
status = stream.readFloat();
status = read.f();
if(Float.isNaN(status) || Float.isInfinite(status)) status = 0f;
}
}