From fee4237e91c6a50fea244c53e1a9ccc12fd2bb31 Mon Sep 17 00:00:00 2001 From: eldek Date: Fri, 3 Apr 2026 00:14:58 -0300 Subject: [PATCH] Cleaned json code and added sprite variants --- assets/data/config/cameras.json | 24 +++++++++++++++---- assets/data/sprites/office.json | 2 +- .../github/eldek0/asset/GameAssetManager.java | 11 +++++++-- .../github/eldek0/asset/group/AssetBase.java | 8 +++---- .../eldek0/asset/group/BatteryAssets.java | 6 ++--- .../github/eldek0/asset/group/MaskAssets.java | 6 ++--- .../eldek0/asset/group/MonitorAssets.java | 6 ++--- .../io/github/eldek0/config/FrameRange.java | 18 ++++++++++++++ .../io/github/eldek0/config/SpriteConfig.java | 3 +-- .../eldek0/config/SpritePositionData.java | 3 +-- .../github/eldek0/config/SpriteVariant.java | 6 +++++ .../java/io/github/eldek0/game/Camera.java | 8 +++++-- .../io/github/eldek0/ui/SpriteLayout.java | 3 +-- 13 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 core/src/main/java/io/github/eldek0/config/SpriteVariant.java diff --git a/assets/data/config/cameras.json b/assets/data/config/cameras.json index 761d108..e6951c1 100644 --- a/assets/data/config/cameras.json +++ b/assets/data/config/cameras.json @@ -11,11 +11,27 @@ "height": 350 }, "sprites": [ - { "type": "BORDER", "group": "cameras", "key": "borderline", "frame": 0, "x": 0, "y": 0, "zIndex": 0 }, - { "type": "MAP", "group": "cameras", "key": "map", "frame": 0, "x": 550, "y": 310, "fromTop": true, "zIndex": 1 }, + { "type": "BORDER", "group": "cameras","variant": { + "spriteKey": "borderline", + "frame": 0 + }, "x": 0, "y": 0, "zIndex": 0 }, + + { "type": "MAP", "group": "cameras", "variant": { + "spriteKey": "map", + "frame": 0 + }, "x": 550, "y": 310, "fromTop": true, "zIndex": 1 }, + { "type": "LABEL", "x": 550, "y": 280, "fromTop": true, "zIndex": 2 }, - { "type": "REC", "group": "cameras", "key": "recordSprite", "frame": 0, "x": 40, "y": 40, "fromTop": true, "zIndex": 3 }, - { "type": "SIGNAL_INTERRUPTED", "group": "cameras", "key": "signalInterrupted", "frame": 0, "x": 0, "y": 80, "fromTop": true, "centerX": true, "zIndex": 10 } + + { "type": "REC", "group": "cameras", "variant": { + "spriteKey": "recordSprite", + "frame": 0 + }, "x": 40, "y": 40, "fromTop": true, "zIndex": 3 }, + + { "type": "SIGNAL_INTERRUPTED", "group": "cameras", "variant": { + "spriteKey": "signalInterrupted", + "frame": 0 + }, "x": 0, "y": 80, "fromTop": true, "centerX": true, "zIndex": 10 } ], "cameras": [ { diff --git a/assets/data/sprites/office.json b/assets/data/sprites/office.json index cdf29e6..fb0c433 100644 --- a/assets/data/sprites/office.json +++ b/assets/data/sprites/office.json @@ -22,7 +22,7 @@ }, "ranges": { - "inside": { "base": "sprites/office/inside/", "start": 0, "end": 4 }, + "inside": { "base": "sprites/office/inside/{i}.png", "start": 0, "end": 4 }, "hallway": { "base": "sprites/office/hallway/", "start": 0, "end": 10 }, "rightVents": { "base": "sprites/office/right_vents/", "start": 0, "end": 2 }, "leftVents": { "base": "sprites/office/left_vents/", "start": 0, "end": 2 }, diff --git a/core/src/main/java/io/github/eldek0/asset/GameAssetManager.java b/core/src/main/java/io/github/eldek0/asset/GameAssetManager.java index 0a6ae4f..ddf21a6 100644 --- a/core/src/main/java/io/github/eldek0/asset/GameAssetManager.java +++ b/core/src/main/java/io/github/eldek0/asset/GameAssetManager.java @@ -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(); + } } diff --git a/core/src/main/java/io/github/eldek0/asset/group/AssetBase.java b/core/src/main/java/io/github/eldek0/asset/group/AssetBase.java index 6107481..5cf08fd 100644 --- a/core/src/main/java/io/github/eldek0/asset/group/AssetBase.java +++ b/core/src/main/java/io/github/eldek0/asset/group/AssetBase.java @@ -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; } } diff --git a/core/src/main/java/io/github/eldek0/asset/group/BatteryAssets.java b/core/src/main/java/io/github/eldek0/asset/group/BatteryAssets.java index 7ab7ffa..80b5f16 100644 --- a/core/src/main/java/io/github/eldek0/asset/group/BatteryAssets.java +++ b/core/src/main/java/io/github/eldek0/asset/group/BatteryAssets.java @@ -25,7 +25,7 @@ public class BatteryAssets extends AssetBase implements AssetBundle allPaths() { + List paths = new ArrayList<>(); + for (int i = start; i <= end; i++) paths.add(path(i)); + return paths; + } + } diff --git a/core/src/main/java/io/github/eldek0/config/SpriteConfig.java b/core/src/main/java/io/github/eldek0/config/SpriteConfig.java index 8f98f62..cb52080 100644 --- a/core/src/main/java/io/github/eldek0/config/SpriteConfig.java +++ b/core/src/main/java/io/github/eldek0/config/SpriteConfig.java @@ -6,8 +6,7 @@ public record SpriteConfig>( float y, String group, - String key, - int frame, + SpriteVariant variant, boolean active, boolean fromTop, diff --git a/core/src/main/java/io/github/eldek0/config/SpritePositionData.java b/core/src/main/java/io/github/eldek0/config/SpritePositionData.java index 4e2a29b..d59ff9b 100644 --- a/core/src/main/java/io/github/eldek0/config/SpritePositionData.java +++ b/core/src/main/java/io/github/eldek0/config/SpritePositionData.java @@ -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; diff --git a/core/src/main/java/io/github/eldek0/config/SpriteVariant.java b/core/src/main/java/io/github/eldek0/config/SpriteVariant.java new file mode 100644 index 0000000..0c3b264 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/config/SpriteVariant.java @@ -0,0 +1,6 @@ +package io.github.eldek0.config; + +public class SpriteVariant { + public String spriteKey; + public int frame = 0; +} diff --git a/core/src/main/java/io/github/eldek0/game/Camera.java b/core/src/main/java/io/github/eldek0/game/Camera.java index f79cc50..848fb0d 100644 --- a/core/src/main/java/io/github/eldek0/game/Camera.java +++ b/core/src/main/java/io/github/eldek0/game/Camera.java @@ -263,10 +263,14 @@ public class Camera { public void renderUI(SpriteBatch batch) { if (!gameScene.hud.isInsideCamera()) return; - for (SpriteConfig 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); } diff --git a/core/src/main/java/io/github/eldek0/ui/SpriteLayout.java b/core/src/main/java/io/github/eldek0/ui/SpriteLayout.java index 66b6f12..c3a80e6 100644 --- a/core/src/main/java/io/github/eldek0/ui/SpriteLayout.java +++ b/core/src/main/java/io/github/eldek0/ui/SpriteLayout.java @@ -33,8 +33,7 @@ public class SpriteLayout> { raw.x, raw.y, raw.group, - raw.key, - raw.frame, + raw.variant, raw.active, raw.fromTop, raw.centerX,