Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 55 additions & 17 deletions blocks/src/mmc/type/Recipe.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,20 @@
import static mindustry.Vars.state;

public class Recipe{
public static Recipe empty = with(null, -1);
public static Recipe empty = with((ItemStack) null, -1);
public ItemStack outputItem;
public LiquidStack outputLiquid;
public int outputLiquidDirection = -1;
public ItemStack[] consumeItems;
public LiquidStack[] consumeLiquids;

public float produceTime;

public Recipe(){
consumeItems = ItemStack.empty;
consumeLiquids = LiquidStack.empty;

}

/** Item + Liquid -> Item */
public static Recipe with(ItemStack outputItem, ItemStack[] consumeItems, LiquidStack[] consumeLiquids, float produceTime){
Recipe recipe = new Recipe();
recipe.output(outputItem, null);
Expand All @@ -30,22 +29,61 @@ public static Recipe with(ItemStack outputItem, ItemStack[] consumeItems, Liquid
recipe.check();
return recipe;
}

/** Liquid -> Item */
public static Recipe with(ItemStack outputItem, LiquidStack[] consumeLiquids, float produceTime){
return with(outputItem, ItemStack.empty, consumeLiquids, produceTime);
}

/** Item -> Item */
public static Recipe with(ItemStack outputItem, ItemStack[] consumeItems, float produceTime){
return with(outputItem, consumeItems, LiquidStack.empty, produceTime);
}
/** Nothing -> Item */
public static Recipe with(ItemStack outputItem, float produceTime){
return with(outputItem, LiquidStack.empty, produceTime);
}

public static Recipe with(ItemStack outputItem, ItemStack[] consumeItems, float produceTime){
return with(outputItem, consumeItems, LiquidStack.empty, produceTime);
/** Item + Liquid -> Liquid */
public static Recipe with(LiquidStack outputLiquid, ItemStack[] consumeItems, LiquidStack[] consumeLiquids, float produceTime){
Recipe recipe = new Recipe();
recipe.output(null, outputLiquid);
recipe.consume(consumeItems, consumeLiquids);
recipe.produceTime = produceTime;
recipe.check();
return recipe;
}

public static Recipe with(){
return new Recipe();
/** Liquid -> Liquid */
public static Recipe with(LiquidStack outputLiquid, LiquidStack[] consumeLiquids, float produceTime){
return with(outputLiquid, ItemStack.empty, consumeLiquids, produceTime);
}
/** Item -> Liquid */
public static Recipe with(LiquidStack outputLiquid, ItemStack[] consumeItems, float produceTime){
return with(outputLiquid, consumeItems, LiquidStack.empty, produceTime);
}
/** Nothing -> Liquid */
public static Recipe with(LiquidStack outputLiquid, float produceTime){
return with(outputLiquid, LiquidStack.empty, produceTime);
}
/** Item + Liquid -> Item + Liquid */
public static Recipe with(ItemStack outputItem, LiquidStack outputLiquid, ItemStack[] consumeItems, LiquidStack[] consumeLiquids, float produceTime){
Recipe recipe = new Recipe();
recipe.output(outputItem, outputLiquid);
recipe.consume(consumeItems, consumeLiquids);
recipe.produceTime = produceTime;
recipe.check();
return recipe;
}
/** Liquid -> Item + Liquid */
public static Recipe with(ItemStack outputItem, LiquidStack outputLiquid, LiquidStack[] consumeLiquids, float produceTime){
return with(outputItem, outputLiquid, ItemStack.empty, consumeLiquids, produceTime);
}
/** Item -> Item + Liquid */
public static Recipe with(ItemStack outputItem, LiquidStack outputLiquid, ItemStack[] consumeItems, float produceTime){
return with(outputItem, outputLiquid, consumeItems, LiquidStack.empty, produceTime);
}
/** Nothing -> Item + Liquid */
public static Recipe with(ItemStack outputItem, LiquidStack outputLiquid, float produceTime){
return with(outputItem, outputLiquid, ItemStack.empty, LiquidStack.empty, produceTime);
}


public UnlockableContent mainContent(){
return outputItem == null ? outputLiquid == null ? null : outputLiquid.liquid : outputItem.item;
Expand Down Expand Up @@ -76,20 +114,20 @@ public Recipe outputLiquidDirection(int outputLiquidDirection){
}

private void check(){
// checkItems();
// checkLiquids();
//checkItems();
//checkLiquids();
}

public boolean unlockedNow(){
for(ItemStack stack : consumeItems){
for (ItemStack stack : consumeItems){
Item item = stack.item;
if(state.rules.hiddenBuildItems.contains(item) || item.isHidden() || !item.unlockedNow()){
if (state.rules.hiddenBuildItems.contains(item) || item.isHidden() || !item.unlockedNow()){
return false;
}
}
for(LiquidStack stack : consumeLiquids){
for (LiquidStack stack : consumeLiquids){
Liquid liquid = stack.liquid;
if(liquid.isHidden() || !liquid.unlockedNow()){
if (liquid.isHidden() || !liquid.unlockedNow()){
return false;
}
}
Expand Down
20 changes: 12 additions & 8 deletions blocks/src/mmc/world/blocks/production/MultiCrafter.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ public class MultiCrafter extends ModBlock{
public float extraStorageItem = 1;
public int[] itemsCapacities = {};
public float[] liquidsCapacities = {};
/** Display % on liquid bar. */
public boolean percent = true;

public MultiCrafter(String name){
super(name);
Expand Down Expand Up @@ -268,10 +270,12 @@ public void setBars(){
}));
}
return new MultiBar(() -> {
String text = Core.bundle.get("bar.liquids");
if(build.liquids == null)
return text;
return text + " " + Mathf.round((build.countNowLiquid() / build.countRequiredLiquid() * 100f), 0.1f) + "%";
String text = build.liquids().current().localizedName;
if(percent){
if(build.liquids == null)
return text;
return text + " " + Mathf.round((build.countNowLiquid() / build.countRequiredLiquid() * 100f), 0.1f) + "%";
}else return text;
}, barParts);
});
}
Expand All @@ -298,11 +302,11 @@ public void setBars(){
}
}
}

//this duplicates bar...
//nothing was added, so it's safe to add a dynamic liquid bar (probably?)
if(!added){
addLiquidBar(build -> build.liquids.current());
}
//if(!added){
// addLiquidBar(build -> build.liquids.current());
//}
}
}

Expand Down
97 changes: 41 additions & 56 deletions blocks/src/mmc/world/meta/RecipeListValue.java
Original file line number Diff line number Diff line change
@@ -1,69 +1,54 @@
package mmc.world.meta;

import arc.Core;
import arc.graphics.g2d.TextureRegion;
import arc.scene.ui.layout.Table;
import arc.util.Strings;
import mindustry.ctype.UnlockableContent;
import mindustry.gen.Tex;
import mindustry.type.ItemStack;
import mindustry.ui.ItemImage;
import mindustry.world.meta.StatUnit;
import mindustry.world.meta.StatValue;
import mindustry.world.meta.StatValues;
import mmc.type.Recipe;
import mmc.world.meta.values.LiquidListValue;

public class RecipeListValue implements StatValue {
import arc.*;
import arc.graphics.*;
import arc.scene.style.*;
import arc.scene.ui.Button.*;
import arc.scene.ui.layout.*;
import mindustry.graphics.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.world.meta.*;
import mmc.type.*;

public class RecipeListValue implements StatValue{
private final Recipe[] recipes;

public RecipeListValue(Recipe... recipes) {
private final Drawable style = Core.scene.getStyle(ButtonStyle.class).up;
public RecipeListValue(Recipe... recipes){
this.recipes = recipes;
}

@Override
public void display(Table table) {
public void display(Table table){
table.row();
for (Recipe recipe : recipes) {
if (recipe.outputItem != null) {
table.add(new ItemImage(new ItemStack(recipe.outputItem.item,recipe.outputItem.amount))).size(24.0F).padRight(4.0F).right().top();
// table.image(icon(recipe.outputItem.item)).size(24.0F).padRight(4.0F).right().top();
table.add(" "+recipe.outputItem.item.localizedName).padRight(10.0F).left().top();
}
if (recipe.outputLiquid != null) {
StatValues.liquid(recipe.outputLiquid.liquid,recipe.outputLiquid.amount,true).display(table);

// table.image(icon(recipe.outputLiquid.liquid)).size(24.0F).padRight(4.0F).right().top();
// table.add(recipe.outputLiquid.liquid.localizedName).padRight(10.0F).left().top();
}

(table.table((bt) -> {
bt.left().defaults().padRight(3.0F).left();
if (recipe.consumeItems.length > 0) {
StatValues.items(true, recipe.consumeItems).display(bt.table().get());
if (recipe.consumeLiquids.length > 0) bt.row();
for(Recipe recipe : recipes){
table.table(style, tab -> {
if(recipe.consumeItems.length > 0 || recipe.consumeLiquids.length > 0) tab.add(Stat.input.localized()).color(Pal.accent).expandX().left().row();
if(recipe.consumeItems.length > 0){
tab.table(row -> {
for(ItemStack itemIn : recipe.consumeItems){
row.add(new ItemDisplay(itemIn.item, itemIn.amount, true)).left();
if(recipe.consumeItems.length > 1) row.row();
}
}).left().row();
}

if (recipe.consumeLiquids.length > 0) {
// StatValues()
new LiquidListValue(true, recipe.consumeLiquids).display(bt.table().get());
bt.row();
if(recipe.consumeLiquids.length > 0){
tab.table(row -> {
for(LiquidStack liquidIn : recipe.consumeLiquids){
row.add(new LiquidDisplay(liquidIn.liquid, liquidIn.amount, false)).left();
if(recipe.consumeLiquids.length > 1) row.row();
}
}).left().row();
}
bt.add(Strings.format("[lightgray]@: [white]", Core.bundle.get("stat.productiontime"), recipe.produceTime));
StatValues.number(recipe.produceTime/ 60.0F, StatUnit.seconds).display(bt);

}).padTop(-9.0F).left().get()).background(Tex.underline);
table.row();
if(recipe.outputItem != null || recipe.outputLiquid != null) tab.add(Stat.output.localized()).color(Pal.accent).expandX().left().row();
if(recipe.outputItem != null) tab.table(row -> row.add(new ItemDisplay(recipe.outputItem.item, recipe.outputItem.amount, true))).left().row();
if(recipe.outputLiquid != null) tab.table(row -> row.add(new LiquidDisplay(recipe.outputLiquid.liquid, recipe.outputLiquid.amount, false))).left().row();
tab.table(row -> {
row.add(Stat.productionTime.localized()).padRight(4f).color(Color.lightGray);
StatValues.number(recipe.produceTime / 60f, StatUnit.seconds).display(row);
}).left().row();
}).color(Color.lightGray).left().growX();
table.add().size(18f).row();
}

}

void sep(Table table, String text) {
table.row();
table.add(text);
}

<T extends UnlockableContent> TextureRegion icon(T t) {
return t.uiIcon;
}
}