Cleaned json code and added sprite variants

This commit is contained in:
2026-04-03 00:14:58 -03:00
parent 458d30f107
commit fee4237e91
13 changed files with 76 additions and 28 deletions

View File

@@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.utils.Json;
import io.github.eldek0.asset.group.*;
import io.github.eldek0.config.FrameRange;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -61,6 +62,7 @@ public class GameAssetManager {
/** Queue all in-game assets for async loading. Call update() each frame until done. */
public void loadGameAssets() {
json.setIgnoreUnknownFields(true);
json.addClassTag("FrameRange", FrameRange.class);
monitorData = load("monitor.json", MonitorAssets.Data.class);
officeData = load("office.json", OfficeAssets.Data.class);
@@ -185,6 +187,11 @@ public class GameAssetManager {
// =========================================================
public float getProgress() { return manager.getProgress(); }
public void finishLoading(){ manager.finishLoading(); fetchAll(); }
public void dispose() { manager.dispose(); }
public void finishLoading(){
manager.finishLoading();
fetchAll();
}
public void dispose(){
manager.dispose();
}
}

View File

@@ -8,23 +8,23 @@ public abstract class AssetBase {
public abstract static class Data {}
protected void queueRange(AssetManager m, FrameRange r) {
for (int i = r.start; i <= r.end; i++) m.load(r.base + i + ".png", Texture.class);
for (int i = r.start; i <= r.end; i++) m.load(r.path(i), Texture.class);
}
protected Texture[] fetchRange(AssetManager m, FrameRange r) {
Texture[] arr = new Texture[r.end - r.start + 1];
for (int i = r.start; i <= r.end; i++)
arr[i - r.start] = m.get(r.base + i + ".png", Texture.class);
arr[i - r.start] = m.get(r.path(i), Texture.class);
return arr;
}
protected void disposeRange(AssetManager m, FrameRange r) {
for (int i = r.start; i <= r.end; i++) m.unload(r.base + i + ".png");
for (int i = r.start; i <= r.end; i++) m.unload(r.path(i));
}
protected boolean isRangeLoaded(AssetManager m, FrameRange r) {
for (int i = r.start; i <= r.end; i++)
if (!m.isLoaded(r.base + i + ".png")) return false;
if (!m.isLoaded(r.path(i))) return false;
return true;
}
}

View File

@@ -25,7 +25,7 @@ public class BatteryAssets extends AssetBase implements AssetBundle<BatteryAsset
public void queue(AssetManager manager, Data data) {
manager.load(data.flashlightLabel, Texture.class);
for (int i = data.stages.start; i <= data.stages.end; i++)
manager.load(data.stages.base + i + ".png", Texture.class);
manager.load(data.stages.path(i), Texture.class);
}
@Override
@@ -38,14 +38,14 @@ public class BatteryAssets extends AssetBase implements AssetBundle<BatteryAsset
public void dispose(AssetManager manager, Data data) {
manager.unload(data.flashlightLabel);
for (int i = data.stages.start; i <= data.stages.end; i++)
manager.unload(data.stages.base + i + ".png");
manager.unload(data.stages.path(i));
}
@Override
public boolean isLoaded(AssetManager manager, Data data) {
if (!manager.isLoaded(data.flashlightLabel)) return false;
for (int i = data.stages.start; i <= data.stages.end; i++)
if (!manager.isLoaded(data.stages.base + i + ".png")) return false;
if (!manager.isLoaded(data.stages.path(i))) return false;
return true;
}

View File

@@ -18,7 +18,7 @@ public class MaskAssets extends AssetBase implements AssetBundle<MaskAssets.Data
public void queue(AssetManager manager, Data data) {
manager.load(data.button, Texture.class);
for (int i = data.sprites.start; i <= data.sprites.end; i++)
manager.load(data.sprites.base + i + ".png", Texture.class);
manager.load(data.sprites.path(i), Texture.class);
}
@Override
@@ -31,14 +31,14 @@ public class MaskAssets extends AssetBase implements AssetBundle<MaskAssets.Data
public void dispose(AssetManager manager, Data data) {
manager.unload(data.button);
for (int i = data.sprites.start; i <= data.sprites.end; i++)
manager.unload(data.sprites.base + i + ".png");
manager.unload(data.sprites.path(i));
}
@Override
public boolean isLoaded(AssetManager manager, Data data) {
if (!manager.isLoaded(data.button)) return false;
for (int i = data.sprites.start; i <= data.sprites.end; i++)
if (!manager.isLoaded(data.sprites.base + i + ".png")) return false;
if (!manager.isLoaded(data.sprites.path(i))) return false;
return true;
}

View File

@@ -18,7 +18,7 @@ public class MonitorAssets extends AssetBase implements AssetBundle<MonitorAsset
public void queue(AssetManager manager, Data data) {
manager.load(data.button, Texture.class);
for (int i = data.sprites.start; i <= data.sprites.end; i++)
manager.load(data.sprites.base + i + ".png", Texture.class);
manager.load(data.sprites.path(i), Texture.class);
}
@Override
@@ -31,14 +31,14 @@ public class MonitorAssets extends AssetBase implements AssetBundle<MonitorAsset
public void dispose(AssetManager manager, Data data) {
manager.unload(data.button);
for (int i = data.sprites.start; i <= data.sprites.end; i++)
manager.unload(data.sprites.base + i + ".png");
manager.unload(data.sprites.path(i));
}
@Override
public boolean isLoaded(AssetManager manager, Data data) {
if (!manager.isLoaded(data.button)) return false;
for (int i = data.sprites.start; i <= data.sprites.end; i++)
if (!manager.isLoaded(data.sprites.base + i + ".png")) return false;
if (!manager.isLoaded(data.sprites.path(i))) return false;
return true;
}

View File

@@ -1,6 +1,24 @@
package io.github.eldek0.config;
import java.util.ArrayList;
import java.util.List;
public class FrameRange {
public String base;
public int start, end;
public String path(int i) {
if (base.contains("{i}")) {
String new_path = base;
return new_path.replace("{i}", String.valueOf(i));
}
return base + i + ".png";
}
public List<String> allPaths() {
List<String> paths = new ArrayList<>();
for (int i = start; i <= end; i++) paths.add(path(i));
return paths;
}
}

View File

@@ -6,8 +6,7 @@ public record SpriteConfig<T extends Enum<T>>(
float y,
String group,
String key,
int frame,
SpriteVariant variant,
boolean active,
boolean fromTop,

View File

@@ -5,8 +5,7 @@ public class SpritePositionData {
public int x, y;
public String group = "null";
public String key = "null";
public int frame = 0;
public SpriteVariant variant = null;
public boolean active = true;
public boolean fromTop = false;

View File

@@ -0,0 +1,6 @@
package io.github.eldek0.config;
public class SpriteVariant {
public String spriteKey;
public int frame = 0;
}

View File

@@ -263,10 +263,14 @@ public class Camera {
public void renderUI(SpriteBatch batch) {
if (!gameScene.hud.isInsideCamera()) return;
for (SpriteConfig<CameraSpriteType> config : layout.getSortedSprites()) {
for (SpriteConfig config : layout.getSortedSprites()) {
if (!config.active()) continue;
Texture texture = assets.resolve(config.group(), config.key(), config.frame());
if (config.group().equals("null") || config.variant() == null){
continue;
}
Texture texture = assets.resolve(config.group(), config.variant().spriteKey, config.variant().frame);
if (config.type() == CameraSpriteType.LABEL) {
texture = getRoomLabel(inCameraRoom);
}

View File

@@ -33,8 +33,7 @@ public class SpriteLayout<T extends Enum<T>> {
raw.x,
raw.y,
raw.group,
raw.key,
raw.frame,
raw.variant,
raw.active,
raw.fromTop,
raw.centerX,