Merge branch '16bititemtest'

This commit is contained in:
Anuken
2020-08-27 11:12:44 -04:00
10 changed files with 62 additions and 35 deletions

View File

@@ -167,10 +167,6 @@ public class ContentLoader{
} }
public void handleContent(Content content){ public void handleContent(Content content){
if(content instanceof Item && content.id > 255){
throw new IllegalArgumentException("You may not have more than 255 different items total. Remove some mods.");
}
this.lastAdded = content; this.lastAdded = content;
contentMap[content.getContentType().ordinal()].add(content); contentMap[content.getContentType().ordinal()].add(content);
} }

View File

@@ -135,8 +135,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
public final void writeBase(Writes write){ public final void writeBase(Writes write){
write.f(health); write.f(health);
write.b(rotation); write.b(rotation | 0b10000000);
write.b(team.id); write.b(team.id);
write.b(0); //extra padding for later use
if(items != null) items.write(write); if(items != null) items.write(write);
if(power != null) power.write(write); if(power != null) power.write(write);
if(liquids != null) liquids.write(write); if(liquids != null) liquids.write(write);
@@ -145,12 +146,20 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
public final void readBase(Reads read){ public final void readBase(Reads read){
health = read.f(); health = read.f();
rotation = read.b(); byte rot = read.b();
team = Team.get(read.b()); team = Team.get(read.b());
if(items != null) items.read(read);
if(power != null) power.read(read); rotation = rot & 0b01111111;
if(liquids != null) liquids.read(read); boolean legacy = true;
if(cons != null) cons.read(read); if((rot & 0b10000000) != 0){
read.b(); //padding
legacy = false;
}
if(items != null) items.read(read, legacy);
if(power != null) power.read(read, legacy);
if(liquids != null) liquids.read(read, legacy);
if(cons != null) cons.read(read, legacy);
} }
public void writeAll(Writes write){ public void writeAll(Writes write){

View File

@@ -74,10 +74,10 @@ public abstract class LegacySaveVersion extends SaveVersion{
tile.setTeam(Team.get(team)); tile.setTeam(Team.get(team));
tile.build.rotation = rotation; tile.build.rotation = rotation;
if(tile.build.items != null) tile.build.items.read(Reads.get(stream)); if(tile.build.items != null) tile.build.items.read(Reads.get(stream), true);
if(tile.build.power != null) tile.build.power.read(Reads.get(stream)); if(tile.build.power != null) tile.build.power.read(Reads.get(stream), true);
if(tile.build.liquids != null) tile.build.liquids.read(Reads.get(stream)); if(tile.build.liquids != null) tile.build.liquids.read(Reads.get(stream), true);
if(tile.build.cons != null) tile.build.cons.read(Reads.get(stream)); if(tile.build.cons != null) tile.build.cons.read(Reads.get(stream), true);
//read only from subclasses! //read only from subclasses!
tile.build.read(Reads.get(in), version); tile.build.read(Reads.get(in), version);

View File

@@ -138,13 +138,18 @@ public class ItemTurret extends Turret{
return ammoTypes.get(item) != null && totalAmmo + ammoTypes.get(item).ammoMultiplier <= maxAmmo; return ammoTypes.get(item) != null && totalAmmo + ammoTypes.get(item).ammoMultiplier <= maxAmmo;
} }
@Override
public byte version(){
return 2;
}
@Override @Override
public void write(Writes write){ public void write(Writes write){
super.write(write); super.write(write);
write.b(ammo.size); write.b(ammo.size);
for(AmmoEntry entry : ammo){ for(AmmoEntry entry : ammo){
ItemEntry i = (ItemEntry)entry; ItemEntry i = (ItemEntry)entry;
write.b(i.item.id); write.s(i.item.id);
write.s(i.amount); write.s(i.amount);
} }
} }
@@ -154,7 +159,7 @@ public class ItemTurret extends Turret{
super.read(read, revision); super.read(read, revision);
int amount = read.ub(); int amount = read.ub();
for(int i = 0; i < amount; i++){ for(int i = 0; i < amount; i++){
Item item = Vars.content.item(read.ub()); Item item = Vars.content.item(revision < 2 ? read.ub() : read.s());
short a = read.s(); short a = read.s();
totalAmmo += a; totalAmmo += a;
ammo.add(new ItemEntry(item, a)); ammo.add(new ItemEntry(item, a));

View File

@@ -436,7 +436,7 @@ public abstract class Turret extends Block{
public void read(Reads read, byte revision){ public void read(Reads read, byte revision){
super.read(read, revision); super.read(read, revision);
if(revision == 1){ if(revision >= 1){
reload = read.f(); reload = read.f();
rotation = read.f(); rotation = read.f();
} }

View File

@@ -87,16 +87,21 @@ public class LiquidSource extends Block{
return source; return source;
} }
@Override
public byte version(){
return 1;
}
@Override @Override
public void write(Writes write){ public void write(Writes write){
super.write(write); super.write(write);
write.b(source == null ? -1 : source.id); write.s(source == null ? -1 : source.id);
} }
@Override @Override
public void read(Reads read, byte revision){ public void read(Reads read, byte revision){
super.read(read, revision); super.read(read, revision);
byte id = read.b(); int id = revision == 1 ? read.s() : read.b();
source = id == -1 ? null : content.liquid(id); source = id == -1 ? null : content.liquid(id);
} }
} }

View File

@@ -107,16 +107,21 @@ public class Unloader extends Block{
return sortItem; return sortItem;
} }
@Override
public byte version(){
return 1;
}
@Override @Override
public void write(Writes write){ public void write(Writes write){
super.write(write); super.write(write);
write.b(sortItem == null ? -1 : sortItem.id); write.s(sortItem == null ? -1 : sortItem.id);
} }
@Override @Override
public void read(Reads read, byte revision){ public void read(Reads read, byte revision){
super.read(read, revision); super.read(read, revision);
byte id = read.b(); int id = revision == 1 ? read.s() : read.b();
sortItem = id == -1 ? null : content.items().get(id); sortItem = id == -1 ? null : content.items().get(id);
} }
} }

View File

@@ -5,5 +5,12 @@ import arc.util.io.*;
/** A class that represents compartmentalized tile entity state. */ /** A class that represents compartmentalized tile entity state. */
public abstract class BlockModule{ public abstract class BlockModule{
public abstract void write(Writes write); public abstract void write(Writes write);
public abstract void read(Reads read);
public void read(Reads read, boolean legacy){
read(read);
}
public void read(Reads read){
read(read, false);
}
} }

View File

@@ -276,30 +276,30 @@ public class ItemModule extends BlockModule{
@Override @Override
public void write(Writes write){ public void write(Writes write){
byte amount = 0; int amount = 0;
for(int item : items){ for(int item : items){
if(item > 0) amount++; if(item > 0) amount++;
} }
write.b(amount); //amount of items write.s(amount); //amount of items
for(int i = 0; i < items.length; i++){ for(int i = 0; i < items.length; i++){
if(items[i] > 0){ if(items[i] > 0){
write.b(i); //item ID write.s(i); //item ID
write.i(items[i]); //item amount write.i(items[i]); //item amount
} }
} }
} }
@Override @Override
public void read(Reads read){ public void read(Reads read, boolean legacy){
//just in case, reset items //just in case, reset items
Arrays.fill(items, 0); Arrays.fill(items, 0);
int count = read.ub(); int count = legacy ? read.ub() : read.s();
total = 0; total = 0;
for(int j = 0; j < count; j++){ for(int j = 0; j < count; j++){
int itemid = read.ub(); int itemid = legacy ? read.ub() : read.s();
int itemamount = read.i(); int itemamount = read.i();
items[content.item(itemid).id] = itemamount; items[content.item(itemid).id] = itemamount;
total += itemamount; total += itemamount;

View File

@@ -114,29 +114,29 @@ public class LiquidModule extends BlockModule{
@Override @Override
public void write(Writes write){ public void write(Writes write){
byte amount = 0; int amount = 0;
for(float liquid : liquids){ for(float liquid : liquids){
if(liquid > 0) amount++; if(liquid > 0) amount++;
} }
write.b(amount); //amount of liquids write.s(amount); //amount of liquids
for(int i = 0; i < liquids.length; i++){ for(int i = 0; i < liquids.length; i++){
if(liquids[i] > 0){ if(liquids[i] > 0){
write.b(i); //liquid ID write.s(i); //liquid ID
write.f(liquids[i]); //item amount write.f(liquids[i]); //liquid amount
} }
} }
} }
@Override @Override
public void read(Reads read){ public void read(Reads read, boolean legacy){
Arrays.fill(liquids, 0); Arrays.fill(liquids, 0);
total = 0f; total = 0f;
int count = read.ub(); int count = legacy ? read.ub() : read.s();
for(int j = 0; j < count; j++){ for(int j = 0; j < count; j++){
int liquidid = read.ub(); int liquidid = legacy ? read.ub() : read.s();
float amount = read.f(); float amount = read.f();
liquids[liquidid] = amount; liquids[liquidid] = amount;
if(amount > 0){ if(amount > 0){