More work done.
-Improved: Lang System now uses Jsons with optional layers. -Improved: EventBus SubscribeEvent no longer requires class definition for everything.
This commit is contained in:
parent
98e1fbb9fe
commit
ede8b1d1a1
|
@ -83,7 +83,6 @@ public class ZipAsset implements IAsset
|
||||||
{
|
{
|
||||||
return ImageIO.read(getStream());
|
return ImageIO.read(getStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BufferedReader getStringReader() throws IOException
|
public BufferedReader getStringReader() throws IOException
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,6 +4,11 @@ public class I18n
|
||||||
{
|
{
|
||||||
static Language CURRENT_LANGUAGE;
|
static Language CURRENT_LANGUAGE;
|
||||||
|
|
||||||
|
public static boolean has(String key)
|
||||||
|
{
|
||||||
|
return CURRENT_LANGUAGE.has(key);
|
||||||
|
}
|
||||||
|
|
||||||
public static String translate(String key)
|
public static String translate(String key)
|
||||||
{
|
{
|
||||||
return CURRENT_LANGUAGE.translate(key);
|
return CURRENT_LANGUAGE.translate(key);
|
||||||
|
|
|
@ -2,11 +2,13 @@ package speiger.src.coreengine.assets.language;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import speiger.src.collections.objects.utils.maps.Object2ObjectMaps;
|
||||||
|
|
||||||
public class Language
|
public class Language
|
||||||
{
|
{
|
||||||
String language;
|
String language;
|
||||||
String code;
|
String code;
|
||||||
Map<String, String> translations;
|
Map<String, String> translations = Object2ObjectMaps.empty();
|
||||||
|
|
||||||
public Language(String code, String language)
|
public Language(String code, String language)
|
||||||
{
|
{
|
||||||
|
@ -21,7 +23,12 @@ public class Language
|
||||||
|
|
||||||
public void clear()
|
public void clear()
|
||||||
{
|
{
|
||||||
translations = null;
|
translations = Object2ObjectMaps.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean has(String s)
|
||||||
|
{
|
||||||
|
return translations.containsKey(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String translate(String key)
|
public String translate(String key)
|
||||||
|
|
|
@ -3,6 +3,7 @@ package speiger.src.coreengine.assets.language;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import speiger.src.collections.objects.maps.impl.hash.Object2ObjectOpenHashMap;
|
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.AssetManager;
|
||||||
import speiger.src.coreengine.assets.MultiAsset;
|
import speiger.src.coreengine.assets.MultiAsset;
|
||||||
import speiger.src.coreengine.assets.reloader.IReloadableResource;
|
import speiger.src.coreengine.assets.reloader.IReloadableResource;
|
||||||
import speiger.src.coreengine.utils.collections.iterators.IterableWrapper;
|
|
||||||
|
|
||||||
public class LanguageManager implements IReloadableResource
|
public class LanguageManager implements IReloadableResource
|
||||||
{
|
{
|
||||||
final AssetLocation location = AssetLocation.of("lang");
|
final AssetLocation location = AssetLocation.of("lang");
|
||||||
Map<String, Language> languages = new Object2ObjectOpenHashMap<String, Language>();
|
Map<String, Language> languages = new Object2ObjectOpenHashMap<>();
|
||||||
AssetManager assets;
|
AssetManager assets;
|
||||||
String currentLanguage;
|
String currentLanguage;
|
||||||
|
|
||||||
|
@ -52,8 +52,8 @@ public class LanguageManager implements IReloadableResource
|
||||||
if(loadLanguage(lang))
|
if(loadLanguage(lang))
|
||||||
{
|
{
|
||||||
I18n.CURRENT_LANGUAGE = languages.get(lang);
|
I18n.CURRENT_LANGUAGE = languages.get(lang);
|
||||||
currentLanguage = lang;
|
|
||||||
Language currentLang = languages.get(currentLanguage);
|
Language currentLang = languages.get(currentLanguage);
|
||||||
|
currentLanguage = lang;
|
||||||
if(currentLang != null)
|
if(currentLang != null)
|
||||||
{
|
{
|
||||||
currentLang.clear();
|
currentLang.clear();
|
||||||
|
@ -70,7 +70,7 @@ public class LanguageManager implements IReloadableResource
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Map<String, String> map = new Object2ObjectOpenHashMap<String, String>();
|
Map<String, String> map = new Object2ObjectOpenHashMap<>();
|
||||||
loadLanguage(loadingLang, map);
|
loadLanguage(loadingLang, map);
|
||||||
if(loadingLang != "en_US")
|
if(loadingLang != "en_US")
|
||||||
{
|
{
|
||||||
|
@ -88,17 +88,9 @@ public class LanguageManager implements IReloadableResource
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
for(String line : IterableWrapper.wrap(language.getAsset(i).getStringReader()))
|
for(Map.Entry<String, JsonElement> element : language.getAsset(i).getJsonObject().entrySet())
|
||||||
{
|
{
|
||||||
if(line.isEmpty() || line.startsWith("#") || line.startsWith("//"))
|
loadEntry(element.getKey(), element.getValue(), data);
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
String[] split = line.split("=", 1);
|
|
||||||
if(split.length == 2)
|
|
||||||
{
|
|
||||||
data.putIfAbsent(split[0].trim(), split[1].trim());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
|
@ -113,9 +105,21 @@ public class LanguageManager implements IReloadableResource
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void preLoadLanguage(JsonObject object)
|
protected void loadEntry(String basePath, JsonElement el, Map<String, String> data)
|
||||||
{
|
{
|
||||||
try
|
if(el.isJsonPrimitive()) data.put(basePath, el.getAsString());
|
||||||
|
else if(el.isJsonObject())
|
||||||
|
{
|
||||||
|
for(Map.Entry<String, JsonElement> elements : el.getAsJsonObject().entrySet())
|
||||||
|
{
|
||||||
|
String key = elements.getKey();
|
||||||
|
if(key.isEmpty()) loadEntry(basePath, elements.getValue(), data);
|
||||||
|
else loadEntry(basePath+"."+key, elements.getValue(), data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void preLoadLanguage(JsonObject object)
|
||||||
{
|
{
|
||||||
JsonArray array = object.getAsJsonArray("languages");
|
JsonArray array = object.getAsJsonArray("languages");
|
||||||
if(array == null)
|
if(array == null)
|
||||||
|
@ -142,10 +146,5 @@ public class LanguageManager implements IReloadableResource
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ public final class FacingList implements Iterable<Facing>, Predicate<Facing>
|
||||||
{
|
{
|
||||||
code = (byte)MathUtils.clamp(0, 15, initCode);
|
code = (byte)MathUtils.clamp(0, 15, initCode);
|
||||||
Vec2i pos = Vec2i.mutable();
|
Vec2i pos = Vec2i.mutable();
|
||||||
ObjectList<Facing> facings = new ObjectArrayList<Facing>();
|
ObjectList<Facing> facings = new ObjectArrayList<>();
|
||||||
for(int i = 0;i<4;i++)
|
for(int i = 0;i<4;i++)
|
||||||
{
|
{
|
||||||
if((code & 1 << i) != 0)
|
if((code & 1 << i) != 0)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package speiger.src.coreengine.rendering.gui.helper.constrains;
|
||||||
|
|
||||||
import java.util.function.BooleanSupplier;
|
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.GuiComponent;
|
||||||
import speiger.src.coreengine.rendering.gui.helper.constrains.Constrain.Target;
|
import speiger.src.coreengine.rendering.gui.helper.constrains.Constrain.Target;
|
||||||
import speiger.src.coreengine.utils.functions.FloatSupplier;
|
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 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 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 yPos(Constrain yPos) { return new ConstrainBuilder().set(yPos, Target.Y); }
|
||||||
public static ConstrainBuilder width(Constrain width) { return new ConstrainBuilder().set(width, Target.WIDTH); }
|
public static ConstrainBuilder width(Constrain width) { return new ConstrainBuilder().set(width, Target.WIDTH); }
|
||||||
|
|
|
@ -12,7 +12,7 @@ import speiger.src.coreengine.rendering.input.bindings.InputBinding;
|
||||||
|
|
||||||
public class BindingRegistry
|
public class BindingRegistry
|
||||||
{
|
{
|
||||||
Map<BindingType, Int2ObjectMap<Set<InputBinding>>> handlers = new EnumMap<BindingType, Int2ObjectMap<Set<InputBinding>>>(BindingType.class);
|
Map<BindingType, Int2ObjectMap<Set<InputBinding>>> handlers = new EnumMap<>(BindingType.class);
|
||||||
|
|
||||||
public void registerBinding(InputBinding binding)
|
public void registerBinding(InputBinding binding)
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,9 +18,9 @@ public class Camera
|
||||||
static final Vec3f X_ROTATION = Vec3f.of(1, 0, 0);
|
static final Vec3f X_ROTATION = Vec3f.of(1, 0, 0);
|
||||||
static final Vec3f Y_ROTATION = Vec3f.of(0, 1, 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();
|
Vec3f lastPosition = Vec3f.mutable();
|
||||||
Vec2f rotation = Vec2f.mutable(0);
|
Vec2f rotation = Vec2f.mutable();
|
||||||
Vec2f lastRotation = Vec2f.mutable();
|
Vec2f lastRotation = Vec2f.mutable();
|
||||||
boolean moved = false;
|
boolean moved = false;
|
||||||
boolean rotated = false;
|
boolean rotated = false;
|
||||||
|
@ -31,7 +31,7 @@ public class Camera
|
||||||
ICameraController controller;
|
ICameraController controller;
|
||||||
Frustrum frustrum;
|
Frustrum frustrum;
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
List<Consumer<Camera>> listeners = new ObjectArrayList<Consumer<Camera>>();
|
List<Consumer<Camera>> listeners = new ObjectArrayList<>();
|
||||||
|
|
||||||
public Camera(Window window)
|
public Camera(Window window)
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@ public class EventBus
|
||||||
SubscribeEvent data = t.getAnnotation(SubscribeEvent.class);
|
SubscribeEvent data = t.getAnnotation(SubscribeEvent.class);
|
||||||
if(data == null) return;
|
if(data == null) return;
|
||||||
Consumer<Event> listener = new MethodListener(LOOKUP.unreflect(t).bindTo(obj));
|
Consumer<Event> listener = new MethodListener(LOOKUP.unreflect(t).bindTo(obj));
|
||||||
getListeners(data.value()).addListener(data.priority(), listener);
|
getListeners((Class<? extends Event>)t.getParameterTypes()[0]).addListener(data.priority(), listener);
|
||||||
list.add(new EventListener(data.value(), listener));
|
list.add(new EventListener(data.value(), listener));
|
||||||
}
|
}
|
||||||
catch(Exception e) { e.printStackTrace(); }
|
catch(Exception e) { e.printStackTrace(); }
|
||||||
|
|
|
@ -32,10 +32,7 @@ public class Listeners
|
||||||
|
|
||||||
public void addChild(Listeners listener)
|
public void addChild(Listeners listener)
|
||||||
{
|
{
|
||||||
if(childs == null)
|
if(childs == null) childs = new ObjectArrayList<>();
|
||||||
{
|
|
||||||
childs = new ObjectArrayList<Listeners>();
|
|
||||||
}
|
|
||||||
childs.add(listener);
|
childs.add(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +90,7 @@ public class Listeners
|
||||||
public void rebuildListeners()
|
public void rebuildListeners()
|
||||||
{
|
{
|
||||||
rebuild = false;
|
rebuild = false;
|
||||||
List<Consumer<Event>> result = new ObjectArrayList<Consumer<Event>>();
|
List<Consumer<Event>> result = new ObjectArrayList<>();
|
||||||
for(EventPriority entry : EventPriority.getPriorities())
|
for(EventPriority entry : EventPriority.getPriorities())
|
||||||
{
|
{
|
||||||
getListeners(entry, result);
|
getListeners(entry, result);
|
||||||
|
|
|
@ -14,5 +14,5 @@ public @interface SubscribeEvent
|
||||||
{
|
{
|
||||||
public EventPriority priority() default EventPriority.MEDIUM;
|
public EventPriority priority() default EventPriority.MEDIUM;
|
||||||
|
|
||||||
public Class<? extends Event> value();
|
public Class<? extends Event> value() default Event.class;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue