perf(sprites): Optimized numbers
Now numbers are lazy loaded
This commit is contained in:
parent
1c1230a1d0
commit
ca98fe7fae
@ -1,6 +1,7 @@
|
||||
package cz.jzitnik.game;
|
||||
|
||||
import cz.jzitnik.game.sprites.*;
|
||||
import cz.jzitnik.game.sprites.ui.Number;
|
||||
import cz.jzitnik.tui.Sprite;
|
||||
import cz.jzitnik.tui.SpriteList;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -78,6 +79,7 @@ public class SpriteLoader {
|
||||
BREAKING,
|
||||
HEART,
|
||||
HUNGER,
|
||||
NUMBER,
|
||||
|
||||
// Seeds
|
||||
WHEAT,
|
||||
@ -263,6 +265,7 @@ public class SpriteLoader {
|
||||
SPRITES_MAP.put(SPRITES.BREAKING, new Breaking());
|
||||
SPRITES_MAP.put(SPRITES.HEART, new Heart());
|
||||
SPRITES_MAP.put(SPRITES.HUNGER, new Hunger());
|
||||
SPRITES_MAP.put(SPRITES.NUMBER, new Number());
|
||||
|
||||
// SEEDS
|
||||
SPRITES_MAP.put(SPRITES.WHEAT, new Farmable("dirt.ans", "grass.ans", "sand.ans"));
|
||||
|
@ -50,7 +50,7 @@ public class Furnace implements RightClickHandler, Serializable {
|
||||
? spriteList.getSprite(outputItem.getItem().getFirst().getSprite())
|
||||
.getSprite(outputItem.getItem().getFirst().getSpriteState().get())
|
||||
: spriteList.getSprite(outputItem.getItem().getFirst().getSprite()).getSprite(),
|
||||
Numbers.getNumberSprite(outputItem.getAmount())).split("\n");
|
||||
Numbers.getNumberSprite(outputItem.getAmount(), spriteList)).split("\n");
|
||||
|
||||
for (int j = 0; j < CELL_HEIGHT; j++) {
|
||||
buffer.append("\033[0m").append(" ".repeat(moveLeft));
|
||||
|
@ -173,7 +173,6 @@ public class CustomAnnotationHandler implements CustomPlaceHandler {
|
||||
|
||||
private boolean placeFarmable(Game game, int x, int y) {
|
||||
var blocksBottom = game.getWorld()[y + 1][x];
|
||||
System.out.println("lol");
|
||||
|
||||
if (blocksBottom.stream().noneMatch(block -> block.getBlockId().equals("farmland"))) {
|
||||
return false;
|
||||
|
@ -2,18 +2,23 @@ package cz.jzitnik.game.handlers.place;
|
||||
|
||||
import cz.jzitnik.game.Game;
|
||||
import cz.jzitnik.game.entities.Block;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class DefaultPlaceHandler implements CustomPlaceHandler {
|
||||
@Override
|
||||
public boolean place(Game game, int x, int y) {
|
||||
var blocks = game.getWorld()[y][x];
|
||||
var inventory = game.getInventory();
|
||||
var block = inventory.getItemInHand().get().getBlock().get();
|
||||
|
||||
blocks.add(inventory.getItemInHand().get().getBlock().get());
|
||||
blocks.add(block);
|
||||
blocks.removeAll(blocks.stream().filter(Block::isFlowing).toList());
|
||||
|
||||
inventory.decreaseItemInHand();
|
||||
|
||||
log.info("Block {} was placed at coordinates x:{},y:{}", block.getBlockId(), x, y);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,8 @@
|
||||
package cz.jzitnik.game.sprites;
|
||||
|
||||
import cz.jzitnik.tui.ResourceLoader;
|
||||
import cz.jzitnik.tui.Sprite;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Optional;
|
||||
|
||||
public class Sheep extends Sprite<Sheep.SheepState> {
|
||||
public enum SheepState {
|
||||
|
@ -1,16 +1,34 @@
|
||||
package cz.jzitnik.game.sprites.ui;
|
||||
|
||||
import cz.jzitnik.tui.ResourceLoader;
|
||||
import cz.jzitnik.tui.Sprite;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.HashMap;
|
||||
import java.util.Optional;
|
||||
|
||||
public class Number extends Sprite {
|
||||
@Slf4j
|
||||
public class Number extends Sprite<Number.NumberState> {
|
||||
public enum NumberState {
|
||||
ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE,
|
||||
}
|
||||
|
||||
public Number() {
|
||||
loadResources(new HashMap<>() {
|
||||
{
|
||||
put(NumberState.ZERO, "numbers/0.ans");
|
||||
put(NumberState.ONE, "numbers/1.ans");
|
||||
put(NumberState.TWO, "numbers/2.ans");
|
||||
put(NumberState.THREE, "numbers/3.ans");
|
||||
put(NumberState.FOUR, "numbers/4.ans");
|
||||
put(NumberState.FIVE, "numbers/5.ans");
|
||||
put(NumberState.SIX, "numbers/6.ans");
|
||||
put(NumberState.SEVEN, "numbers/7.ans");
|
||||
put(NumberState.EIGHT, "numbers/8.ans");
|
||||
put(NumberState.NINE, "numbers/9.ans");
|
||||
}
|
||||
}, NumberState.class);
|
||||
}
|
||||
|
||||
public static String fixForHotbar(String str, int place) {
|
||||
var parts = str.split("\n");
|
||||
// Make it 50x25
|
||||
@ -30,27 +48,16 @@ public class Number extends Sprite {
|
||||
private String fix(String x) {
|
||||
return x;
|
||||
// return x.replaceAll("\033\\[38;5;1;48;5;16m", "\033[0m").replaceAll("\033\\[38;5;16;48;5;16m▓", "\033[0m ");
|
||||
// // TODO: Fix issue with sprite size decreasing
|
||||
// TODO: Fix issue with sprite size decreasing
|
||||
}
|
||||
|
||||
public String getSprite() {
|
||||
return fix(Objects.requireNonNull(ResourceLoader.loadResource("breaking/1.ans")));
|
||||
return getSprite(NumberState.ZERO);
|
||||
}
|
||||
|
||||
public String getSprite(Enum key) {
|
||||
return fix(Objects.requireNonNull(ResourceLoader.loadResource(switch (key) {
|
||||
case NumberState.ZERO -> "numbers/0.ans";
|
||||
case NumberState.ONE -> "numbers/1.ans";
|
||||
case NumberState.TWO -> "numbers/2.ans";
|
||||
case NumberState.THREE -> "numbers/3.ans";
|
||||
case NumberState.FOUR -> "numbers/4.ans";
|
||||
case NumberState.FIVE -> "numbers/5.ans";
|
||||
case NumberState.SIX -> "numbers/6.ans";
|
||||
case NumberState.SEVEN -> "numbers/7.ans";
|
||||
case NumberState.EIGHT -> "numbers/8.ans";
|
||||
case NumberState.NINE -> "numbers/9.ans";
|
||||
default -> throw new IllegalStateException("Unexpected value: " + key);
|
||||
})));
|
||||
public String getSprite(NumberState key) {
|
||||
log.debug("{}", key);
|
||||
return fix(getResource(key));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -71,7 +71,7 @@ public class CraftingTable {
|
||||
? spriteList.getSprite(inventoryItem.getItem().getFirst().getSprite())
|
||||
.getSprite(inventoryItem.getItem().getFirst().getSpriteState().get())
|
||||
: spriteList.getSprite(inventoryItem.getItem().getFirst().getSprite()).getSprite(),
|
||||
Numbers.getNumberSprite(inventoryItem.getAmount())).split("\n")).orElse(null);
|
||||
Numbers.getNumberSprite(inventoryItem.getAmount(), spriteList)).split("\n")).orElse(null);
|
||||
|
||||
for (int i = 0; i < ROW_AMOUNT; i++) {
|
||||
for (int j = 0; j < CELL_HEIGHT; j++) {
|
||||
|
@ -261,14 +261,14 @@ public class Inventory extends AutoTransientSupport {
|
||||
.get())
|
||||
: spriteList.getSprite(item.getItem().getFirst().getSprite())
|
||||
.getSprite(),
|
||||
Numbers.getNumberSprite(item.getAmount())));
|
||||
Numbers.getNumberSprite(item.getAmount(), spriteList)));
|
||||
} else {
|
||||
sprite = SpriteCombiner.combineTwoSprites(
|
||||
item.getItem().getFirst().getSpriteState().isPresent()
|
||||
? spriteList.getSprite(item.getItem().getFirst().getSprite())
|
||||
.getSprite(item.getItem().getFirst().getSpriteState().get())
|
||||
: spriteList.getSprite(item.getItem().getFirst().getSprite()).getSprite(),
|
||||
Numbers.getNumberSprite(item.getAmount()));
|
||||
Numbers.getNumberSprite(item.getAmount(), spriteList));
|
||||
}
|
||||
|
||||
if (item.getItem().getFirst().getDurability() == 0
|
||||
|
@ -58,7 +58,7 @@ public class SmallCraftingTable {
|
||||
? spriteList.getSprite(inventoryItem.getItem().getFirst().getSprite())
|
||||
.getSprite(inventoryItem.getItem().getFirst().getSpriteState().get())
|
||||
: spriteList.getSprite(inventoryItem.getItem().getFirst().getSprite()).getSprite(),
|
||||
Numbers.getNumberSprite(inventoryItem.getAmount())).split("\n")).orElse(null);
|
||||
Numbers.getNumberSprite(inventoryItem.getAmount(), spriteList)).split("\n")).orElse(null);
|
||||
|
||||
int counter = 0;
|
||||
for (int i = 0; i < ROW_AMOUNT; i++) {
|
||||
|
@ -9,7 +9,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@Slf4j
|
||||
public class ResourceLoader {
|
||||
public static String loadResource(String fileName) {
|
||||
log.debug("Loading resource: {}", "textures/" + fileName);
|
||||
log.info("Loading resource: {}", "textures/" + fileName);
|
||||
try (InputStream inputStream = ResourceLoader.class.getClassLoader()
|
||||
.getResourceAsStream("textures/" + fileName)) {
|
||||
if (inputStream == null) {
|
||||
|
@ -1,6 +1,8 @@
|
||||
package cz.jzitnik.tui.utils;
|
||||
|
||||
import cz.jzitnik.game.SpriteLoader;
|
||||
import cz.jzitnik.game.sprites.ui.Number;
|
||||
import cz.jzitnik.tui.SpriteList;
|
||||
|
||||
public class Numbers {
|
||||
private static Number.NumberState getNumberState(int digit) {
|
||||
@ -19,7 +21,7 @@ public class Numbers {
|
||||
};
|
||||
}
|
||||
|
||||
public static String getNumberSprite(int number) {
|
||||
public static String getNumberSprite(int number, SpriteList spriteList) {
|
||||
if (number == 1) {
|
||||
StringBuilder sprite = new StringBuilder();
|
||||
for (int i = 0; i < 25; i++) {
|
||||
@ -29,7 +31,7 @@ public class Numbers {
|
||||
return sprite.toString();
|
||||
}
|
||||
|
||||
Number nm = new Number();
|
||||
var nm = spriteList.getSprite(SpriteLoader.SPRITES.NUMBER);
|
||||
if (number <= 9) {
|
||||
Number.NumberState numberState = getNumberState(number);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user