forked from jzitnik/twodcraft
111 lines
4.2 KiB
Java
111 lines
4.2 KiB
Java
package cz.jzitnik.game.ui;
|
|
|
|
import cz.jzitnik.game.crafting.CraftingRecipe;
|
|
import cz.jzitnik.game.crafting.CraftingRecipeList;
|
|
import cz.jzitnik.game.entities.items.InventoryItem;
|
|
import cz.jzitnik.tui.utils.SpriteCombiner;
|
|
import cz.jzitnik.tui.SpriteList;
|
|
import cz.jzitnik.tui.utils.Numbers;
|
|
import lombok.Getter;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
|
|
public class SmallCraftingTable {
|
|
public static final int ROW_AMOUNT = 2;
|
|
public static final int COLUMN_AMOUNT = 2;
|
|
|
|
private Inventory inventory;
|
|
@Getter
|
|
private InventoryItem[] items = new InventoryItem[4];
|
|
|
|
public void pickup() {
|
|
Optional<CraftingRecipe> recipe = CraftingRecipeList.getRecipe(Arrays.stream(items)
|
|
.map(item -> item == null ? null : item.getItem().getFirst().getId()).toArray(String[]::new));
|
|
|
|
if (recipe.isPresent()) {
|
|
InventoryItem item = recipe.get().getItemSupplier().get();
|
|
inventory.addItem(item);
|
|
|
|
for (int i = 0; i < items.length; i++) {
|
|
InventoryItem it = items[i];
|
|
if (it == null) {
|
|
continue;
|
|
}
|
|
|
|
if (it.getAmount() == 1) {
|
|
items[i] = null;
|
|
} else {
|
|
it.decrease();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public StringBuilder render(SpriteList spriteList) {
|
|
var buf = new StringBuilder();
|
|
|
|
List<String> sprites = inventory.getSprites(items, spriteList, inventory.getSelectedItemInv() - 29);
|
|
|
|
Optional<CraftingRecipe> recipe = CraftingRecipeList.getRecipe(Arrays.stream(items)
|
|
.map(item -> item == null ? null : item.getItem().getFirst().getId()).toArray(String[]::new));
|
|
|
|
Optional<InventoryItem> craftedItem = recipe.map(craftingRecipe -> craftingRecipe.getItemSupplier().get());
|
|
|
|
String[] craftedSprite = craftedItem.map(inventoryItem -> SpriteCombiner.combineTwoSprites(
|
|
inventoryItem.getItem().getFirst().getSpriteState().isPresent()
|
|
? spriteList.getSprite(inventoryItem.getItem().getFirst().getSprite())
|
|
.getSprite(inventoryItem.getItem().getFirst().getSpriteState().get())
|
|
: spriteList.getSprite(inventoryItem.getItem().getFirst().getSprite()).getSprite(),
|
|
Numbers.getNumberSprite(inventoryItem.getAmount(), spriteList)).split("\n")).orElse(null);
|
|
|
|
int counter = 0;
|
|
for (int i = 0; i < ROW_AMOUNT; i++) {
|
|
for (int j = 0; j < 26; j++) {
|
|
if (j == 25) {
|
|
buf.append("\033[38;5;231;48;5;231m▓".repeat(106));
|
|
} else {
|
|
for (int k = 0; k < COLUMN_AMOUNT; k++) {
|
|
buf.append("\033[38;5;231;48;5;231m▓".repeat(2));
|
|
String sprite = sprites.get(i * 2 + k);
|
|
if (sprite == null) {
|
|
buf.append("\033[0m ".repeat(50));
|
|
} else {
|
|
String[] spriteLines = sprite.split("\n");
|
|
buf.append(spriteLines[j]);
|
|
}
|
|
}
|
|
buf.append("\033[38;5;231;48;5;231m▓".repeat(2));
|
|
}
|
|
|
|
if (i == 0 && j > 10 || i == 1 && j < 12) {
|
|
buf.append("\033[0m").append(" ".repeat(7));
|
|
if (i == 0 && j - 11 == 0 || i == 1 && j == 11) {
|
|
buf.append("\033[38;5;231;48;5;231m▓".repeat(54));
|
|
} else {
|
|
buf.append("\033[38;5;231;48;5;231m▓".repeat(2));
|
|
if (craftedItem.isEmpty()) {
|
|
buf.append("\033[0m ".repeat(50));
|
|
} else {
|
|
buf.append(craftedSprite[counter]);
|
|
counter++;
|
|
}
|
|
buf.append("\033[38;5;231;48;5;231m▓".repeat(2));
|
|
}
|
|
}
|
|
|
|
buf.append("\n");
|
|
}
|
|
}
|
|
|
|
buf.append("\033[0m");
|
|
|
|
return buf;
|
|
}
|
|
|
|
public SmallCraftingTable(Inventory inventory) {
|
|
this.inventory = inventory;
|
|
}
|
|
}
|