Add basic touch controls
This commit is contained in:
parent
1585407bcb
commit
0e906479d1
@ -1,11 +1,13 @@
|
|||||||
package com.me.pacman.state;
|
package com.me.pacman.state;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Application;
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
import com.badlogic.gdx.Input;
|
import com.badlogic.gdx.Input;
|
||||||
import com.badlogic.gdx.InputAdapter;
|
import com.badlogic.gdx.InputAdapter;
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
||||||
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import com.me.pacman.PacDude;
|
import com.me.pacman.PacDude;
|
||||||
import com.me.pacman.Sound;
|
import com.me.pacman.Sound;
|
||||||
|
|
||||||
@ -19,6 +21,10 @@ public class MenuState extends LevelState {
|
|||||||
public static final int NEW_GAME = 0;
|
public static final int NEW_GAME = 0;
|
||||||
public static final int HIGH_SCORES = 1;
|
public static final int HIGH_SCORES = 1;
|
||||||
|
|
||||||
|
private BoundingBox NEW_GAME_BOX = new BoundingBox(88, 66, 136, 84);
|
||||||
|
private BoundingBox HIGH_SCORE_BOX = new BoundingBox(88, 42, 136, 60);
|
||||||
|
|
||||||
|
|
||||||
private static final int MENU_PADDING = 24;
|
private static final int MENU_PADDING = 24;
|
||||||
private static final int MENU_X = 84;
|
private static final int MENU_X = 84;
|
||||||
private static final int MENU_Y = 85;
|
private static final int MENU_Y = 85;
|
||||||
@ -42,8 +48,16 @@ public class MenuState extends LevelState {
|
|||||||
font = game.assets.getFont();
|
font = game.assets.getFont();
|
||||||
|
|
||||||
Gdx.input.setInputProcessor(this.new Controller());
|
Gdx.input.setInputProcessor(this.new Controller());
|
||||||
|
|
||||||
game.sound.play(Sound.Effect.BEGINNING);
|
game.sound.play(Sound.Effect.BEGINNING);
|
||||||
|
|
||||||
|
switch(Gdx.app.getType()) {
|
||||||
|
case Android:
|
||||||
|
selectedOption = -1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
selectedOption = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -88,6 +102,30 @@ public class MenuState extends LevelState {
|
|||||||
return super.keyDown(keycode);
|
return super.keyDown(keycode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
|
||||||
|
Vector2 coords = game.viewport.unproject(new Vector2(screenX, screenY));
|
||||||
|
if (NEW_GAME_BOX.contains(coords)) {
|
||||||
|
selectedOption = 0;
|
||||||
|
} else if (HIGH_SCORE_BOX.contains(coords)) {
|
||||||
|
selectedOption = 1;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
|
||||||
|
Vector2 coords = game.viewport.unproject(new Vector2(screenX, screenY));
|
||||||
|
if (selectedOption == 0 && NEW_GAME_BOX.contains(coords)) {
|
||||||
|
game.setScreen(new PlayState(game));
|
||||||
|
} else if (selectedOption == 1 && HIGH_SCORE_BOX.contains(coords)) {
|
||||||
|
selectedOption = -1;
|
||||||
|
} else {
|
||||||
|
selectedOption = -1;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -95,4 +133,25 @@ public class MenuState extends LevelState {
|
|||||||
Gdx.input.setInputProcessor(null);
|
Gdx.input.setInputProcessor(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class BoundingBox {
|
||||||
|
private int minX, minY;
|
||||||
|
private int maxX, maxY;
|
||||||
|
|
||||||
|
public BoundingBox(int minX, int minY, int maxX, int maxY) {
|
||||||
|
this.minX = minX;
|
||||||
|
this.minY = minY;
|
||||||
|
this.maxX = maxX;
|
||||||
|
this.maxY = maxY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean contains(int x, int y) {
|
||||||
|
return minX < x && x < maxX && minY < y && y < maxY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean contains(Vector2 coords) {
|
||||||
|
return contains((int) coords.x, (int) coords.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -499,6 +499,10 @@ public class PlayState extends LevelState {
|
|||||||
|
|
||||||
private final class Controller extends InputAdapter {
|
private final class Controller extends InputAdapter {
|
||||||
|
|
||||||
|
int downX;
|
||||||
|
int downY;
|
||||||
|
long downTime;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyDown(int keycode) {
|
public boolean keyDown(int keycode) {
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
@ -535,6 +539,47 @@ public class PlayState extends LevelState {
|
|||||||
return super.keyDown(keycode);
|
return super.keyDown(keycode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
|
||||||
|
if (Math.abs(downX - screenX) < 50 && Math.abs(downY - screenY) < 50
|
||||||
|
&& System.currentTimeMillis() - downTime < 250) {
|
||||||
|
paused = !paused;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
downX = screenX;
|
||||||
|
downY = screenY;
|
||||||
|
downTime = System.currentTimeMillis();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
|
||||||
|
int relaX = screenX - downX;
|
||||||
|
int relaY = screenY - downY;
|
||||||
|
|
||||||
|
if (Math.abs(relaX) < 50 && Math.abs(relaY) < 50) {
|
||||||
|
// didn't move enough to consider a swipe
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Math.abs(relaX) > Math.abs(relaY)) {
|
||||||
|
// x > y, so moving left-right
|
||||||
|
if (relaX > 0) {
|
||||||
|
pacman.setNextDirection(Direction.RIGHT);
|
||||||
|
} else {
|
||||||
|
pacman.setNextDirection(Direction.LEFT);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// else, moving up/down
|
||||||
|
if (relaY > 0) {
|
||||||
|
pacman.setNextDirection(Direction.DOWN);
|
||||||
|
} else {
|
||||||
|
pacman.setNextDirection(Direction.UP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user