diff --git a/.travis.yml b/.travis.yml index d6e5d91c5..a4e1d6e18 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: Java jdk: - - oraclejdk8 + - openjdk8 diff --git a/adventure-editor/src/main/java/com/bladecoder/engineeditor/ui/panels/InputPanel.java b/adventure-editor/src/main/java/com/bladecoder/engineeditor/ui/panels/InputPanel.java index 1df5fa0a4..4dbe8d942 100644 --- a/adventure-editor/src/main/java/com/bladecoder/engineeditor/ui/panels/InputPanel.java +++ b/adventure-editor/src/main/java/com/bladecoder/engineeditor/ui/panels/InputPanel.java @@ -25,90 +25,89 @@ public abstract class InputPanel extends Table { private static final boolean USE_TOOLTIPS = true; - + protected Actor field; - private Label title; - private Label desc; - private boolean mandatory = false; - - InputPanel() { - } - - protected void init(Skin skin, String title, String desc, Actor c, boolean mandatory, String defaultValue) { - //debug(); - - this.mandatory = mandatory; - - this.setSkin(skin); - LabelStyle style = new LabelStyle(skin.get(LabelStyle.class)); - this.title = new Label(title, style); - - this.desc = new Label(desc,skin, "subtitle"); - this.desc.setWrap(false); - - this.field = c; - -// row().expand(); - float titleWidth = this.title.getStyle().font.getSpaceWidth() * 35; - add(this.title).width(titleWidth).left().top(); - this.title.setWidth(titleWidth); - this.title.setWrap(true); - //row().expand(); - add(field).expandX().left().top(); - - if(USE_TOOLTIPS) { - TextTooltip t = new TextTooltip(desc, skin); - this.title.addListener(t); - this.field.addListener(t); - } else { - row().expand(); - add(this.desc).colspan(2).left(); - } - - if(defaultValue != null) - setText(defaultValue); - } - - - public void setMandatory(boolean value) { - mandatory = value; - } - - public boolean isMandatory() { - return mandatory; - } + private Label title; + private Label desc; + private boolean mandatory = false; + + InputPanel() { + } + + protected void init(Skin skin, String title, String desc, Actor c, boolean mandatory, String defaultValue) { + // debug(); + + this.mandatory = mandatory; + + this.setSkin(skin); + LabelStyle style = new LabelStyle(skin.get(LabelStyle.class)); + this.title = new Label(title, style); + + this.desc = new Label(desc, skin, "subtitle"); + this.desc.setWrap(false); + + this.field = c; + + // row().expand(); + float titleWidth = this.title.getStyle().font.getSpaceXadvance() * 35; + add(this.title).width(titleWidth).left().top(); + this.title.setWidth(titleWidth); + this.title.setWrap(true); + // row().expand(); + add(field).expandX().left().top(); + + if (USE_TOOLTIPS) { + TextTooltip t = new TextTooltip(desc, skin); + this.title.addListener(t); + this.field.addListener(t); + } else { + row().expand(); + add(this.desc).colspan(2).left(); + } + + if (defaultValue != null) + setText(defaultValue); + } + + public void setMandatory(boolean value) { + mandatory = value; + } + + public boolean isMandatory() { + return mandatory; + } public void setError(boolean value) { - if(value) - title.getStyle().fontColor = Color.RED; - else - title.getStyle().fontColor = Color.WHITE; - } - + if (value) + title.getStyle().fontColor = Color.RED; + else + title.getStyle().fontColor = Color.WHITE; + } + public abstract String getText(); - + public abstract void setText(String text); - - public String getTitle() { - return title.getText().toString(); - } - - public Actor getField() { - return field; - } - + + public String getTitle() { + return title.getText().toString(); + } + + public Actor getField() { + return field; + } + public boolean validateField() { - + String s = getText(); - - if(mandatory) { - if(s == null || s.trim().isEmpty()) { + + if (mandatory) { + if (s == null || s.trim().isEmpty()) { setError(true); return false; - } + } } - - setError(false); + + setError(false); return true; } } diff --git a/adventure-editor/src/main/resources/versions.properties b/adventure-editor/src/main/resources/versions.properties index 53cc7dffa..360f98c04 100644 --- a/adventure-editor/src/main/resources/versions.properties +++ b/adventure-editor/src/main/resources/versions.properties @@ -2,7 +2,7 @@ androidAPILevel=23 androidGradlePluginVersion=2.3.0 bladeInkVersion=0.4.4 buildToolsVersion=23.0.3 -libgdxVersion=1.9.8 -roboVMGradlePluginVersion=2.3.3 -roboVMVersion=2.3.3 -version=2.0.6 \ No newline at end of file +libgdxVersion=1.9.9 +roboVMGradlePluginVersion=2.3.5 +roboVMVersion=2.3.5 +version=2.0.9 \ No newline at end of file diff --git a/blade-engine/src/com/bladecoder/engine/ink/InkManager.java b/blade-engine/src/com/bladecoder/engine/ink/InkManager.java index 5e98f455f..4255eddb6 100644 --- a/blade-engine/src/com/bladecoder/engine/ink/InkManager.java +++ b/blade-engine/src/com/bladecoder/engine/ink/InkManager.java @@ -32,6 +32,7 @@ import com.bladecoder.ink.runtime.ListDefinition; import com.bladecoder.ink.runtime.Story; + public class InkManager implements VerbRunner, Serializable { public final static char NAME_VALUE_TAG_SEPARATOR = ':'; public final static char NAME_VALUE_PARAM_SEPARATOR = '='; @@ -219,6 +220,7 @@ private void continueMaximally() { } else if (cb != null || sCb != null) { if (cb == null) { cb = ActionCallbackSerialization.find(sCb); + sCb = null; } ActionCallbackQueue.add(cb); @@ -374,6 +376,7 @@ synchronized public void runPath(String path, ActionCallback cb) throws Exceptio } this.cb = cb; + sCb = null; story.choosePathString(path); continueMaximally(); diff --git a/blade-engine/src/com/bladecoder/engine/ui/CreditsScreen.java b/blade-engine/src/com/bladecoder/engine/ui/CreditsScreen.java index bd80e0cf8..626ff0cbc 100644 --- a/blade-engine/src/com/bladecoder/engine/ui/CreditsScreen.java +++ b/blade-engine/src/com/bladecoder/engine/ui/CreditsScreen.java @@ -70,8 +70,7 @@ public class CreditsScreen extends ScreenAdapter implements BladeScreen { private final InputProcessor inputProcessor = new InputAdapter() { @Override public boolean keyUp(int keycode) { - if (keycode == Input.Keys.ESCAPE - || keycode == Input.Keys.BACK) + if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) ui.setCurrentScreen(Screens.MENU_SCREEN); return true; @@ -110,7 +109,8 @@ public void render(float delta) { for (int i = stringHead; i < credits.size(); i++) { String s = credits.get(i); - char type = 'c'; // types are 'c' -> credit, 't' -> title, 'i' -> image, 's' -> space, 'm' -> music + char type = 'c'; // types are 'c' -> credit, 't' -> title, 'i' -> image, 's' -> space, 'm' -> + // music if (s.indexOf('#') != -1) { type = s.charAt(0); @@ -118,23 +118,23 @@ public void render(float delta) { } switch (type) { - case 't': - y = processCreditTitle(batch, width, height, y, i, s); - break; - case 'i': - y = processCreditImage(batch, width, height, y, i, s); - break; - case 's': - y = processCreditSpace(height, y, i, s); - break; - case 'm': - processCreditMusic(s); - credits.remove(i); - i--; - break; - default: - y = processCreditDefault(batch, width, height, y, i, s); - break; + case 't': + y = processCreditTitle(batch, width, height, y, i, s); + break; + case 'i': + y = processCreditImage(batch, width, height, y, i, s); + break; + case 's': + y = processCreditSpace(height, y, i, s); + break; + case 'm': + processCreditMusic(s); + credits.remove(i); + i--; + break; + default: + y = processCreditDefault(batch, width, height, y, i, s); + break; } if (y < 0) { @@ -188,22 +188,33 @@ private float processCreditSpace(int height, float y, int i, String s) { private void processCreditMusic(final String s) { if (music != null) music.dispose(); - + final String sound = EngineAssetManager.getInstance().checkIOSSoundName("music/" + s); new Thread() { @Override public void run() { music = Gdx.audio.newMusic(EngineAssetManager.getInstance().getAsset(sound)); - + try { music.play(); - } catch(Exception e) { - // sometimes the play method fails on desktop. + } catch (Exception e) { + + // DEAL WITH OPENAL BUG + if (e.getMessage() != null && e.getMessage().contains("40963")) { + EngineLogger.debug("!!!!!!!!!!!!!!!!!!!!!!!ERROR playing music trying again...!!!!!!!!!!!!!!!"); + + music = Gdx.audio.newMusic(EngineAssetManager.getInstance().getAsset(sound)); + music.play(); + music.setVolume(0.5f); + + return; + } + EngineLogger.error("Error Playing music: " + s, e); } } - }.start(); + }.start(); } private float processCreditDefault(SpriteBatch batch, int width, int height, float y, int i, String s) { @@ -307,7 +318,7 @@ public void drawCenteredScreenX(SpriteBatch batch, BitmapFont font, CharSequence layout.setText(font, str, Color.WHITE, viewportWidth, Align.center, true); - //x = (viewportWidth - layout.width)/2; + // x = (viewportWidth - layout.width)/2; font.draw(batch, layout, x, y); } diff --git a/blade-engine/src/com/bladecoder/engine/ui/DialogUI.java b/blade-engine/src/com/bladecoder/engine/ui/DialogUI.java index 860f77083..79c506177 100644 --- a/blade-engine/src/com/bladecoder/engine/ui/DialogUI.java +++ b/blade-engine/src/com/bladecoder/engine/ui/DialogUI.java @@ -18,8 +18,6 @@ import java.util.List; import com.badlogic.gdx.scenes.scene2d.Actor; -import com.badlogic.gdx.scenes.scene2d.Event; -import com.badlogic.gdx.scenes.scene2d.EventListener; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; @@ -33,6 +31,7 @@ import com.bladecoder.engine.i18n.I18N; import com.bladecoder.engine.model.World; import com.bladecoder.engine.util.DPIUtils; +import com.bladecoder.engine.util.EngineLogger; public class DialogUI extends ScrollPane { public static final String DIALOG_END_COMMAND = "dialog_end"; @@ -70,29 +69,6 @@ public DialogUI(UI ui) { setVisible(false); panel.defaults().expandX().fillX().top().left().padBottom(DPIUtils.getSpacing()); - addListener(new EventListener() { - - @Override - public boolean handle(Event event) { - if (isScrollY()) { - - if (getScrollPercentY() > 0f && up.isVisible() == false) { - up.setVisible(true); - } else if (getScrollPercentY() == 0f && up.isVisible() == true) { - up.setVisible(false); - } - - if (getScrollPercentY() < 1f && down.isVisible() == false) { - down.setVisible(true); - } else if (getScrollPercentY() == 1f && down.isVisible() == true) { - down.setVisible(false); - } - } - - return false; - } - }); - up.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { @@ -107,27 +83,57 @@ public void changed(ChangeEvent event, Actor actor) { } }); } - + + private void setUpDownVisibility() { + EngineLogger.debug( + "setUpDownVisibility: " + isScrollY() + " maxY: " + getMaxY() + " Margin: " + DPIUtils.getMarginSize()); + if (isScrollY() && getMaxY() > DPIUtils.getMarginSize()) { + + if (getScrollPercentY() > 0f && up.isVisible() == false) { + up.setVisible(true); + } else if (getScrollPercentY() == 0f && up.isVisible() == true) { + up.setVisible(false); + } + + if (getScrollPercentY() < 1f && down.isVisible() == false) { + down.setVisible(true); + } else if (getScrollPercentY() == 1f && down.isVisible() == true) { + down.setVisible(false); + } + } else { + up.setVisible(false); + down.setVisible(false); + } + } + @Override - public void setVisible (boolean visible) { + public void setVisible(boolean visible) { super.setVisible(visible); - - if(visible) { - if(getParent() != null) + + if (visible) { + if (getParent() != null) show(); } else { + up.setVisible(false); + down.setVisible(false); up.remove(); down.remove(); } } + @Override + public void setScrollY(float pixels) { + super.setScrollY(pixels); + setUpDownVisibility(); + } + private void show() { choices = World.getInstance().getDialogOptions(); if (choices.size() == 0) return; - else if (style.autoselect && choices.size() == 1) { + else if (style.autoselect && choices.size() == 1) { // If only has one option, autoselect it select(0); return; @@ -149,6 +155,7 @@ else if (style.autoselect && choices.size() == 1) { ob.getLabel().setAlignment(Align.left); ob.addListener(new ClickListener() { + @Override public void clicked(InputEvent event, float x, float y) { int i = (Integer) event.getListenerActor().getUserObject(); @@ -167,12 +174,14 @@ public void clicked(InputEvent event, float x, float y) { getStage().addActor(up); up.setSize(size, size); up.setPosition(getX() + getWidth() - size - margin, getY() + getHeight() - margin - size); - up.setVisible(false); getStage().addActor(down); down.setSize(size, size); down.setPosition(getX() + getWidth() - size - margin, getY() + margin); - down.setVisible(false); + + layout(); + + setUpDownVisibility(); } private void select(int i) { @@ -192,7 +201,7 @@ static public class DialogUIStyle { public Drawable background; public TextButtonStyle textButtonStyle; - + // If only one option is visible, auto select it. public boolean autoselect = true; diff --git a/blade-engine/src/com/bladecoder/engine/ui/LoadSaveScreen.java b/blade-engine/src/com/bladecoder/engine/ui/LoadSaveScreen.java index 7f7bcd08c..111fa695b 100644 --- a/blade-engine/src/com/bladecoder/engine/ui/LoadSaveScreen.java +++ b/blade-engine/src/com/bladecoder/engine/ui/LoadSaveScreen.java @@ -24,8 +24,8 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; -import com.badlogic.gdx.ScreenAdapter; import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.ScreenAdapter; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; @@ -37,13 +37,13 @@ import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.Button.ButtonStyle; -import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle; import com.badlogic.gdx.scenes.scene2d.ui.Container; import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.utils.Drawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; @@ -71,7 +71,7 @@ public class LoadSaveScreen extends ScreenAdapter implements BladeScreen { private int slotHeight = 0; // texture list for final dispose - private final ArrayList textureList = new ArrayList(); + private final ArrayList textureList = new ArrayList<>(); private Pointer pointer; @@ -123,7 +123,7 @@ public void show() { stage = new Stage(new ScreenViewport()); slotWidth = (int) (stage.getViewport().getWorldWidth() / (ROW_SLOTS + 1) - 2 * pad); - slotHeight = (int) (slotWidth * stage.getViewport().getScreenHeight() / stage.getViewport().getScreenWidth()); + slotHeight = slotWidth * stage.getViewport().getScreenHeight() / stage.getViewport().getScreenWidth(); LoadSaveScreenStyle style = skin.get(LoadSaveScreenStyle.class); @@ -146,6 +146,7 @@ public void show() { Button back = new Button(skin, "back"); back.addListener(new ClickListener() { + @Override public void clicked(InputEvent event, float x, float y) { ui.setCurrentScreen(Screens.MENU_SCREEN); } @@ -153,7 +154,7 @@ public void clicked(InputEvent event, float x, float y) { Table header = new Table(); // header.padBottom(pad); - Container