From ede8b1d1a1ce38554f8d0d051d64a1e81b9dd908 Mon Sep 17 00:00:00 2001 From: Speiger Date: Sun, 24 Apr 2022 00:55:00 +0200 Subject: [PATCH] More work done. -Improved: Lang System now uses Jsons with optional layers. -Improved: EventBus SubscribeEvent no longer requires class definition for everything. --- .../src/coreengine/assets/impl/ZipAsset.java | 1 - .../src/coreengine/assets/language/I18n.java | 5 ++ .../coreengine/assets/language/Language.java | 11 ++- .../assets/language/LanguageManager.java | 81 +++++++++---------- .../src/coreengine/math/misc/FacingList.java | 2 +- .../gui/helper/constrains/Constrains.java | 13 +++ .../input/bindings/utils/BindingRegistry.java | 2 +- .../rendering/input/camera/Camera.java | 6 +- .../coreengine/utils/eventbus/EventBus.java | 2 +- .../coreengine/utils/eventbus/Listeners.java | 7 +- .../utils/eventbus/SubscribeEvent.java | 2 +- 11 files changed, 76 insertions(+), 56 deletions(-) diff --git a/src/main/java/speiger/src/coreengine/assets/impl/ZipAsset.java b/src/main/java/speiger/src/coreengine/assets/impl/ZipAsset.java index df5f972..6052320 100644 --- a/src/main/java/speiger/src/coreengine/assets/impl/ZipAsset.java +++ b/src/main/java/speiger/src/coreengine/assets/impl/ZipAsset.java @@ -83,7 +83,6 @@ public class ZipAsset implements IAsset { return ImageIO.read(getStream()); } - @Override public BufferedReader getStringReader() throws IOException { diff --git a/src/main/java/speiger/src/coreengine/assets/language/I18n.java b/src/main/java/speiger/src/coreengine/assets/language/I18n.java index 8431b66..69764fa 100644 --- a/src/main/java/speiger/src/coreengine/assets/language/I18n.java +++ b/src/main/java/speiger/src/coreengine/assets/language/I18n.java @@ -4,6 +4,11 @@ public class I18n { static Language CURRENT_LANGUAGE; + public static boolean has(String key) + { + return CURRENT_LANGUAGE.has(key); + } + public static String translate(String key) { return CURRENT_LANGUAGE.translate(key); diff --git a/src/main/java/speiger/src/coreengine/assets/language/Language.java b/src/main/java/speiger/src/coreengine/assets/language/Language.java index 6fd7b20..4a8ac83 100644 --- a/src/main/java/speiger/src/coreengine/assets/language/Language.java +++ b/src/main/java/speiger/src/coreengine/assets/language/Language.java @@ -2,11 +2,13 @@ package speiger.src.coreengine.assets.language; import java.util.Map; +import speiger.src.collections.objects.utils.maps.Object2ObjectMaps; + public class Language { String language; String code; - Map translations; + Map translations = Object2ObjectMaps.empty(); public Language(String code, String language) { @@ -21,7 +23,12 @@ public class Language public void clear() { - translations = null; + translations = Object2ObjectMaps.empty(); + } + + public boolean has(String s) + { + return translations.containsKey(s); } public String translate(String key) diff --git a/src/main/java/speiger/src/coreengine/assets/language/LanguageManager.java b/src/main/java/speiger/src/coreengine/assets/language/LanguageManager.java index e4fcf67..ea92a03 100644 --- a/src/main/java/speiger/src/coreengine/assets/language/LanguageManager.java +++ b/src/main/java/speiger/src/coreengine/assets/language/LanguageManager.java @@ -3,6 +3,7 @@ package speiger.src.coreengine.assets.language; import java.util.Map; import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import speiger.src.collections.objects.maps.impl.hash.Object2ObjectOpenHashMap; @@ -11,12 +12,11 @@ import speiger.src.coreengine.assets.AssetLocation; import speiger.src.coreengine.assets.AssetManager; import speiger.src.coreengine.assets.MultiAsset; import speiger.src.coreengine.assets.reloader.IReloadableResource; -import speiger.src.coreengine.utils.collections.iterators.IterableWrapper; public class LanguageManager implements IReloadableResource { final AssetLocation location = AssetLocation.of("lang"); - Map languages = new Object2ObjectOpenHashMap(); + Map languages = new Object2ObjectOpenHashMap<>(); AssetManager assets; String currentLanguage; @@ -52,8 +52,8 @@ public class LanguageManager implements IReloadableResource if(loadLanguage(lang)) { I18n.CURRENT_LANGUAGE = languages.get(lang); - currentLanguage = lang; Language currentLang = languages.get(currentLanguage); + currentLanguage = lang; if(currentLang != null) { currentLang.clear(); @@ -70,7 +70,7 @@ public class LanguageManager implements IReloadableResource { return false; } - Map map = new Object2ObjectOpenHashMap(); + Map map = new Object2ObjectOpenHashMap<>(); loadLanguage(loadingLang, map); if(loadingLang != "en_US") { @@ -88,18 +88,10 @@ public class LanguageManager implements IReloadableResource { try { - for(String line : IterableWrapper.wrap(language.getAsset(i).getStringReader())) + for(Map.Entry element : language.getAsset(i).getJsonObject().entrySet()) { - if(line.isEmpty() || line.startsWith("#") || line.startsWith("//")) - { - continue; - } - String[] split = line.split("=", 1); - if(split.length == 2) - { - data.putIfAbsent(split[0].trim(), split[1].trim()); - } - } + loadEntry(element.getKey(), element.getValue(), data); + } } catch(Exception e) { @@ -113,38 +105,45 @@ public class LanguageManager implements IReloadableResource } } - protected void preLoadLanguage(JsonObject object) + protected void loadEntry(String basePath, JsonElement el, Map data) { - try + if(el.isJsonPrimitive()) data.put(basePath, el.getAsString()); + else if(el.isJsonObject()) { - JsonArray array = object.getAsJsonArray("languages"); - if(array == null) + for(Map.Entry elements : el.getAsJsonObject().entrySet()) { - return; - } - for(int i = 0,m=array.size();i 16) - { - continue; - } - Language lang = languages.get(key); - if(lang == null) - { - languages.put(key, new Language(key, value)); - } + String key = elements.getKey(); + if(key.isEmpty()) loadEntry(basePath, elements.getValue(), data); + else loadEntry(basePath+"."+key, elements.getValue(), data); } } - catch(Exception e) + } + + protected void preLoadLanguage(JsonObject object) + { + JsonArray array = object.getAsJsonArray("languages"); + if(array == null) { - e.printStackTrace(); + return; + } + for(int i = 0,m=array.size();i 16) + { + continue; + } + Language lang = languages.get(key); + if(lang == null) + { + languages.put(key, new Language(key, value)); + } } } diff --git a/src/main/java/speiger/src/coreengine/math/misc/FacingList.java b/src/main/java/speiger/src/coreengine/math/misc/FacingList.java index d182eef..fc363b0 100644 --- a/src/main/java/speiger/src/coreengine/math/misc/FacingList.java +++ b/src/main/java/speiger/src/coreengine/math/misc/FacingList.java @@ -42,7 +42,7 @@ public final class FacingList implements Iterable, Predicate { code = (byte)MathUtils.clamp(0, 15, initCode); Vec2i pos = Vec2i.mutable(); - ObjectList facings = new ObjectArrayList(); + ObjectList facings = new ObjectArrayList<>(); for(int i = 0;i<4;i++) { if((code & 1 << i) != 0) diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constrains.java b/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constrains.java index 94ab280..177c5e7 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constrains.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constrains.java @@ -2,6 +2,7 @@ package speiger.src.coreengine.rendering.gui.helper.constrains; import java.util.function.BooleanSupplier; +import speiger.src.coreengine.math.misc.Facing; import speiger.src.coreengine.rendering.gui.GuiComponent; import speiger.src.coreengine.rendering.gui.helper.constrains.Constrain.Target; import speiger.src.coreengine.utils.functions.FloatSupplier; @@ -51,6 +52,18 @@ public class Constrains public static Constrains verticalScrollBar(BooleanSupplier supply, float offset, float barSize) { return invParent(barSize, Target.X).yPos(offset).width(barSize).height(new ConditionalConstraint(supply, new ParentConstrain(offset * 0.5F), new ParentConstrain((barSize + offset) * 0.5F))).build(); } + public static Constrains border(float size, Facing side, float offset) + { + switch(side) + { + case NORTH: return new Constrains(new ParentConstrain(), new ParentConstrain(offset), new ParentConstrain(), new PixelConstrain(size)); + case EAST: return new Constrains(new ParentConstrain(size+offset).invert(), new ParentConstrain(), new PixelConstrain(size), new ParentConstrain()); + case SOUTH: return new Constrains(new ParentConstrain(), new ParentConstrain(size+offset).invert(), new ParentConstrain(), new PixelConstrain(size)); + case WEST: return new Constrains(new ParentConstrain(offset), new ParentConstrain(), new PixelConstrain(size), new ParentConstrain()); + default: return null; + } + } + public static ConstrainBuilder xPos(Constrain xPos) { return new ConstrainBuilder().set(xPos, Target.X); } public static ConstrainBuilder yPos(Constrain yPos) { return new ConstrainBuilder().set(yPos, Target.Y); } public static ConstrainBuilder width(Constrain width) { return new ConstrainBuilder().set(width, Target.WIDTH); } diff --git a/src/main/java/speiger/src/coreengine/rendering/input/bindings/utils/BindingRegistry.java b/src/main/java/speiger/src/coreengine/rendering/input/bindings/utils/BindingRegistry.java index eddf5eb..7ccaafe 100644 --- a/src/main/java/speiger/src/coreengine/rendering/input/bindings/utils/BindingRegistry.java +++ b/src/main/java/speiger/src/coreengine/rendering/input/bindings/utils/BindingRegistry.java @@ -12,7 +12,7 @@ import speiger.src.coreengine.rendering.input.bindings.InputBinding; public class BindingRegistry { - Map>> handlers = new EnumMap>>(BindingType.class); + Map>> handlers = new EnumMap<>(BindingType.class); public void registerBinding(InputBinding binding) { diff --git a/src/main/java/speiger/src/coreengine/rendering/input/camera/Camera.java b/src/main/java/speiger/src/coreengine/rendering/input/camera/Camera.java index 98f379e..97d651b 100644 --- a/src/main/java/speiger/src/coreengine/rendering/input/camera/Camera.java +++ b/src/main/java/speiger/src/coreengine/rendering/input/camera/Camera.java @@ -18,9 +18,9 @@ public class Camera static final Vec3f X_ROTATION = Vec3f.of(1, 0, 0); static final Vec3f Y_ROTATION = Vec3f.of(0, 1, 0); - Vec3f position = Vec3f.mutable(0, 0, 0); + Vec3f position = Vec3f.mutable(); Vec3f lastPosition = Vec3f.mutable(); - Vec2f rotation = Vec2f.mutable(0); + Vec2f rotation = Vec2f.mutable(); Vec2f lastRotation = Vec2f.mutable(); boolean moved = false; boolean rotated = false; @@ -31,7 +31,7 @@ public class Camera ICameraController controller; Frustrum frustrum; boolean changed = false; - List> listeners = new ObjectArrayList>(); + List> listeners = new ObjectArrayList<>(); public Camera(Window window) { diff --git a/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java b/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java index 7c041f8..9c43d79 100644 --- a/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java +++ b/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java @@ -54,7 +54,7 @@ public class EventBus SubscribeEvent data = t.getAnnotation(SubscribeEvent.class); if(data == null) return; Consumer listener = new MethodListener(LOOKUP.unreflect(t).bindTo(obj)); - getListeners(data.value()).addListener(data.priority(), listener); + getListeners((Class)t.getParameterTypes()[0]).addListener(data.priority(), listener); list.add(new EventListener(data.value(), listener)); } catch(Exception e) { e.printStackTrace(); } diff --git a/src/main/java/speiger/src/coreengine/utils/eventbus/Listeners.java b/src/main/java/speiger/src/coreengine/utils/eventbus/Listeners.java index defda3e..4f343b4 100644 --- a/src/main/java/speiger/src/coreengine/utils/eventbus/Listeners.java +++ b/src/main/java/speiger/src/coreengine/utils/eventbus/Listeners.java @@ -32,10 +32,7 @@ public class Listeners public void addChild(Listeners listener) { - if(childs == null) - { - childs = new ObjectArrayList(); - } + if(childs == null) childs = new ObjectArrayList<>(); childs.add(listener); } @@ -93,7 +90,7 @@ public class Listeners public void rebuildListeners() { rebuild = false; - List> result = new ObjectArrayList>(); + List> result = new ObjectArrayList<>(); for(EventPriority entry : EventPriority.getPriorities()) { getListeners(entry, result); diff --git a/src/main/java/speiger/src/coreengine/utils/eventbus/SubscribeEvent.java b/src/main/java/speiger/src/coreengine/utils/eventbus/SubscribeEvent.java index ab90889..e62ca5a 100644 --- a/src/main/java/speiger/src/coreengine/utils/eventbus/SubscribeEvent.java +++ b/src/main/java/speiger/src/coreengine/utils/eventbus/SubscribeEvent.java @@ -14,5 +14,5 @@ public @interface SubscribeEvent { public EventPriority priority() default EventPriority.MEDIUM; - public Class value(); + public Class value() default Event.class; }