Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ allprojects {
appName = 'DestinationSol'
gdxVersion = '1.9.8'
roboVMVersion = '2.3.3'
nuiVersion = '3.0.0-SNAPSHOT'
}
}

Expand Down
5 changes: 3 additions & 2 deletions engine/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,9 @@ dependencies {
api(group: 'org.terasology.gestalt', name: 'gestalt-module', version: '7.0.6-SNAPSHOT')
api(group: 'org.terasology.gestalt', name: 'gestalt-util', version: '7.0.6-SNAPSHOT')

api group: 'org.terasology.nui', name: 'nui', version: '2.0.0'
api group: 'org.terasology.nui', name: 'nui-libgdx', version: '2.0.0'
api group: 'org.terasology.nui', name: 'nui', version: nuiVersion
api group: 'org.terasology.nui', name: 'nui-libgdx', version: nuiVersion
api group: 'org.terasology.nui', name: 'nui-gestalt7', version: nuiVersion

implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.4.0'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.terasology.nui.asset.UIElement;
import org.terasology.nui.reflection.WidgetLibrary;
import org.terasology.nui.skin.UISkin;
import org.terasology.nui.skin.UISkinAsset;
import org.terasology.reflection.copy.CopyStrategyLibrary;
import org.terasology.reflection.reflect.ReflectFactory;
import org.terasology.reflection.reflect.ReflectionReflectFactory;
Expand Down Expand Up @@ -81,8 +82,8 @@ public void init(ModuleEnvironment environment, ComponentManager componentManage
widgetLibrary.register(new ResourceUrn(moduleName, new Name(widgetClass.getSimpleName())), widgetClass);
}

assetTypeManager.createAssetType(UISkin.class, UISkin::new, "skins");
((AssetFileDataProducer)assetTypeManager.getAssetType(UISkin.class).get().getProducers().get(0)).addAssetFormat(new UISkinFormat(widgetLibrary));
assetTypeManager.createAssetType(UISkinAsset.class, UISkinAsset::new, "skins");
((AssetFileDataProducer)assetTypeManager.getAssetType(UISkinAsset.class).get().getProducers().get(0)).addAssetFormat(new UISkinFormat(widgetLibrary));

assetTypeManager.createAssetType(UIElement.class, UIElement::new, "ui");
((AssetFileDataProducer)assetTypeManager.getAssetType(UIElement.class).get().getProducers().get(0)).addAssetFormat(new UIFormat(widgetLibrary));
Expand Down
12 changes: 12 additions & 0 deletions engine/src/main/java/org/destinationsol/assets/Assets.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
import org.slf4j.LoggerFactory;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.entitysystem.prefab.Prefab;
import org.terasology.nui.skin.UISkin;
import org.terasology.nui.skin.UISkinAsset;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -125,6 +127,16 @@ public static Font getFont(String path) {
throw new RuntimeException("Font " + path + " not found!");
}

public static UISkin getSkin(String path) {
Optional<UISkinAsset> skinOptional = assetHelper.get(new ResourceUrn(path), UISkinAsset.class);

if (skinOptional.isPresent()) {
return skinOptional.get().getSkin();
}

throw new RuntimeException("UISkin " + path + " not found!");
}

/**
* Loads an emitter (.emitter) from the current environment. Throws an exception if the asset is not found.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import org.terasology.nui.asset.font.Font;
import org.terasology.nui.reflection.WidgetLibrary;
import org.terasology.nui.skin.UISkin;
import org.terasology.nui.skin.UISkinAsset;
import org.terasology.nui.widgets.UILabel;
import org.terasology.reflection.ReflectionUtil;
import org.terasology.reflection.metadata.ClassMetadata;
Expand Down Expand Up @@ -103,7 +104,7 @@ public UIData load(JsonElement element, Locale otherLocale) throws IOException {
.registerTypeAdapter(UISkin.class, new JsonDeserializer<UISkin>() {
@Override
public UISkin deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return Assets.getAssetHelper().get(new ResourceUrn(json.getAsString()), UISkin.class).get();
return Assets.getAssetHelper().get(new ResourceUrn(json.getAsString()), UISkinAsset.class).get().getSkin();
}
})
.registerTypeAdapter(UITextureRegion.class, new UISkinFormat.TextureRegionTypeAdapter())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.terasology.nui.UIWidget;
import org.terasology.nui.asset.font.Font;
import org.terasology.nui.skin.UISkin;
import org.terasology.nui.skin.UISkinAsset;
import org.terasology.nui.skin.UISkinBuilder;
import org.terasology.nui.skin.UISkinData;
import org.terasology.nui.skin.UIStyleFragment;
Expand Down Expand Up @@ -96,7 +97,7 @@ public UISkinData deserialize(JsonElement json, Type typeOfT, JsonDeserializatio
DefaultInfo defaultInfo = null;
defaultInfo = context.deserialize(json, DefaultInfo.class);
defaultInfo.apply(builder);
return builder.build();
return new UISkinData(builder.build());
}
return null;
}
Expand All @@ -110,9 +111,9 @@ private static class DefaultInfo extends FamilyInfo {
public void apply(UISkinBuilder builder) {
super.apply(builder);
if (inherit != null) {
Optional<? extends UISkin> skin = Assets.getAssetHelper().get(new ResourceUrn(inherit), UISkin.class);
Optional<? extends UISkinAsset> skin = Assets.getAssetHelper().get(new ResourceUrn(inherit), UISkinAsset.class);
if (skin.isPresent()) {
builder.setBaseSkin(skin.get());
builder.setBaseSkin(skin.get().getSkin());
}
}
if (families != null) {
Expand Down
26 changes: 21 additions & 5 deletions engine/src/main/java/org/destinationsol/ui/nui/NUIManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.input.InputType;
import org.terasology.input.MouseInput;
import org.terasology.input.device.KeyboardAction;
import org.terasology.input.device.CharKeyboardAction;
import org.terasology.input.device.RawKeyboardAction;
import org.terasology.input.device.KeyboardDevice;
import org.terasology.input.device.MouseAction;
import org.terasology.input.device.MouseDevice;
Expand All @@ -40,6 +41,7 @@
import org.terasology.nui.backends.libgdx.LibGDXMouseDevice;
import org.terasology.nui.backends.libgdx.NUIInputProcessor;
import org.terasology.nui.canvas.CanvasImpl;
import org.terasology.nui.events.NUICharEvent;
import org.terasology.nui.events.NUIKeyEvent;
import org.terasology.nui.events.NUIMouseButtonEvent;
import org.terasology.nui.events.NUIMouseWheelEvent;
Expand Down Expand Up @@ -122,7 +124,7 @@ public NUIManager(SolApplication solApplication, Context context, CommonDrawer c
commonDrawer.getSpriteBatch(), new ShapeRenderer(), false, true);
focusManager = new FocusManagerImpl();
whiteTexture = Assets.getDSTexture(WHITE_TEXTURE_URN).getUiTexture();
skin = Assets.getAssetHelper().get(new ResourceUrn(DEFAULT_SKIN_URN), UISkin.class).get();
skin = Assets.getSkin(DEFAULT_SKIN_URN);

canvas = new CanvasImpl(canvasRenderer, focusManager, keyboard, mouse, whiteTexture, skin, 100);
TabbingManager.setFocusManager(focusManager);
Expand All @@ -145,11 +147,11 @@ public NUIManager(SolApplication solApplication, Context context, CommonDrawer c
* @param solApplication the application to use
*/
public void update(SolApplication solApplication) {
canvas.processMousePosition(mouse.getMousePosition());
canvas.processMousePosition(mouse.getPosition());
canvas.setGameTime(System.currentTimeMillis());

for (KeyboardAction action : keyboard.getInputQueue()) {
NUIKeyEvent event = new NUIKeyEvent(mouse, keyboard, action.getInput(), action.getInputChar(), action.getState());
for (RawKeyboardAction action : keyboard.getInputQueue()) {
NUIKeyEvent event = new NUIKeyEvent(mouse, keyboard, action.getInput(), action.getState());

if (focusManager.getFocus() != null) {
focusManager.getFocus().onKeyEvent(event);
Expand All @@ -162,6 +164,20 @@ public void update(SolApplication solApplication) {
}
}

for (CharKeyboardAction action : keyboard.getCharInputQueue()) {
NUICharEvent event = new NUICharEvent(mouse, keyboard, action.getCharacter());

if (focusManager.getFocus() != null) {
focusManager.getFocus().onCharEvent(event);
}

for (NUIScreenLayer uiScreen : uiScreens) {
if (uiScreen.onCharEvent(event) || uiScreen.isBlockingInput() || event.isConsumed()) {
break;
}
}
}

for (MouseAction action : mouse.getInputQueue()) {
if (action.getInput().getType() == InputType.MOUSE_BUTTON) {
if (action.getState().isDown()) {
Expand Down