update touch controls

This commit is contained in:
Anthony Calosa
2022-02-26 11:58:51 +08:00
parent 14d71ad278
commit 9c72cd2279
9 changed files with 86 additions and 46 deletions

View File

@@ -1023,7 +1023,7 @@ public class Forge implements ApplicationListener {
return fling(0,1000); return fling(0,1000);
} }
if(keyCode == Keys.BACK){ if(keyCode == Keys.BACK){
if (destroyThis) if ((destroyThis && !isMobileAdventureMode)||(splashScreen != null && splashScreen.isShowModeSelector()))
exitAnimation(false); exitAnimation(false);
else if(onHomeScreen() && isLandscapeMode()) else if(onHomeScreen() && isLandscapeMode())
back(); back();

View File

@@ -74,7 +74,7 @@ public class DeckSelectScene extends UIScene {
@Override @Override
public boolean keyPressed(int keycode) { public boolean keyPressed(int keycode) {
if (keycode == Input.Keys.ESCAPE) { if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) {
back(); back();
} }
return true; return true;

View File

@@ -59,7 +59,7 @@ public class InnScene extends UIScene {
@Override @Override
public boolean keyPressed(int keycode) { public boolean keyPressed(int keycode) {
if (keycode == Input.Keys.ESCAPE) { if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) {
done(); done();
} }
return true; return true;

View File

@@ -41,7 +41,7 @@ public class PlayerStatisticScene extends UIScene {
@Override @Override
public boolean keyPressed(int keycode) { public boolean keyPressed(int keycode) {
if (keycode == Input.Keys.ESCAPE) { if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) {
back(); back();
} }
return true; return true;
@@ -92,7 +92,7 @@ public class PlayerStatisticScene extends UIScene {
enemiesGroup.add((data.name)).fillX().align(Align.center).fillX().space(3, 10, 3, 10); enemiesGroup.add((data.name)).fillX().align(Align.center).fillX().space(3, 10, 3, 10);
enemiesGroup.add((entry.getValue().getLeft().toString())).space(3, 2, 3, 2); enemiesGroup.add((entry.getValue().getLeft().toString())).space(3, 2, 3, 2);
enemiesGroup.add(("/")).align(Align.center).space(3, 2, 3, 2); enemiesGroup.add(("/")).align(Align.center).space(3, 2, 3, 2);
enemiesGroup.add((entry.getValue().getRight().toString())).align(Align.center).space(0, 2, 0, 2); enemiesGroup.add((entry.getValue().getRight().toString())).align(Align.center).space(3, 2, 3, 2);
enemiesGroup.row().space(8); enemiesGroup.row().space(8);
} }

View File

@@ -104,7 +104,7 @@ public class RewardScene extends UIScene {
@Override @Override
public boolean keyPressed(int keycode) { public boolean keyPressed(int keycode) {
if (keycode == Input.Keys.ESCAPE) { if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) {
done(); done();
} }
return true; return true;

View File

@@ -60,7 +60,7 @@ public class SaveLoadScene extends UIScene {
@Override @Override
public void clicked(InputEvent event, float x, float y) { public void clicked(InputEvent event, float x, float y) {
try { try {
if(!button.isDisabled()) if (!button.isDisabled())
select(i); select(i);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@@ -126,7 +126,7 @@ public class SaveLoadScene extends UIScene {
@Override @Override
public boolean keyPressed(int keycode) { public boolean keyPressed(int keycode) {
if (keycode == Input.Keys.ESCAPE) { if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) {
back(); back();
} }
return true; return true;

View File

@@ -65,7 +65,7 @@ public class SettingsScene extends UIScene {
@Override @Override
public boolean keyPressed(int keycode) { public boolean keyPressed(int keycode) {
if (keycode == Input.Keys.ESCAPE) { if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) {
back(); back();
} }
return true; return true;
@@ -157,7 +157,7 @@ public class SettingsScene extends UIScene {
void addLabel(String name) { void addLabel(String name) {
Label label = new Label(name, Controls.GetSkin().get("white", Label.LabelStyle.class)); Label label = new Label(name, Controls.GetSkin().get("white", Label.LabelStyle.class));
settingGroup.row().space(5); settingGroup.row().space(5);
settingGroup.add(label).align(Align.left).pad(2,2, 2, 5); settingGroup.add(label).align(Align.left).pad(2, 2, 2, 5);
} }
@Override @Override

View File

@@ -16,11 +16,11 @@ public class StartScene extends UIScene {
Actor saveButton; Actor saveButton;
Actor resumeButton; Actor resumeButton;
public StartScene() public StartScene() {
{
super(GuiBase.isAndroid() ? "ui/start_menu_mobile.json" : "ui/start_menu.json"); super(GuiBase.isAndroid() ? "ui/start_menu_mobile.json" : "ui/start_menu.json");
} }
public boolean NewGame() { public boolean NewGame() {
Forge.switchScene(SceneType.NewGameScene.instance); Forge.switchScene(SceneType.NewGameScene.instance);
return true; return true;
@@ -57,9 +57,9 @@ public class StartScene extends UIScene {
@Override @Override
public void enter() { public void enter() {
boolean hasSaveButton=WorldSave.getCurrentSave().getWorld().getData() != null; boolean hasSaveButton = WorldSave.getCurrentSave().getWorld().getData() != null;
if(hasSaveButton) if (hasSaveButton)
hasSaveButton=!((TileMapScene)SceneType.TileMapScene.instance).currentMap().isInMap(); hasSaveButton = !((TileMapScene) SceneType.TileMapScene.instance).currentMap().isInMap();
saveButton.setVisible(hasSaveButton); saveButton.setVisible(hasSaveButton);
resumeButton.setVisible(WorldSave.getCurrentSave().getWorld().getData() != null); resumeButton.setVisible(WorldSave.getCurrentSave().getWorld().getData() != null);
Gdx.input.setInputProcessor(stage); //Start taking input from the ui Gdx.input.setInputProcessor(stage); //Start taking input from the ui
@@ -72,15 +72,14 @@ public class StartScene extends UIScene {
} }
@Override @Override
public boolean keyPressed(int keycode) public boolean keyPressed(int keycode) {
{ if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) {
if (keycode == Input.Keys.ESCAPE) if (WorldSave.getCurrentSave().getWorld().getData() != null)
{
if(WorldSave.getCurrentSave().getWorld().getData() != null)
Resume(); Resume();
} }
return true; return true;
} }
@Override @Override
public void resLoaded() { public void resLoaded() {
super.resLoaded(); super.resLoaded();

View File

@@ -4,15 +4,19 @@ import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.EventListener;
import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.Touchpad; import com.badlogic.gdx.scenes.scene2d.ui.Touchpad;
import com.badlogic.gdx.scenes.scene2d.ui.Touchpad.TouchpadStyle; import com.badlogic.gdx.scenes.scene2d.ui.Touchpad.TouchpadStyle;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.Drawable; import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Scaling; import com.badlogic.gdx.utils.Scaling;
import com.badlogic.gdx.utils.viewport.ScalingViewport; import com.badlogic.gdx.utils.viewport.ScalingViewport;
import forge.Forge; import forge.Forge;
@@ -36,6 +40,10 @@ public class GameHUD extends Stage {
private final Label lifePoints; private final Label lifePoints;
private final Label money; private final Label money;
private Image miniMap; private Image miniMap;
private TextButton deckActor, menuActor, statsActor;
private boolean deckPressed = false;
private boolean menuPressed = false;
private boolean statsPressed = false;
private UIActor ui; private UIActor ui;
private Touchpad touchpad; private Touchpad touchpad;
private TouchpadStyle touchpadStyle; private TouchpadStyle touchpadStyle;
@@ -52,7 +60,9 @@ public class GameHUD extends Stage {
ui = new UIActor(Config.instance().getFile(GuiBase.isAndroid() ? "ui/hud_mobile.json" : "ui/hud.json")); ui = new UIActor(Config.instance().getFile(GuiBase.isAndroid() ? "ui/hud_mobile.json" : "ui/hud.json"));
miniMap = ui.findActor("map"); miniMap = ui.findActor("map");
deckActor = ui.findActor("deck");
menuActor = ui.findActor("menu");
statsActor = ui.findActor("statistic");
miniMapPlayer = new Image(new Texture(Config.instance().getFile("ui/minimap_player.png"))); miniMapPlayer = new Image(new Texture(Config.instance().getFile("ui/minimap_player.png")));
//create touchpad skin //create touchpad skin
@@ -148,6 +158,13 @@ public class GameHUD extends Stage {
touchpad.setVisible(false); touchpad.setVisible(false);
MapStage.getInstance().GetPlayer().setMovementDirection(Vector2.Zero); MapStage.getInstance().GetPlayer().setMovementDirection(Vector2.Zero);
WorldStage.getInstance().GetPlayer().setMovementDirection(Vector2.Zero); WorldStage.getInstance().GetPlayer().setMovementDirection(Vector2.Zero);
//simulate button
checkButtonState(deckActor, pointer);
checkButtonState(menuActor, pointer);
checkButtonState(statsActor, pointer);
deckPressed = false;
menuPressed = false;
statsPressed = false;
return super.touchUp(screenX, screenY, pointer, button); return super.touchUp(screenX, screenY, pointer, button);
} }
@@ -181,7 +198,6 @@ public class GameHUD extends Stage {
boolean setPosition(int screenX, int screenY, int pointer, int button) { boolean setPosition(int screenX, int screenY, int pointer, int button) {
Vector2 c=new Vector2(); Vector2 c=new Vector2();
Vector2 c2=new Vector2();
Vector2 touch =new Vector2(); Vector2 touch =new Vector2();
screenToStageCoordinates(touch.set(screenX, screenY)); screenToStageCoordinates(touch.set(screenX, screenY));
screenToStageCoordinates(c.set(screenX, screenY)); screenToStageCoordinates(c.set(screenX, screenY));
@@ -189,40 +205,40 @@ public class GameHUD extends Stage {
float x=(c.x-miniMap.getX())/miniMap.getWidth(); float x=(c.x-miniMap.getX())/miniMap.getWidth();
float y=(c.y-miniMap.getY())/miniMap.getHeight(); float y=(c.y-miniMap.getY())/miniMap.getHeight();
float deckX = ui.findActor("deck").getX(); float deckX = deckActor.getX();
float deckY = ui.findActor("deck").getY(); float deckY = deckActor.getY();
float deckR = ui.findActor("deck").getRight(); float deckR = deckActor.getRight();
float deckT = ui.findActor("deck").getTop(); float deckT = deckActor.getTop();
float deckOriginX = ui.findActor("deck").getOriginX(); float deckOriginX = deckActor.getOriginX();
//deck button bounds //deck button bounds
if (c.x>=deckX&&c.x<=deckR&&c.y>=deckY&&c.y<=deckT) { if (c.x>=deckX&&c.x<=deckR&&c.y>=deckY&&c.y<=deckT) {
openDeck(); if (pointer < 1)
stageToScreenCoordinates(c2.set(deckOriginX, deckY)); deckPressed = true;
return super.touchDown((int)c2.x, (int)c2.y, pointer, button); return true;
} }
float menuX = ui.findActor("menu").getX(); float menuX = menuActor.getX();
float menuY = ui.findActor("menu").getY(); float menuY = menuActor.getY();
float menuR = ui.findActor("menu").getRight(); float menuR = menuActor.getRight();
float menuT = ui.findActor("menu").getTop(); float menuT = menuActor.getTop();
float menuOriginX = ui.findActor("menu").getOriginX(); float menuOriginX = menuActor.getOriginX();
//menu button bounds //menu button bounds
if (c.x>=menuX&&c.x<=menuR&&c.y>=menuY&&c.y<=menuT) { if (c.x>=menuX&&c.x<=menuR&&c.y>=menuY&&c.y<=menuT) {
menu(); if (pointer < 1)
stageToScreenCoordinates(c2.set(menuOriginX, menuY)); menuPressed = true;
return super.touchDown((int)c2.x, (int)c2.y, pointer, button); return true;
} }
float statsX = ui.findActor("statistic").getX(); float statsX = statsActor.getX();
float statsY = ui.findActor("statistic").getY(); float statsY = statsActor.getY();
float statsR = ui.findActor("statistic").getRight(); float statsR = statsActor.getRight();
float statsT = ui.findActor("statistic").getTop(); float statsT = statsActor.getTop();
float statsOriginX = ui.findActor("statistic").getOriginX(); float statsOriginX = statsActor.getOriginX();
//stats button bounds //stats button bounds
if (c.x>=statsX&&c.x<=statsR&&c.y>=statsY&&c.y<=statsT) { if (c.x>=statsX&&c.x<=statsR&&c.y>=statsY&&c.y<=statsT) {
statistic(); if (pointer < 1)
stageToScreenCoordinates(c2.set(statsOriginX, statsY)); statsPressed = true;
return super.touchDown((int)c2.x, (int)c2.y, pointer, button); return true;
} }
float uiX = ui.findActor("gamehud").getX(); float uiX = ui.findActor("gamehud").getX();
@@ -264,6 +280,28 @@ public class GameHUD extends Stage {
} }
return super.touchDown(screenX, screenY, pointer, button); return super.touchDown(screenX, screenY, pointer, button);
} }
void checkButtonState(Actor actor, int pointer) {
Array<EventListener> listeners = actor.getListeners();
for(int i=0;i<listeners.size;i++)
{
if(listeners.get(i) instanceof ClickListener){
if (((ClickListener)listeners.get(i)).isVisualPressed()) {
((ClickListener)listeners.get(i)).setVisualPressed(false);
((ClickListener)listeners.get(i)).clicked(null, 0, 0);
}
}
}
}
void updateVisualState(Actor actor, boolean state) {
Array<EventListener> listeners = actor.getListeners();
for(int i=0;i<listeners.size;i++)
{
if(listeners.get(i) instanceof ClickListener){
((ClickListener)listeners.get(i)).setVisualPressed(state);
}
}
}
@Override @Override
public void draw() { public void draw() {
int yPos = (int) gameStage.player.getY(); int yPos = (int) gameStage.player.getY();
@@ -273,6 +311,9 @@ public class GameHUD extends Stage {
int xPosMini = (int) (((float) xPos / (float) WorldSave.getCurrentSave().getWorld().getTileSize() / (float) WorldSave.getCurrentSave().getWorld().getWidthInTiles()) * miniMap.getWidth()); int xPosMini = (int) (((float) xPos / (float) WorldSave.getCurrentSave().getWorld().getTileSize() / (float) WorldSave.getCurrentSave().getWorld().getWidthInTiles()) * miniMap.getWidth());
int yPosMini = (int) (((float) yPos / (float) WorldSave.getCurrentSave().getWorld().getTileSize() / (float) WorldSave.getCurrentSave().getWorld().getHeightInTiles()) * miniMap.getHeight()); int yPosMini = (int) (((float) yPos / (float) WorldSave.getCurrentSave().getWorld().getTileSize() / (float) WorldSave.getCurrentSave().getWorld().getHeightInTiles()) * miniMap.getHeight());
miniMapPlayer.setPosition(miniMap.getX() + xPosMini - miniMapPlayer.getWidth()/2, miniMap.getY() + yPosMini - miniMapPlayer.getHeight()/2); miniMapPlayer.setPosition(miniMap.getX() + xPosMini - miniMapPlayer.getWidth()/2, miniMap.getY() + yPosMini - miniMapPlayer.getHeight()/2);
updateVisualState(statsActor, statsPressed);
updateVisualState(menuActor, menuPressed);
updateVisualState(deckActor, deckPressed);
} }
Texture miniMapTexture; Texture miniMapTexture;