Merge pull request #2729 from kevlahnota/newmaster2

update dialog buttons
This commit is contained in:
Anthony Calosa
2023-03-22 16:25:49 +08:00
committed by GitHub
2 changed files with 242 additions and 285 deletions

View File

@@ -19,6 +19,8 @@ import com.github.tommyettinger.textra.TextraLabel;
import forge.Forge; import forge.Forge;
import forge.adventure.stage.GameHUD; import forge.adventure.stage.GameHUD;
import forge.adventure.util.*; import forge.adventure.util.*;
import forge.sound.SoundEffectType;
import forge.sound.SoundSystem;
/** /**
* Base class for an GUI scene where the elements are loaded from a json file * Base class for an GUI scene where the elements are loaded from a json file
@@ -27,86 +29,83 @@ public class UIScene extends Scene {
protected UIActor ui; protected UIActor ui;
public static class Selectable<T extends Actor> public static class Selectable<T extends Actor> {
{
public T actor; public T actor;
public float getY()
{ public float getY() {
Actor act=actor; Actor act = actor;
float y=0; float y = 0;
while (act!=null) while (act != null) {
{ y += act.getY();
y+=act.getY(); act = act.getParent();
act=act.getParent();
} }
return y; return y;
} }
public float getX()
{ public float getX() {
Actor act=actor; Actor act = actor;
float x=0; float x = 0;
while (act!=null) while (act != null) {
{ x += act.getX();
x+=act.getX(); act = act.getParent();
act=act.getParent();
} }
return x; return x;
} }
public Selectable(T newActor) { public Selectable(T newActor) {
actor=newActor; actor = newActor;
} }
public void onSelect(UIScene scene) public void onSelect(UIScene scene) {
{
} }
public void onDeSelect()
{ public void onDeSelect() {
//actor.fire(UIScene.eventExit()); //actor.fire(UIScene.eventExit());
} }
public void onPressDown(UIScene scene)
{ public void onPressDown(UIScene scene) {
if(actor instanceof TextField) if (actor instanceof TextField) {
{ scene.requestTextInput(((TextField) actor).getText(), text -> ((TextField) actor).setText(text));
scene.requestTextInput(((TextField) actor).getText(),text-> ((TextField) actor).setText(text));
} }
actor.fire(UIScene.eventTouchDown()); actor.fire(UIScene.eventTouchDown());
} }
public void onPressUp()
{ public void onPressUp() {
actor.fire(UIScene.eventTouchUp()); actor.fire(UIScene.eventTouchUp());
} }
public float yDiff(Selectable finalOne) { public float yDiff(Selectable finalOne) {
return Math.abs(finalOne.getY()-getY()); return Math.abs(finalOne.getY() - getY());
} }
public float xDiff(Selectable finalOne) { public float xDiff(Selectable finalOne) {
return Math.abs(finalOne.getX()-getX()); return Math.abs(finalOne.getX() - getX());
} }
} }
static final public int ButtonYes=0x1;
static final public int ButtonNo=0x2; static final public int ButtonYes = 0x1;
static final public int ButtonOk=0x4; static final public int ButtonNo = 0x2;
static final public int ButtonAbort=0x8; static final public int ButtonOk = 0x4;
static final public int ButtonAbort = 0x8;
public Dialog prepareDialog(String header, int buttons, Runnable onOkOrYes) { public Dialog prepareDialog(String header, int buttons, Runnable onOkOrYes) {
Dialog dialog =new Dialog(header, Controls.getSkin()) Dialog dialog = new Dialog(header, Controls.getSkin()) {
{ protected void result(Object object) {
protected void result(Object object) SoundSystem.instance.play(SoundEffectType.ButtonPress, false);
{ if (onOkOrYes != null && object != null && object.equals(true))
if(onOkOrYes!=null&&object!=null&&object.equals(true))
onOkOrYes.run(); onOkOrYes.run();
this.hide(); this.hide();
removeDialog(); removeDialog();
} }
}; };
if((buttons&ButtonYes)!=0) if ((buttons & ButtonYes) != 0)
dialog.button(Forge.getLocalizer().getMessage("lblYes"), true); dialog.button(Forge.getLocalizer().getMessage("lblYes"), true);
if((buttons&ButtonNo)!=0) if ((buttons & ButtonNo) != 0)
dialog.button(Forge.getLocalizer().getMessage("lblNo"), false); dialog.button(Forge.getLocalizer().getMessage("lblNo"), false);
if((buttons&ButtonOk)!=0) if ((buttons & ButtonOk) != 0)
dialog.button(Forge.getLocalizer().getMessage("lblOk"), true); dialog.button(Forge.getLocalizer().getMessage("lblOk"), true);
if((buttons&ButtonAbort)!=0) if ((buttons & ButtonAbort) != 0)
dialog.button(Forge.getLocalizer().getMessage("lblAbort"), false); dialog.button(Forge.getLocalizer().getMessage("lblAbort"), false);
dialog.setMovable(false); dialog.setMovable(false);
@@ -114,16 +113,16 @@ public class UIScene extends Scene {
dialog.setResizable(false); dialog.setResizable(false);
return dialog; return dialog;
} }
public void showDialog(Dialog dialog)
{ public void showDialog(Dialog dialog) {
stage.addActor(dialog); stage.addActor(dialog);
possibleSelectionStack.add(new Array<>()); possibleSelectionStack.add(new Array<>());
addToSelectable(dialog.getContentTable()); addToSelectable(dialog.getContentTable());
addToSelectable(dialog.getButtonTable()); addToSelectable(dialog.getButtonTable());
dialog.getColor().a=0; dialog.getColor().a = 0;
stage.setKeyboardFocus(dialog); stage.setKeyboardFocus(dialog);
stage.setScrollFocus(dialog); stage.setScrollFocus(dialog);
for(Dialog otherDialogs:dialogs) for (Dialog otherDialogs : dialogs)
otherDialogs.hide(); otherDialogs.hide();
dialogs.add(dialog); dialogs.add(dialog);
selectFirst(); selectFirst();
@@ -145,41 +144,42 @@ public class UIScene extends Scene {
//possibleSelection=keyboardDialog.keys(); //possibleSelection=keyboardDialog.keys();
} }
public Array< Array<Selectable>> possibleSelectionStack=new Array<>(); public Array<Array<Selectable>> possibleSelectionStack = new Array<>();
public Array< Dialog> dialogs=new Array<>(); public Array<Dialog> dialogs = new Array<>();
public Array<Selectable> getPossibleSelection()
{ public Array<Selectable> getPossibleSelection() {
if(possibleSelectionStack.isEmpty()) if (possibleSelectionStack.isEmpty())
possibleSelectionStack.add(ui.selectActors); possibleSelectionStack.add(ui.selectActors);
return possibleSelectionStack.get(possibleSelectionStack.size-1); return possibleSelectionStack.get(possibleSelectionStack.size - 1);
} }
protected Stage stage; protected Stage stage;
String uiFile; String uiFile;
public static InputEvent eventTouchUp()
{ public static InputEvent eventTouchUp() {
InputEvent event = new InputEvent(); InputEvent event = new InputEvent();
event.setPointer(-1); event.setPointer(-1);
event.setType(InputEvent.Type.touchUp); event.setType(InputEvent.Type.touchUp);
return event; return event;
} }
public static InputEvent eventTouchDown()
{ public static InputEvent eventTouchDown() {
InputEvent event = new InputEvent(); InputEvent event = new InputEvent();
event.setPointer(-1); event.setPointer(-1);
event.setType(InputEvent.Type.touchDown); event.setType(InputEvent.Type.touchDown);
return event; return event;
} }
public static InputEvent eventExit()
{ public static InputEvent eventExit() {
InputEvent event = new InputEvent(); InputEvent event = new InputEvent();
event.setPointer(-1); event.setPointer(-1);
event.setType(InputEvent.Type.exit); event.setType(InputEvent.Type.exit);
return event; return event;
} }
public static InputEvent eventEnter()
{ public static InputEvent eventEnter() {
InputEvent event = new InputEvent(); InputEvent event = new InputEvent();
event.setPointer(-1); event.setPointer(-1);
event.setType(InputEvent.Type.enter); event.setType(InputEvent.Type.enter);
@@ -188,26 +188,30 @@ public class UIScene extends Scene {
@Override @Override
public boolean buttonUp(Controller controller, int keycode) { public boolean buttonUp(Controller controller, int keycode) {
return stage.keyUp(KeyBinding.controllerButtonToKey(controller,keycode)); return stage.keyUp(KeyBinding.controllerButtonToKey(controller, keycode));
} }
@Override @Override
public boolean buttonDown(Controller controller, int keycode) { public boolean buttonDown(Controller controller, int keycode) {
return stage.keyDown(KeyBinding.controllerButtonToKey(controller,keycode)); return stage.keyDown(KeyBinding.controllerButtonToKey(controller, keycode));
} }
protected void addToSelectable(Table table) { protected void addToSelectable(Table table) {
for(Cell cell:table.getCells()) for (Cell cell : table.getCells()) {
{ if (cell.getActor() != null && cell.getActor().getClass() != Actor.class && !(cell.getActor() instanceof Label) && !(cell.getActor() instanceof TextraLabel))
if(cell.getActor()!=null&&cell.getActor().getClass()!=Actor.class&&!(cell.getActor()instanceof Label)&&!(cell.getActor()instanceof TextraLabel))
getPossibleSelection().add(new Selectable(cell.getActor())); getPossibleSelection().add(new Selectable(cell.getActor()));
} }
} }
protected void addToSelectable(Button button)//prevent to addToSelectable(Table) fallback protected void addToSelectable(Button button)//prevent to addToSelectable(Table) fallback
{ {
getPossibleSelection().add(new Selectable(button)); getPossibleSelection().add(new Selectable(button));
} }
protected void addToSelectable(Actor button) { protected void addToSelectable(Actor button) {
getPossibleSelection().add(new Selectable(button)); getPossibleSelection().add(new Selectable(button));
} }
protected void addToSelectable(Selectable selectable) { protected void addToSelectable(Selectable selectable) {
getPossibleSelection().add(selectable); getPossibleSelection().add(selectable);
} }
@@ -225,11 +229,13 @@ public class UIScene extends Scene {
keyReleased(keycode); keyReleased(keycode);
return super.keyUp(keycode); return super.keyUp(keycode);
} }
@Override @Override
public boolean keyDown(int keyCode) { public boolean keyDown(int keyCode) {
keyPressed(keyCode); keyPressed(keyCode);
return super.keyDown(keyCode); return super.keyDown(keyCode);
} }
@Override @Override
public boolean mouseMoved(int screenX, int screenY) { public boolean mouseMoved(int screenX, int screenY) {
pointerMoved(screenX, screenY); pointerMoved(screenX, screenY);
@@ -237,9 +243,8 @@ public class UIScene extends Scene {
} }
}; };
ui = new UIActor(Config.instance().getFile(uiFile)); ui = new UIActor(Config.instance().getFile(uiFile));
for(Actor actor:ui.getChildren()) for (Actor actor : ui.getChildren()) {
{ if (actor instanceof ScrollPane)
if(actor instanceof ScrollPane)
stage.setScrollFocus(actor); stage.setScrollFocus(actor);
} }
possibleSelectionStack.add(ui.selectActors); possibleSelectionStack.add(ui.selectActors);
@@ -249,21 +254,17 @@ public class UIScene extends Scene {
private void removeDialog() { private void removeDialog() {
if(!dialogs.isEmpty()) if (!dialogs.isEmpty()) {
{ dialogs.get(dialogs.size - 1).remove();
dialogs.get(dialogs.size-1).remove(); dialogs.removeIndex(dialogs.size - 1);
dialogs.removeIndex(dialogs.size-1);
if(!dialogs.isEmpty()) if (!dialogs.isEmpty())
dialogs.get(dialogs.size-1).show(stage); dialogs.get(dialogs.size - 1).show(stage);
} }
if(possibleSelectionStack.isEmpty()) if (possibleSelectionStack.isEmpty()) {
{
getPossibleSelection(); getPossibleSelection();
} } else {
else possibleSelectionStack.removeIndex(possibleSelectionStack.size - 1);
{
possibleSelectionStack.removeIndex(possibleSelectionStack.size-1);
} }
} }
@@ -295,92 +296,80 @@ public class UIScene extends Scene {
Forge.switchToLast(); Forge.switchToLast();
return true; return true;
} }
public Selectable getSelected()
{ public Selectable getSelected() {
for(Selectable selectable: getPossibleSelection()) for (Selectable selectable : getPossibleSelection()) {
{ if (stage.getKeyboardFocus() == selectable.actor)
if(stage.getKeyboardFocus()==selectable.actor)
return selectable; return selectable;
} }
return null; return null;
} }
public boolean keyReleased(int keycode)
{ public boolean keyReleased(int keycode) {
ui.pressUp(keycode); ui.pressUp(keycode);
if(!dialogShowing()) if (!dialogShowing()) {
{ Button pressedButton = ui.buttonPressed(keycode);
Button pressedButton=ui.buttonPressed(keycode); if (pressedButton != null) {
if(pressedButton!=null) if (pressedButton.isVisible())
{
if(pressedButton.isVisible())
pressedButton.fire(eventTouchUp()); pressedButton.fire(eventTouchUp());
} }
} }
if(KeyBinding.Use.isPressed(keycode)){ if (KeyBinding.Use.isPressed(keycode)) {
if(getSelected()!=null) if (getSelected() != null)
getSelected().onPressUp();//order is important, this might remove a dialog getSelected().onPressUp();//order is important, this might remove a dialog
} }
return true; return true;
} }
public boolean keyPressed(int keycode) { public boolean keyPressed(int keycode) {
Selectable selection=getSelected(); Selectable selection = getSelected();
ui.pressDown(keycode); ui.pressDown(keycode);
if(stage.getKeyboardFocus() instanceof SelectBox) if (stage.getKeyboardFocus() instanceof SelectBox) {
{ SelectBox box = (SelectBox) stage.getKeyboardFocus();
SelectBox box=(SelectBox) stage.getKeyboardFocus(); if (box.getScrollPane().hasParent()) {
if(box.getScrollPane().hasParent()) if (KeyBinding.Use.isPressed(keycode)) {
{
if(KeyBinding.Use.isPressed(keycode))
{
box.getSelection().choose(box.getList().getSelected()); box.getSelection().choose(box.getList().getSelected());
box.getScrollPane().hide(); box.getScrollPane().hide();
} }
return false; return false;
} }
} }
if(KeyBinding.Use.isPressed(keycode)){ if (KeyBinding.Use.isPressed(keycode)) {
if(selection!=null) if (selection != null)
selection.onPressDown(this); selection.onPressDown(this);
} }
if(KeyBinding.ScrollUp.isPressed(keycode)) if (KeyBinding.ScrollUp.isPressed(keycode)) {
{ Actor focus = stage.getScrollFocus();
Actor focus=stage.getScrollFocus(); if (focus != null && focus instanceof ScrollPane) {
if(focus!=null&&focus instanceof ScrollPane) ScrollPane scroll = ((ScrollPane) focus);
{ scroll.setScrollY(scroll.getScrollY() - 20);
ScrollPane scroll=((ScrollPane)focus);
scroll.setScrollY(scroll.getScrollY()-20);
} }
} }
if(KeyBinding.ScrollDown.isPressed(keycode)) if (KeyBinding.ScrollDown.isPressed(keycode)) {
{ Actor focus = stage.getScrollFocus();
Actor focus=stage.getScrollFocus(); if (focus != null && focus instanceof ScrollPane) {
if(focus!=null&&focus instanceof ScrollPane) ScrollPane scroll = ((ScrollPane) focus);
{ scroll.setScrollY(scroll.getScrollY() + 20);
ScrollPane scroll=((ScrollPane)focus);
scroll.setScrollY(scroll.getScrollY()+20);
} }
} }
if(KeyBinding.Down.isPressed(keycode)) if (KeyBinding.Down.isPressed(keycode))
selectNextDown(); selectNextDown();
if(KeyBinding.Up.isPressed(keycode)) if (KeyBinding.Up.isPressed(keycode))
selectNextUp(); selectNextUp();
if(!(stage.getKeyboardFocus() instanceof Selector)&&!(stage.getKeyboardFocus() instanceof TextField)&&!(stage.getKeyboardFocus() instanceof Slider)) if (!(stage.getKeyboardFocus() instanceof Selector) && !(stage.getKeyboardFocus() instanceof TextField) && !(stage.getKeyboardFocus() instanceof Slider)) {
{ if (KeyBinding.Right.isPressed(keycode))
if(KeyBinding.Right.isPressed(keycode))
selectNextRight(); selectNextRight();
if(KeyBinding.Left.isPressed(keycode)) if (KeyBinding.Left.isPressed(keycode))
selectNextLeft(); selectNextLeft();
} }
if(!dialogShowing()) if (!dialogShowing()) {
{ Button pressedButton = ui.buttonPressed(keycode);
Button pressedButton=ui.buttonPressed(keycode); if (pressedButton != null) {
if(pressedButton!=null) if (pressedButton.isVisible())
{
if(pressedButton.isVisible())
pressedButton.fire(eventTouchDown()); pressedButton.fire(eventTouchDown());
} }
} }
@@ -396,11 +385,13 @@ public class UIScene extends Scene {
public void disconnected(final Controller controller) { public void disconnected(final Controller controller) {
ui.controllerDisconnected(); ui.controllerDisconnected();
} }
@Override @Override
public void connected(final Controller controller) { public void connected(final Controller controller) {
selectFirst(); selectFirst();
ui.controllerConnected(); ui.controllerConnected();
} }
public boolean pointerMoved(int screenX, int screenY) { public boolean pointerMoved(int screenX, int screenY) {
unselectActors(); unselectActors();
return false; return false;
@@ -417,152 +408,128 @@ public class UIScene extends Scene {
} }
}, 0.10f); }, 0.10f);
} }
public void unselectActors() { public void unselectActors() {
for (Selectable selectable : getPossibleSelection()) { for (Selectable selectable : getPossibleSelection()) {
selectable.onDeSelect(); selectable.onDeSelect();
} }
} }
Array<Selectable> visibleSelection()
{ Array<Selectable> visibleSelection() {
Array<Selectable> selectables=new Array<>(); Array<Selectable> selectables = new Array<>();
for (Selectable selectable : getPossibleSelection()) { for (Selectable selectable : getPossibleSelection()) {
if(selectable.actor.isVisible()) if (selectable.actor.isVisible()) {
{ if (selectable.actor instanceof Button) {
if(selectable.actor instanceof Button) if (!((Button) selectable.actor).isDisabled())
{
if(!((Button)selectable.actor).isDisabled())
selectables.add(selectable); selectables.add(selectable);
} } else {
else
{
selectables.add(selectable); selectables.add(selectable);
} }
} }
} }
return selectables; return selectables;
} }
public void selectNextDown() { public void selectNextDown() {
if(getSelected()==null) if (getSelected() == null) {
{
selectFirst(); selectFirst();
} } else {
else Selectable current = getSelected();
{ Array<Selectable> candidates = new Array<>();
Selectable current =getSelected(); for (Selectable selectable : visibleSelection()) {
Array<Selectable> candidates=new Array<>(); if (selectable.xDiff(current) < 0.1 && selectable != current)
for(Selectable selectable:visibleSelection())
{
if(selectable.xDiff(current)<0.1&&selectable!=current)
candidates.add(selectable); candidates.add(selectable);
} }
if(candidates.isEmpty()) if (candidates.isEmpty())
candidates.addAll(visibleSelection()); candidates.addAll(visibleSelection());
Selectable finalOne=null; Selectable finalOne = null;
Selectable fallback=null; Selectable fallback = null;
for(Selectable candidate:candidates) for (Selectable candidate : candidates) {
{ if (fallback == null || candidate.getY() > fallback.getY())
if(fallback==null||candidate.getY()>fallback.getY()) fallback = candidate;
fallback=candidate; if (candidate.getY() < current.getY() && (finalOne == null || current.yDiff(candidate) < current.yDiff(finalOne))) {
if(candidate.getY()<current.getY()&&(finalOne==null||current.yDiff(candidate)<current.yDiff(finalOne))) finalOne = candidate;
{
finalOne=candidate;
} }
} }
if(finalOne==null) if (finalOne == null)
for(Selectable candidate:visibleSelection()) for (Selectable candidate : visibleSelection()) {
{ if (candidate.getY() < current.getY() && (finalOne == null || current.yDiff(candidate) < current.yDiff(finalOne))) {
if(candidate.getY()<current.getY()&&(finalOne==null||current.yDiff(candidate)<current.yDiff(finalOne))) finalOne = candidate;
{
finalOne=candidate;
} }
} }
if(finalOne!=null) if (finalOne != null)
selectActor(finalOne); selectActor(finalOne);
else if(fallback!=null) else if (fallback != null)
selectActor(fallback); selectActor(fallback);
} }
} }
private void selectNextLeft() { private void selectNextLeft() {
if(getSelected()==null) if (getSelected() == null) {
{
selectFirst(); selectFirst();
} } else {
else Selectable current = getSelected();
{ Array<Selectable> candidates = new Array<>();
Selectable current =getSelected(); for (Selectable selectable : visibleSelection()) {
Array<Selectable> candidates=new Array<>(); if (selectable.yDiff(current) < 0.1 && selectable != current)
for(Selectable selectable:visibleSelection())
{
if(selectable.yDiff(current)<0.1&&selectable!=current)
candidates.add(selectable); candidates.add(selectable);
} }
if(candidates.isEmpty()) if (candidates.isEmpty())
candidates.addAll(visibleSelection()); candidates.addAll(visibleSelection());
Selectable finalOne=null; Selectable finalOne = null;
Selectable fallback=null; Selectable fallback = null;
for(Selectable candidate:candidates) for (Selectable candidate : candidates) {
{ if (fallback == null || candidate.getX() > fallback.getX())
if(fallback==null||candidate.getX()>fallback.getX()) fallback = candidate;
fallback=candidate; if (candidate.getX() < current.getX() && (finalOne == null || current.xDiff(candidate) < current.xDiff(finalOne))) {
if(candidate.getX()<current.getX()&&(finalOne==null||current.xDiff(candidate)<current.xDiff(finalOne))) finalOne = candidate;
{
finalOne=candidate;
} }
} }
if(finalOne==null) if (finalOne == null)
for(Selectable candidate:visibleSelection()) for (Selectable candidate : visibleSelection()) {
{ if (candidate.getX() < current.getX() && (finalOne == null || current.xDiff(candidate) < current.xDiff(finalOne))) {
if(candidate.getX()<current.getX()&&(finalOne==null||current.xDiff(candidate)<current.xDiff(finalOne))) finalOne = candidate;
{
finalOne=candidate;
} }
} }
if(finalOne!=null) if (finalOne != null)
selectActor(finalOne); selectActor(finalOne);
else if(fallback!=null) else if (fallback != null)
selectActor(fallback); selectActor(fallback);
} }
} }
private void selectNextRight() { private void selectNextRight() {
if(getSelected()==null) if (getSelected() == null) {
{
selectFirst(); selectFirst();
} } else {
else Selectable current = getSelected();
{ Array<Selectable> candidates = new Array<>();
Selectable current =getSelected(); for (Selectable selectable : visibleSelection()) {
Array<Selectable> candidates=new Array<>(); if (selectable.yDiff(current) < 0.1 && selectable != current)
for(Selectable selectable:visibleSelection())
{
if(selectable.yDiff(current)<0.1&&selectable!=current)
candidates.add(selectable); candidates.add(selectable);
} }
if(candidates.isEmpty()) if (candidates.isEmpty())
candidates.addAll(visibleSelection()); candidates.addAll(visibleSelection());
Selectable finalOne=null; Selectable finalOne = null;
Selectable fallback=null; Selectable fallback = null;
for(Selectable candidate:candidates) for (Selectable candidate : candidates) {
{ if (fallback == null || candidate.getX() < fallback.getX())
if(fallback==null||candidate.getX()<fallback.getX()) fallback = candidate;
fallback=candidate; if (candidate.getX() > current.getX() && (finalOne == null || current.xDiff(candidate) < current.xDiff(finalOne))) {
if(candidate.getX()>current.getX()&&(finalOne==null||current.xDiff(candidate)<current.xDiff(finalOne))) finalOne = candidate;
{
finalOne=candidate;
} }
} }
if(finalOne==null) if (finalOne == null)
for(Selectable candidate:visibleSelection()) for (Selectable candidate : visibleSelection()) {
{ if (candidate.getX() > current.getX() && (finalOne == null || current.xDiff(candidate) < current.xDiff(finalOne))) {
if(candidate.getX()>current.getX()&&(finalOne==null||current.xDiff(candidate)<current.xDiff(finalOne))) finalOne = candidate;
{
finalOne=candidate;
} }
} }
if(finalOne!=null) if (finalOne != null)
selectActor(finalOne); selectActor(finalOne);
else if(fallback!=null) else if (fallback != null)
selectActor(fallback); selectActor(fallback);
} }
@@ -571,43 +538,35 @@ public class UIScene extends Scene {
public void selectNextUp() { public void selectNextUp() {
if(getSelected()==null) if (getSelected() == null) {
{
selectFirst(); selectFirst();
} } else {
else Selectable current = getSelected();
{ Array<Selectable> candidates = new Array<>();
Selectable current =getSelected(); for (Selectable selectable : visibleSelection()) {
Array<Selectable> candidates=new Array<>(); if (selectable.xDiff(current) < 0.1 && selectable != current)
for(Selectable selectable:visibleSelection())
{
if(selectable.xDiff(current)<0.1&&selectable!=current)
candidates.add(selectable); candidates.add(selectable);
} }
if(candidates.isEmpty()) if (candidates.isEmpty())
candidates.addAll(visibleSelection()); candidates.addAll(visibleSelection());
Selectable finalOne=null; Selectable finalOne = null;
Selectable fallback=null; Selectable fallback = null;
for(Selectable candidate:candidates) for (Selectable candidate : candidates) {
{ if (fallback == null || candidate.getY() < fallback.getY())
if(fallback==null||candidate.getY()<fallback.getY()) fallback = candidate;
fallback=candidate; if (candidate.getY() > current.getY() && (finalOne == null || current.yDiff(candidate) < current.yDiff(finalOne))) {
if(candidate.getY()>current.getY()&&(finalOne==null||current.yDiff(candidate)<current.yDiff(finalOne))) finalOne = candidate;
{
finalOne=candidate;
} }
} }
if(finalOne==null)//allowAllNow if (finalOne == null)//allowAllNow
for(Selectable candidate:visibleSelection()) for (Selectable candidate : visibleSelection()) {
{ if (candidate.getY() > current.getY() && (finalOne == null || current.yDiff(candidate) < current.yDiff(finalOne))) {
if(candidate.getY()>current.getY()&&(finalOne==null||current.yDiff(candidate)<current.yDiff(finalOne))) finalOne = candidate;
{
finalOne=candidate;
} }
} }
if(finalOne!=null) if (finalOne != null)
selectActor(finalOne); selectActor(finalOne);
else if(fallback!=null) else if (fallback != null)
selectActor(fallback); selectActor(fallback);
} }
@@ -615,22 +574,18 @@ public class UIScene extends Scene {
private void selectFirst() { private void selectFirst() {
Selectable result=null; Selectable result = null;
for(Selectable candidate: getPossibleSelection()) for (Selectable candidate : getPossibleSelection()) {
{ if (result == null || candidate.getY() > result.getY()) {
if(result==null|| candidate.getY()>result.getY()) result = candidate;
{
result=candidate;
} }
} }
selectActor(result); selectActor(result);
} }
ScrollPane scrollPaneOfActor(Actor actor)
{ ScrollPane scrollPaneOfActor(Actor actor) {
while (actor!=null) while (actor != null) {
{ if (actor.getParent() instanceof ScrollPane) {
if(actor.getParent() instanceof ScrollPane)
{
return (ScrollPane) actor.getParent(); return (ScrollPane) actor.getParent();
} }
actor = actor.getParent(); actor = actor.getParent();
@@ -642,15 +597,15 @@ public class UIScene extends Scene {
unselectActors(); unselectActors();
if(actor==null)return; if (actor == null) return;
stage.setKeyboardFocus(actor.actor); stage.setKeyboardFocus(actor.actor);
ScrollPane scrollPane=scrollPaneOfActor(actor.actor); ScrollPane scrollPane = scrollPaneOfActor(actor.actor);
if(scrollPane!=null) if (scrollPane != null) {
{ scrollPane.scrollTo(actor.actor.getX(), actor.actor.getY(), actor.actor.getWidth(), actor.actor.getHeight(), false, false);
scrollPane.scrollTo(actor.actor.getX(),actor.actor.getY(),actor.actor.getWidth(),actor.actor.getHeight(),false,false);
} }
actor.onSelect(this); actor.onSelect(this);
} }
Image screenImage; Image screenImage;
TextureRegion backgroundTexture; TextureRegion backgroundTexture;
@@ -659,6 +614,7 @@ public class UIScene extends Scene {
stage.cancelTouchFocus(); stage.cancelTouchFocus();
return super.leave(); return super.leave();
} }
@Override @Override
public void enter() { public void enter() {
if (screenImage != null) { if (screenImage != null) {
@@ -674,6 +630,7 @@ public class UIScene extends Scene {
Gdx.input.setInputProcessor(stage); Gdx.input.setInputProcessor(stage);
super.enter(); super.enter();
} }
public TextureRegion getUIBackground() { public TextureRegion getUIBackground() {
try { try {
Actor a = ui.getChild(0); Actor a = ui.getChild(0);

Binary file not shown.