diff --git a/com/danitheskunk/skunkworks/Data.java b/com/danitheskunk/skunkworks/Data.java index fac3c51..3f64a7a 100644 --- a/com/danitheskunk/skunkworks/Data.java +++ b/com/danitheskunk/skunkworks/Data.java @@ -10,6 +10,7 @@ import java.util.LinkedHashMap; public class Data { private LinkedHashMap> data; private String currentCategory; + private Runnable callback; public Data(ByteBuffer data) { this.data = new LinkedHashMap<>(); @@ -18,6 +19,19 @@ public class Data { StandardCharsets.UTF_8.decode(data).toString().lines().forEach(this::processLine); } + public void reload(ByteBuffer data) { + this.data.clear(); + this.data.put("", new LinkedHashMap<>()); + StandardCharsets.UTF_8.decode(data).toString().lines().forEach(this::processLine); + if(callback != null) { + callback.run(); + } + } + + public void onReload(Runnable callback) { + this.callback = callback; + } + private void processLine(String line) { if(line.contains("=")) { var parts = line.split("=", 2); @@ -29,4 +43,8 @@ public class Data { } } } + + public String get(String category, String key) { + return data.get(category).get(key); + } } diff --git a/com/danitheskunk/skunkworks/Engine.java b/com/danitheskunk/skunkworks/Engine.java index 6385af6..735b95b 100644 --- a/com/danitheskunk/skunkworks/Engine.java +++ b/com/danitheskunk/skunkworks/Engine.java @@ -60,6 +60,15 @@ public class Engine { return new Data(loadBytes(path)); } + public Data loadDataWatched(String path) { + var data = loadData(path); + watchFile(path, () -> { + data.reload(loadBytes(path)); + return true; + }); + return data; + } + //requires engine.tick() to be called regularly public void watchFile(String path, Callable callback) { var p = Paths.get(path); diff --git a/com/danitheskunk/skunkworks/Test.java b/com/danitheskunk/skunkworks/Test.java index 31d02b2..ec0ccf1 100644 --- a/com/danitheskunk/skunkworks/Test.java +++ b/com/danitheskunk/skunkworks/Test.java @@ -20,11 +20,8 @@ public class Test extends BaseGame { var path = "C:\\Program Files (x86)" + "\\Steam\\steamapps\\common\\Unreal " + "Tournament\\System\\UnrealTournament.ini"; - var data = engine.loadData(path); - engine.watchFile(path, () -> { - System.out.println("changed"); - return true; - }); + var data = engine.loadDataWatched(path); + data.onReload(() -> System.out.println(data.get("URL", "Host"))); var fontThin = window.loadFontTileset("fonts\\thin-6x12.png"); var fontThin2 = window.loadFontTileset("fonts\\thin-12x12.png");