Cleaned json code and added sprite variants
This commit is contained in:
@@ -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": [
|
||||
{
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package io.github.eldek0.config;
|
||||
|
||||
public class SpriteVariant {
|
||||
public String spriteKey;
|
||||
public int frame = 0;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user