JSON payload stack support

This commit is contained in:
Anuken
2022-08-11 08:43:58 -04:00
parent 3f96799c2e
commit e4c6822cca
3 changed files with 20 additions and 6 deletions

View File

@@ -360,6 +360,15 @@ public class ContentParser{
return (T)fromJson(ItemStack.class, "{item: " + split[0] + ", amount: " + split[1] + "}");
}
//try to parse "payloaditem/amount" syntax
if(type == PayloadStack.class && jsonData.isString() && jsonData.asString().contains("/")){
String[] split = jsonData.asString().split("/");
int number = Strings.parseInt(split[1], 1);
UnlockableContent cont = content.unit(split[0]) == null ? content.block(split[0]) : content.unit(split[0]);
return (T)new PayloadStack(cont == null ? Blocks.router : cont, number);
}
//try to parse "liquid/amount" syntax
if(jsonData.isString() && jsonData.asString().contains("/")){
String[] split = jsonData.asString().split("/");

View File

@@ -679,8 +679,7 @@ public class ResearchDialog extends BaseDialog{
disabledFontColor = Color.gray;
up = buttonOver;
over = buttonDown;
}}, () -> spend(node))
.disabled(i -> !canSpend(node)).growX().height(44f).colspan(3);
}}, () -> spend(node)).disabled(i -> !canSpend(node)).growX().height(44f).colspan(3);
}
});

View File

@@ -10,7 +10,6 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.world.*;
import mindustry.world.blocks.payloads.*;
import mindustry.world.consumers.*;
import mindustry.world.meta.*;
@@ -60,12 +59,19 @@ public class PayloadAmmoTurret extends Turret{
@Override
public void build(Building build, Table table){
MultiReqImage image = new MultiReqImage();
content.blocks().each(i -> filter.get(i) && i.unlockedNow(), content -> image.add(new ReqImage(new Image(content.uiIcon),
() -> build instanceof PayloadTurretBuild it && !it.payloads.isEmpty() && it.currentBlock() == content)));
for(var block : content.blocks()) displayContent(build, image, block);
for(var unit : content.units()) displayContent(build, image, unit);
table.add(image).size(8 * 4);
}
void displayContent(Building build, MultiReqImage image, UnlockableContent content){
if(filter.get(content) && content.unlockedNow()){
image.add(new ReqImage(new Image(content.uiIcon), () -> build instanceof PayloadTurretBuild it && !it.payloads.isEmpty() && it.currentAmmo() == content));
}
}
@Override
public float efficiency(Building build){
//valid when there's any ammo in the turret
@@ -86,7 +92,7 @@ public class PayloadAmmoTurret extends Turret{
public class PayloadTurretBuild extends TurretBuild{
public PayloadSeq payloads = new PayloadSeq();
public UnlockableContent currentBlock(){
public UnlockableContent currentAmmo(){
for(var content : ammoKeys){
if(payloads.contains(content)){
return content;