Merge branch '16bititemtest'
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
Reference in New Issue
Block a user