Cleaned json code and added sprite variants
This commit is contained in:
@@ -11,11 +11,27 @@
|
|||||||
"height": 350
|
"height": 350
|
||||||
},
|
},
|
||||||
"sprites": [
|
"sprites": [
|
||||||
{ "type": "BORDER", "group": "cameras", "key": "borderline", "frame": 0, "x": 0, "y": 0, "zIndex": 0 },
|
{ "type": "BORDER", "group": "cameras","variant": {
|
||||||
{ "type": "MAP", "group": "cameras", "key": "map", "frame": 0, "x": 550, "y": 310, "fromTop": true, "zIndex": 1 },
|
"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": "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": [
|
"cameras": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"ranges": {
|
"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 },
|
"hallway": { "base": "sprites/office/hallway/", "start": 0, "end": 10 },
|
||||||
"rightVents": { "base": "sprites/office/right_vents/", "start": 0, "end": 2 },
|
"rightVents": { "base": "sprites/office/right_vents/", "start": 0, "end": 2 },
|
||||||
"leftVents": { "base": "sprites/office/left_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 com.badlogic.gdx.utils.Json;
|
||||||
|
|
||||||
import io.github.eldek0.asset.group.*;
|
import io.github.eldek0.asset.group.*;
|
||||||
|
import io.github.eldek0.config.FrameRange;
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
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. */
|
/** Queue all in-game assets for async loading. Call update() each frame until done. */
|
||||||
public void loadGameAssets() {
|
public void loadGameAssets() {
|
||||||
json.setIgnoreUnknownFields(true);
|
json.setIgnoreUnknownFields(true);
|
||||||
|
json.addClassTag("FrameRange", FrameRange.class);
|
||||||
|
|
||||||
monitorData = load("monitor.json", MonitorAssets.Data.class);
|
monitorData = load("monitor.json", MonitorAssets.Data.class);
|
||||||
officeData = load("office.json", OfficeAssets.Data.class);
|
officeData = load("office.json", OfficeAssets.Data.class);
|
||||||
@@ -185,6 +187,11 @@ public class GameAssetManager {
|
|||||||
// =========================================================
|
// =========================================================
|
||||||
|
|
||||||
public float getProgress() { return manager.getProgress(); }
|
public float getProgress() { return manager.getProgress(); }
|
||||||
public void finishLoading(){ manager.finishLoading(); fetchAll(); }
|
public void finishLoading(){
|
||||||
public void dispose() { manager.dispose(); }
|
manager.finishLoading();
|
||||||
|
fetchAll();
|
||||||
|
}
|
||||||
|
public void dispose(){
|
||||||
|
manager.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,23 +8,23 @@ public abstract class AssetBase {
|
|||||||
public abstract static class Data {}
|
public abstract static class Data {}
|
||||||
|
|
||||||
protected void queueRange(AssetManager m, FrameRange r) {
|
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) {
|
protected Texture[] fetchRange(AssetManager m, FrameRange r) {
|
||||||
Texture[] arr = new Texture[r.end - r.start + 1];
|
Texture[] arr = new Texture[r.end - r.start + 1];
|
||||||
for (int i = r.start; i <= r.end; i++)
|
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;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void disposeRange(AssetManager m, FrameRange r) {
|
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) {
|
protected boolean isRangeLoaded(AssetManager m, FrameRange r) {
|
||||||
for (int i = r.start; i <= r.end; i++)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public class BatteryAssets extends AssetBase implements AssetBundle<BatteryAsset
|
|||||||
public void queue(AssetManager manager, Data data) {
|
public void queue(AssetManager manager, Data data) {
|
||||||
manager.load(data.flashlightLabel, Texture.class);
|
manager.load(data.flashlightLabel, Texture.class);
|
||||||
for (int i = data.stages.start; i <= data.stages.end; i++)
|
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
|
@Override
|
||||||
@@ -38,14 +38,14 @@ public class BatteryAssets extends AssetBase implements AssetBundle<BatteryAsset
|
|||||||
public void dispose(AssetManager manager, Data data) {
|
public void dispose(AssetManager manager, Data data) {
|
||||||
manager.unload(data.flashlightLabel);
|
manager.unload(data.flashlightLabel);
|
||||||
for (int i = data.stages.start; i <= data.stages.end; i++)
|
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
|
@Override
|
||||||
public boolean isLoaded(AssetManager manager, Data data) {
|
public boolean isLoaded(AssetManager manager, Data data) {
|
||||||
if (!manager.isLoaded(data.flashlightLabel)) return false;
|
if (!manager.isLoaded(data.flashlightLabel)) return false;
|
||||||
for (int i = data.stages.start; i <= data.stages.end; i++)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class MaskAssets extends AssetBase implements AssetBundle<MaskAssets.Data
|
|||||||
public void queue(AssetManager manager, Data data) {
|
public void queue(AssetManager manager, Data data) {
|
||||||
manager.load(data.button, Texture.class);
|
manager.load(data.button, Texture.class);
|
||||||
for (int i = data.sprites.start; i <= data.sprites.end; i++)
|
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
|
@Override
|
||||||
@@ -31,14 +31,14 @@ public class MaskAssets extends AssetBase implements AssetBundle<MaskAssets.Data
|
|||||||
public void dispose(AssetManager manager, Data data) {
|
public void dispose(AssetManager manager, Data data) {
|
||||||
manager.unload(data.button);
|
manager.unload(data.button);
|
||||||
for (int i = data.sprites.start; i <= data.sprites.end; i++)
|
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
|
@Override
|
||||||
public boolean isLoaded(AssetManager manager, Data data) {
|
public boolean isLoaded(AssetManager manager, Data data) {
|
||||||
if (!manager.isLoaded(data.button)) return false;
|
if (!manager.isLoaded(data.button)) return false;
|
||||||
for (int i = data.sprites.start; i <= data.sprites.end; i++)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class MonitorAssets extends AssetBase implements AssetBundle<MonitorAsset
|
|||||||
public void queue(AssetManager manager, Data data) {
|
public void queue(AssetManager manager, Data data) {
|
||||||
manager.load(data.button, Texture.class);
|
manager.load(data.button, Texture.class);
|
||||||
for (int i = data.sprites.start; i <= data.sprites.end; i++)
|
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
|
@Override
|
||||||
@@ -31,14 +31,14 @@ public class MonitorAssets extends AssetBase implements AssetBundle<MonitorAsset
|
|||||||
public void dispose(AssetManager manager, Data data) {
|
public void dispose(AssetManager manager, Data data) {
|
||||||
manager.unload(data.button);
|
manager.unload(data.button);
|
||||||
for (int i = data.sprites.start; i <= data.sprites.end; i++)
|
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
|
@Override
|
||||||
public boolean isLoaded(AssetManager manager, Data data) {
|
public boolean isLoaded(AssetManager manager, Data data) {
|
||||||
if (!manager.isLoaded(data.button)) return false;
|
if (!manager.isLoaded(data.button)) return false;
|
||||||
for (int i = data.sprites.start; i <= data.sprites.end; i++)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,24 @@
|
|||||||
package io.github.eldek0.config;
|
package io.github.eldek0.config;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class FrameRange {
|
public class FrameRange {
|
||||||
public String base;
|
public String base;
|
||||||
public int start, end;
|
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,
|
float y,
|
||||||
|
|
||||||
String group,
|
String group,
|
||||||
String key,
|
SpriteVariant variant,
|
||||||
int frame,
|
|
||||||
|
|
||||||
boolean active,
|
boolean active,
|
||||||
boolean fromTop,
|
boolean fromTop,
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ public class SpritePositionData {
|
|||||||
public int x, y;
|
public int x, y;
|
||||||
|
|
||||||
public String group = "null";
|
public String group = "null";
|
||||||
public String key = "null";
|
public SpriteVariant variant = null;
|
||||||
public int frame = 0;
|
|
||||||
|
|
||||||
public boolean active = true;
|
public boolean active = true;
|
||||||
public boolean fromTop = false;
|
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) {
|
public void renderUI(SpriteBatch batch) {
|
||||||
if (!gameScene.hud.isInsideCamera()) return;
|
if (!gameScene.hud.isInsideCamera()) return;
|
||||||
|
|
||||||
for (SpriteConfig<CameraSpriteType> config : layout.getSortedSprites()) {
|
for (SpriteConfig config : layout.getSortedSprites()) {
|
||||||
if (!config.active()) continue;
|
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) {
|
if (config.type() == CameraSpriteType.LABEL) {
|
||||||
texture = getRoomLabel(inCameraRoom);
|
texture = getRoomLabel(inCameraRoom);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ public class SpriteLayout<T extends Enum<T>> {
|
|||||||
raw.x,
|
raw.x,
|
||||||
raw.y,
|
raw.y,
|
||||||
raw.group,
|
raw.group,
|
||||||
raw.key,
|
raw.variant,
|
||||||
raw.frame,
|
|
||||||
raw.active,
|
raw.active,
|
||||||
raw.fromTop,
|
raw.fromTop,
|
||||||
raw.centerX,
|
raw.centerX,
|
||||||
|
|||||||
Reference in New Issue
Block a user