From 9703e374b73109073302d3d6fd501cfa2c6b9b61 Mon Sep 17 00:00:00 2001 From: vvashchenko <vitaliy.vashchenko@nic.cz> Date: Mon, 22 Aug 2016 14:21:16 +0200 Subject: [PATCH] WIP (has some issues) #463 returned comments from #344 --- .../game/games/pursuit/PursuitGame.java | 49 ++++--- .../pursuit/action/VehicleMoveAction.java | 49 +++++++ .../games/pursuit/helper/PositionHelper.java | 98 +++++++++++++ .../pursuit/listener/VehicleDragListener.java | 135 ------------------ .../game/games/pursuit/model/Maps.java | 40 +++--- .../game/games/pursuit/model/PuzzlePiece.java | 2 - .../listener/DragAndRotateActorListener.java | 7 +- 7 files changed, 203 insertions(+), 177 deletions(-) create mode 100644 core/src/cz/nic/tablexia/game/games/pursuit/action/VehicleMoveAction.java create mode 100644 core/src/cz/nic/tablexia/game/games/pursuit/helper/PositionHelper.java delete mode 100644 core/src/cz/nic/tablexia/game/games/pursuit/listener/VehicleDragListener.java diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java index 03311a0a0..72b79751a 100644 --- a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java +++ b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java @@ -3,11 +3,14 @@ package cz.nic.tablexia.game.games.pursuit; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.CatmullRomSpline; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Action; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.actions.Actions; +import com.badlogic.gdx.scenes.scene2d.actions.RunnableAction; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; @@ -28,11 +31,11 @@ import cz.nic.tablexia.game.GameDefinition; import cz.nic.tablexia.game.difficulty.GameDifficulty; import cz.nic.tablexia.game.games.pursuit.action.RotateAndMovePieceInPosition; import cz.nic.tablexia.game.games.pursuit.action.RotatePieceToClosestAngle; +import cz.nic.tablexia.game.games.pursuit.action.VehicleMoveAction; import cz.nic.tablexia.game.games.pursuit.assets.PursuitAssets; import cz.nic.tablexia.game.games.pursuit.helper.ArithmeticsHelper; import cz.nic.tablexia.game.games.pursuit.helper.GameRulesHelper; import cz.nic.tablexia.game.games.pursuit.helper.TextureHelper; -import cz.nic.tablexia.game.games.pursuit.listener.VehicleDragListener; import cz.nic.tablexia.game.games.pursuit.model.Grid; import cz.nic.tablexia.game.games.pursuit.model.Maps; import cz.nic.tablexia.game.games.pursuit.model.PuzzlePiece; @@ -119,6 +122,9 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { private static final String SCORE_KEY_LAST_MAP = "last_map_index"; private static final float OVERLAP_PIECE_SCALE = 1.2f; + + private static final float ANIMATION_MOVING_DURATION = 5f; + private static final float ANIMATION_DELAY_DURATION = 1.5f; private static final int MAPS_COUNT = Maps.values().length; @@ -149,7 +155,6 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { private String clickMapTextureName; private String mapTextureName; - @Override protected Viewport createViewport() { return new ExtendViewport(0, TablexiaSettings.getMinWorldHeight()); @@ -354,7 +359,6 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { private void checkEndGameCondition() { if (grid.allPiecesInCorrectPositions() && !gameFinished.get()) { backgroundImage.removeListener(dragAndRotateActorListener); - endGame(); showCheckpoints(); gameFinished.set(true); } @@ -401,24 +405,10 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { VehicleType vehicleType = TextureHelper.getVehicleTextureName(getRandom(), mapNumber); Point vehiclePosition = new Point(0, 0); Point vehicleSize = new Point(vehicleType.getVehicleSize().x, vehicleType.getVehicleSize().y); - - Music[] vehicleSounds = getVehicleSounds(vehicleType); - vehicle = new Vehicle(getScreenTextureRegion(vehicleType.getTextureName()), vehiclePosition, vehicleSize); - vehicle.addListener(new VehicleDragListener(vehicle, vehicleSounds, getData(), new Point(roadMap.getWidth(), roadMap.getHeight()), finishFlag, new VehicleDragListener.OnVehicleDragCompleteListener() { - @Override - public void onVehicleDragComplete() { - showGameResultDialog(); - //remove all actor listeners - vehicle.clear(); - vehicle.remove(); - finishFlag.clear(); - finishFlag.remove(); - } - })); vehicle.setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes()); - grid.addActor(vehicle); vehicle.setVisible(false); + grid.addActor(vehicle); } private void prepareFinishFlag() { @@ -426,8 +416,8 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { finishFlag.setSize(TextureHelper.FINISH_FLAG_SIZE.x, TextureHelper.FINISH_FLAG_SIZE.y); finishFlag.setOrigin(finishFlag.getWidth() / 2, finishFlag.getHeight() / 2); finishFlag.setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes()); - grid.addActor(finishFlag); finishFlag.setVisible(false); + grid.addActor(finishFlag); } @@ -484,8 +474,26 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { vehicle.setPosition(vehiclePositionConsideringRotation.x - vehicle.getWidth() / 2, vehiclePositionConsideringRotation.y - vehicle.getHeight() / 2); vehicle.setRotation(grid.getRotation()); - vehicle.setVisible(true); finishFlag.setVisible(true); + + final Music[] vehicleSounds = getVehicleSounds(TextureHelper.getVehicleTextureName(getRandom(), mapNumber)); + final CatmullRomSpline<Vector2> path = new CatmullRomSpline<Vector2>(Maps.values()[mapNumber].getPursuitPositionDefinition().getPointsWithRotation(grid.getRotation()),false); + VehicleMoveAction vehicleMoveAlongAction = new VehicleMoveAction(path, ANIMATION_MOVING_DURATION, grid.getWidth(), vehicleSounds[getRandom().nextInt(vehicleSounds.length)]); + vehicle.addAction(Actions.sequence(Actions.show(),Actions.delay(ANIMATION_DELAY_DURATION),vehicleMoveAlongAction,new RunnableAction() { + @Override + public void run() { + for(Music snd : vehicleSounds) { + snd.stop(); + snd.dispose(); + } + endGame(); + showGameResultDialog(); + vehicle.clear(); + vehicle.remove(); + finishFlag.clear(); + finishFlag.remove(); + } + })); } @Override @@ -505,7 +513,6 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { } private String getOverallTimeText(float millis) { - String time=""; StringBuilder sb = new StringBuilder(); int seconds = (int) (millis / 1000) % 60 ; int minutes = (int) ((millis / (1000*60)) % 60); diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/action/VehicleMoveAction.java b/core/src/cz/nic/tablexia/game/games/pursuit/action/VehicleMoveAction.java new file mode 100644 index 000000000..14c359a9b --- /dev/null +++ b/core/src/cz/nic/tablexia/game/games/pursuit/action/VehicleMoveAction.java @@ -0,0 +1,49 @@ +package cz.nic.tablexia.game.games.pursuit.action; + +import com.badlogic.gdx.audio.Music; +import com.badlogic.gdx.math.Path; +import com.badlogic.gdx.math.Vector2; +import cz.nic.tablexia.util.actions.MoveAlongAction; + +/** + * Created by Vitaliy Vashchenko on 24.6.16. + */ +public class VehicleMoveAction extends MoveAlongAction { + + private float parentSize; + private Path<Vector2> path; + private Music vehicleMusic; + public VehicleMoveAction(Path<Vector2> path, float duration, float parentSize, Music vehicleMusic) { + super(path, duration); + setRotate(true); + this.path = path; + this.parentSize = parentSize; + this.vehicleMusic = vehicleMusic; + setDuration(duration); + } + + + @Override + protected void update(float percent) { + Vector2 value = new Vector2(); + path.valueAt(value, percent); + actor.setPosition(parentSize*value.x-actor.getWidth()/2,parentSize*value.y - actor.getHeight()/2); + actor.setRotation(path.derivativeAt(value, percent).angle() - 90); + } + + + @Override + protected void begin() { + vehicleMusic.setVolume(1); + vehicleMusic.setLooping(true); + vehicleMusic.play(); + super.begin(); + } + + @Override + protected void end() { + vehicleMusic.stop(); + super.end(); + } + +} diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/helper/PositionHelper.java b/core/src/cz/nic/tablexia/game/games/pursuit/helper/PositionHelper.java new file mode 100644 index 000000000..aca4d6152 --- /dev/null +++ b/core/src/cz/nic/tablexia/game/games/pursuit/helper/PositionHelper.java @@ -0,0 +1,98 @@ +package cz.nic.tablexia.game.games.pursuit.helper; + +import com.badlogic.gdx.math.Vector2; + +import cz.nic.tablexia.util.Point; + +/** + * Created by Vitaliy Vashchenko on 20.6.16. + */ +public class PositionHelper { + + public enum RotationDefinition { + + ZERO(0f), + LEFT(90f), + UP(270f), + REVERSE(180f); + + float rotation; + + RotationDefinition(float rotation) { + this.rotation = rotation; + } + + public static RotationDefinition getRotationDefinition(float rotation) { + float newrRtation = Math.abs(rotation)%360; + for (RotationDefinition rotationDefinition : RotationDefinition.values()) { + if (rotationDefinition.getRotation() == newrRtation) return rotationDefinition; + } + return null; + } + + public float getRotation() { + return rotation; + } + } + + public enum PursuitPositionDefinition { + + // TODO: 21.6.16 correct some positions + MAP_1(new Point(0.866f, 0.1f),new Point(0.866f, 0.1f), new Point(0.859f, 0.211f), new Point(0.824f, 0.276f), new Point(0.792f, 0.312f), new Point(0.719f, 0.268f), new Point(0.666f, 0.241f), new Point(0.608f, 0.221f), new Point(0.534f, 0.203f), new Point(0.448f, 0.194f), new Point(0.374f, 0.224f), new Point(0.328f, 0.286f), new Point(0.293f, 0.37f), new Point(0.265f, 0.469f), new Point(0.237f, 0.575f), new Point(0.215f, 0.671f), new Point(0.228f, 0.772f), new Point(0.258f, 0.846f), new Point(0.26f, 0.85f)), + MAP_2(new Point(0.64f, 0.11f),new Point(0.64f, 0.11f), new Point(0.68f, 0.214f), new Point(0.738f, 0.308f), new Point(0.777f, 0.395f), new Point(0.683f, 0.449f), new Point(0.613f, 0.509f), new Point(0.54f, 0.573f), new Point(0.473f, 0.658f), new Point(0.4f, 0.728f), new Point(0.322f, 0.711f), new Point(0.26f, 0.666f), new Point(0.208f, 0.757f), new Point(0.22f, 0.75f)), + MAP_3(new Point(0.08f, 0.41f),new Point(0.08f, 0.41f), new Point(0.182f, 0.461f), new Point(0.271f, 0.466f), new Point(0.368f, 0.475f), new Point(0.376f, 0.599f), new Point(0.387f, 0.698f), new Point(0.398f, 0.755f), new Point(0.361f, 0.824f), new Point(0.394f, 0.868f), new Point(0.461f, 0.877f), new Point(0.531f, 0.85f), new Point(0.627f, 0.897f), new Point(0.691f, 0.899f), new Point(0.77f, 0.903f), new Point(0.776f, 0.855f), new Point(0.758f, 0.811f), new Point(0.776f, 0.754f), new Point(0.79f, 0.71f)), + MAP_4(new Point(0.95f, 0.33f),new Point(0.95f, 0.33f), new Point(0.866f, 0.307f), new Point(0.766f, 0.342f), new Point(0.709f, 0.391f), new Point(0.588f, 0.452f), new Point(0.512f, 0.497f), new Point(0.425f, 0.588f), new Point(0.355f, 0.667f), new Point(0.278f, 0.595f), new Point(0.19f, 0.574f), new Point(0.18f, 0.57f)), + MAP_5(new Point(0.94f, 0.12f),new Point(0.94f, 0.12f), new Point(0.928f, 0.333f), new Point(0.784f, 0.373f), new Point(0.678f, 0.412f), new Point(0.645f, 0.525f), new Point(0.578f, 0.582f), new Point(0.549f, 0.649f), new Point(0.597f, 0.733f), new Point(0.68f, 0.77f), new Point(0.784f, 0.793f), new Point(0.863f, 0.843f), new Point(0.86f, 0.82f)), + MAP_6(new Point(0.95f, 0.17f),new Point(0.95f, 0.17f), new Point(0.85f, 0.18f), new Point(0.763f, 0.171f), new Point(0.68f, 0.136f), new Point(0.602f, 0.092f), new Point(0.538f, 0.036f), new Point(0.509f, 0.081f), new Point(0.438f, 0.077f), new Point(0.392f, 0.142f), new Point(0.369f, 0.199f), new Point(0.377f, 0.251f), new Point(0.436f, 0.306f), new Point(0.45f, 0.32f)), + MAP_7(new Point(0.56f, 0.07f),new Point(0.56f, 0.07f), new Point(0.43f, 0.16f), new Point(0.347f, 0.246f), new Point(0.373f, 0.36f), new Point(0.443f, 0.465f), new Point(0.499f, 0.58f), new Point(0.431f, 0.657f), new Point(0.379f, 0.738f), new Point(0.356f, 0.825f), new Point(0.36f, 0.83f)), + MAP_8(new Point(0.16f, 0.19f),new Point(0.16f, 0.19f), new Point(0.237f, 0.255f), new Point(0.287f, 0.316f), new Point(0.351f, 0.354f), new Point(0.285f, 0.44f), new Point(0.212f, 0.521f), new Point(0.134f, 0.597f), new Point(0.071f, 0.679f), new Point(0.118f, 0.718f), new Point(0.204f, 0.754f), new Point(0.272f, 0.733f), new Point(0.343f, 0.798f), new Point(0.425f, 0.856f), new Point(0.496f, 0.919f), new Point(0.596f, 0.853f), new Point(0.672f, 0.823f), new Point(0.759f, 0.82f), new Point(0.818f, 0.828f), new Point(0.825f, 0.801f), new Point(0.83f, 0.79f)), + MAP_9(new Point(0.15f, 0.11f),new Point(0.15f, 0.11f), new Point(0.193f, 0.179f), new Point(0.255f, 0.19f), new Point(0.164f, 0.426f), new Point(0.234f, 0.494f), new Point(0.307f, 0.661f), new Point(0.356f, 0.723f), new Point(0.435f, 0.776f), new Point(0.509f, 0.805f), new Point(0.622f, 0.831f), new Point(0.719f, 0.837f), new Point(0.808f, 0.834f), new Point(0.81f, 0.83f)), + MAP_10(new Point(0.22f, 0.07f),new Point(0.22f, 0.07f), new Point(0.214f, 0.293f), new Point(0.204f, 0.421f), new Point(0.449f, 0.422f), new Point(0.574f, 0.561f), new Point(0.678f, 0.49f), new Point(0.806f, 0.75f), new Point(0.761f, 0.838f), new Point(0.76f, 0.84f)), + MAP_11(new Point(0.61f, 0.11f),new Point(0.61f, 0.11f), new Point(0.582f, 0.258f), new Point(0.571f, 0.364f), new Point(0.599f, 0.442f), new Point(0.641f, 0.499f), new Point(0.646f, 0.584f), new Point(0.702f, 0.626f), new Point(0.81f, 0.644f), new Point(0.801f, 0.693f), new Point(0.678f, 0.683f), new Point(0.553f, 0.688f), new Point(0.366f, 0.697f), new Point(0.302f, 0.688f), new Point(0.214f, 0.697f), new Point(0.21f, 0.69f)), + MAP_12(new Point(0.89f, 0.17f),new Point(0.89f, 0.17f), new Point(0.806f, 0.118f), new Point(0.565f, 0.111f), new Point(0.43f, 0.102f), new Point(0.385f, 0.164f), new Point(0.436f, 0.294f), new Point(0.473f, 0.442f), new Point(0.492f, 0.562f), new Point(0.444f, 0.676f), new Point(0.385f, 0.792f), new Point(0.278f, 0.803f), new Point(0.223f, 0.843f), new Point(0.208f, 0.868f), new Point(0.2f, 0.85f)), + MAP_13(new Point(0.08f, 0.06f),new Point(0.08f, 0.06f), new Point(0.189f, 0.227f), new Point(0.414f, 0.316f), new Point(0.665f, 0.51f), new Point(0.797f, 0.632f), new Point(0.88f, 0.735f), new Point(0.88f, 0.73f)), + MAP_14(new Point(0.18f, 0.08f),new Point(0.18f, 0.08f), new Point(0.212f, 0.239f), new Point(0.29f, 0.321f), new Point(0.399f, 0.382f), new Point(0.342f, 0.503f), new Point(0.311f, 0.659f), new Point(0.308f, 0.773f), new Point(0.324f, 0.843f), new Point(0.32f, 0.84f)); + + private Point[] points; + + PursuitPositionDefinition(Point... points) { + this.points = points; + } + + public Point[] getPoints() { + return points; + } + + // FIXME: 18.8.16 freeze after finishing the puzzle + public Vector2[] getPointsWithRotation(float rotation) { + RotationDefinition rotationDefinition = RotationDefinition.getRotationDefinition(rotation); + Vector2[] rotatedPositions = new Vector2[points.length]; + + for (int i = 0; i < getPoints().length; i++) { + rotatedPositions[i] = getRotatedPosition(rotationDefinition, getPoints()[i]); + } + + return rotatedPositions; + } + + private static Vector2 getRotatedPosition(RotationDefinition rotationDefinition, Point position) { + switch (rotationDefinition) { + case UP: + //x = y, y = 1-x + return new Vector2(position.y, 1 - position.x); + case LEFT: + //x=1-y, y=x + return new Vector2(1 - position.y, position.x); + case REVERSE: + //x = 1-x,y=1-y + return new Vector2(1 - position.x, 1 - position.y); + default: + return new Vector2(position.x, position.y); + } + } + + + + } + +} diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/listener/VehicleDragListener.java b/core/src/cz/nic/tablexia/game/games/pursuit/listener/VehicleDragListener.java deleted file mode 100644 index 6ad2c0498..000000000 --- a/core/src/cz/nic/tablexia/game/games/pursuit/listener/VehicleDragListener.java +++ /dev/null @@ -1,135 +0,0 @@ -package cz.nic.tablexia.game.games.pursuit.listener; - -import com.badlogic.gdx.audio.Music; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.scenes.scene2d.Actor; -import com.badlogic.gdx.scenes.scene2d.InputEvent; - -import cz.nic.tablexia.game.games.pursuit.helper.ArithmeticsHelper; -import cz.nic.tablexia.util.MusicUtil; -import cz.nic.tablexia.util.Point; -import cz.nic.tablexia.game.games.pursuit.model.Vehicle; -import cz.nic.tablexia.util.listener.DragActorListener; - -/** - * Created by Václav TarantĂk on 10.8.15. - */ -public class VehicleDragListener extends DragActorListener implements Music.OnCompletionListener{ - private static final int POINTS_CACHE_SIZE = 5; - private Point[] touchedPointsCache; - private int currentTouchPointCacheElementPointer; - private int[][] roadColorData; - private Point roadMapSize; - private Actor goalActor; - private OnVehicleDragCompleteListener onVehicleDragCompleteListener; - private final float moveTolerance; - - private Music[] sounds; - - private boolean playingSounds = false; - private int currentSoundIndex = 0; - - //goalActor is the actor that marks the finish of the vehicle path, here finish flag - public VehicleDragListener(Actor actor, Music[] sounds, int[][] roadColorData, Point roadMapSize, Actor goalActor, OnVehicleDragCompleteListener onVehicleDragCompleteListener) { - super(actor); - this.sounds = sounds; - this.roadColorData = roadColorData; - this.roadMapSize = roadMapSize; - this.goalActor = goalActor; - this.onVehicleDragCompleteListener = onVehicleDragCompleteListener; - touchedPointsCache = new Point[POINTS_CACHE_SIZE]; - // vehicle move tolerance is two times size of bigger side of vehicle (width / height of actor) - moveTolerance = 2 * Math.max(actor.getWidth(), actor.getHeight()); - } - - @Override - public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { - touchedPointsCache[currentTouchPointCacheElementPointer] = new Point(x, y); - playingSounds = true; - - sounds[currentSoundIndex].setVolume(1); - sounds[currentSoundIndex].play(); - sounds[currentSoundIndex].setOnCompletionListener(this); - return super.touchDown(event, x, y, pointer, button); - } - - @Override - public void touchDragged(InputEvent event, float x, float y, int pointer) { - Vector2 recalculatedCoords = new Vector2(x, y); - actor.localToParentCoordinates(recalculatedCoords); - Point touchPoint = new Point(recalculatedCoords.x, recalculatedCoords.y); - if (isPointOnMap(touchPoint)) { - Color touchedColor = getTouchedColor(recalculatedCoords.x, recalculatedCoords.y); - if (touchedColor.r == 1 && touchedColor.a == 1) { - currentTouchPointCacheElementPointer = (currentTouchPointCacheElementPointer + 1) % touchedPointsCache.length; - touchedPointsCache[currentTouchPointCacheElementPointer] = new Point(recalculatedCoords.x, recalculatedCoords.y); - if (currentTouchPointCacheElementPointer == POINTS_CACHE_SIZE - 1) { - actor.setRotation((float) ArithmeticsHelper.getAngleBetweenTwoPoints(touchedPointsCache[0], touchedPointsCache[touchedPointsCache.length - 1])); - } - - double distance = Math.hypot(touchPoint.x - actor.getX(), touchPoint.y - actor.getY()); - - // finger or cursor is too far from vehicle to move it - if (distance > moveTolerance) { - return; - } - - super.touchDragged(event, x, y, pointer); - if (((Vehicle) actor).intersectsWith(goalActor)) { - onVehicleDragCompleteListener.onVehicleDragComplete(); - - for(Music snd : sounds) { - snd.stop(); - snd.dispose(); - } - } - } - } - } - - @Override - public void touchUp(InputEvent event, float x, float y, int pointer, int button) { - playingSounds = false; - - if(sounds[currentSoundIndex].isPlaying()) { - MusicUtil.fadeOut(sounds[currentSoundIndex], 0.5f, false); - } - - super.touchUp(event, x, y, pointer, button); - } - - - @Override - public void onCompletion(Music music) { - if(!playingSounds) - return; - - currentSoundIndex++; - - if(currentSoundIndex >= sounds.length) - currentSoundIndex = 0; - - sounds[currentSoundIndex].setVolume(1); - sounds[currentSoundIndex].play(); - sounds[currentSoundIndex].setOnCompletionListener(this); - } - - private Color getTouchedColor(float x, float y) { - Point mapRotationCenter = new Point(actor.getParent().getWidth() / 2, actor.getParent().getHeight() / 2); - Point pointOnRotatedMap = ArithmeticsHelper.translatePositionAccordingToRotation(new Point(x, y), 360 - actor.getParent().getRotation(), mapRotationCenter); - float clickX = (pointOnRotatedMap.x / actor.getParent().getWidth() * roadMapSize.x); - float clickY = roadMapSize.y - (pointOnRotatedMap.y / actor.getParent().getHeight() * roadMapSize.y); - Point clickedPoint = new Point(clickX, clickY); - - return new Color(roadColorData[(int) clickedPoint.x][(int) (clickedPoint.y)]); - } - - private boolean isPointOnMap(Point p) { - return ((p.x >= 0) && (p.x <= actor.getParent().getWidth()) && (p.y >= 0) && (p.y <= actor.getParent().getHeight())); - } - - public interface OnVehicleDragCompleteListener { - void onVehicleDragComplete(); - } -} diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/model/Maps.java b/core/src/cz/nic/tablexia/game/games/pursuit/model/Maps.java index fb9f77cc8..6407a0a50 100644 --- a/core/src/cz/nic/tablexia/game/games/pursuit/model/Maps.java +++ b/core/src/cz/nic/tablexia/game/games/pursuit/model/Maps.java @@ -1,36 +1,40 @@ package cz.nic.tablexia.game.games.pursuit.model; +import cz.nic.tablexia.game.games.pursuit.helper.PositionHelper; import cz.nic.tablexia.util.Point; /** * Created by Václav TarantĂk on 10.8.15. */ public enum Maps { - - MAP1("map1", new Point(0.866f, 0.1f), new Point(0.26f, 0.85f)), - MAP2("map2", new Point(0.64f, 0.11f), new Point(0.22f, 0.75f)), - MAP3("map3", new Point(0.08f, 0.41f), new Point(0.79f, 0.71f)),// TODO add car initial rotation - MAP4("map4", new Point(0.95f, 0.33f), new Point(0.18f, 0.57f)), - MAP5("map5", new Point(0.94f, 0.12f), new Point(0.86f, 0.82f)), - MAP6("map6", new Point(0.95f, 0.17f), new Point(0.45f, 0.32f)), - MAP7("map7", new Point(0.56f, 0.07f), new Point(0.36f, 0.83f)), - MAP8("map8", new Point(0.16f, 0.19f), new Point(0.83f, 0.79f)), - MAP9("map9", new Point(0.15f, 0.11f), new Point(0.81f, 0.83f)), - MAP10("map10", new Point(0.22f, 0.07f), new Point(0.76f, 0.84f)), - MAP11("map11", new Point(0.61f, 0.11f), new Point(0.21f, 0.69f)), - MAP12("map12", new Point(0.89f, 0.17f), new Point(0.2f, 0.85f)), - MAP13("map13", new Point(0.08f, 0.06f), new Point(0.88f, 0.73f)), - MAP14("map14", new Point(0.18f, 0.08f), new Point(0.32f, 0.84f)); + // TODO add car initial rotation + MAP1("map1", new Point(0.866f, 0.1f), new Point(0.26f, 0.85f), PositionHelper.PursuitPositionDefinition.MAP_1), + MAP2("map2", new Point(0.64f, 0.11f), new Point(0.22f, 0.75f), PositionHelper.PursuitPositionDefinition.MAP_2), + MAP3("map3", new Point(0.08f, 0.41f), new Point(0.79f, 0.71f), PositionHelper.PursuitPositionDefinition.MAP_3), + MAP4("map4", new Point(0.95f, 0.33f), new Point(0.18f, 0.57f), PositionHelper.PursuitPositionDefinition.MAP_4), + MAP5("map5", new Point(0.94f, 0.12f), new Point(0.86f, 0.82f), PositionHelper.PursuitPositionDefinition.MAP_5), + MAP6("map6", new Point(0.95f, 0.17f), new Point(0.45f, 0.32f), PositionHelper.PursuitPositionDefinition.MAP_6), + MAP7("map7", new Point(0.56f, 0.07f), new Point(0.36f, 0.83f), PositionHelper.PursuitPositionDefinition.MAP_7), + MAP8("map8", new Point(0.16f, 0.19f), new Point(0.83f, 0.79f), PositionHelper.PursuitPositionDefinition.MAP_8), + MAP9("map9", new Point(0.15f, 0.11f), new Point(0.81f, 0.83f), PositionHelper.PursuitPositionDefinition.MAP_9), + MAP10("map10", new Point(0.22f, 0.07f), new Point(0.76f, 0.84f),PositionHelper.PursuitPositionDefinition.MAP_10), + MAP11("map11", new Point(0.61f, 0.11f), new Point(0.21f, 0.69f),PositionHelper.PursuitPositionDefinition.MAP_11), + MAP12("map12", new Point(0.89f, 0.17f), new Point(0.2f, 0.85f),PositionHelper.PursuitPositionDefinition.MAP_12), + MAP13("map13", new Point(0.08f, 0.06f), new Point(0.88f, 0.73f),PositionHelper.PursuitPositionDefinition.MAP_13), + MAP14("map14", new Point(0.18f, 0.08f), new Point(0.32f, 0.84f),PositionHelper.PursuitPositionDefinition.MAP_14); private String textureRegionName; //relatives position of checkpoints on map private Point startPointCoords; private Point endPointCoords; + + private PositionHelper.PursuitPositionDefinition pursuitPositionDefinition; - Maps(String textureRegionName, Point startPointCoords, Point endPointCoords){ + Maps(String textureRegionName, Point startPointCoords, Point endPointCoords, PositionHelper.PursuitPositionDefinition positionDefinition){ this.textureRegionName = textureRegionName; this.startPointCoords = startPointCoords; this.endPointCoords = endPointCoords; + this.pursuitPositionDefinition = positionDefinition; } public String getTextureRegionName(){ @@ -44,4 +48,8 @@ public enum Maps { public cz.nic.tablexia.util.Point getEndPointCoords(){ return endPointCoords; } + + public PositionHelper.PursuitPositionDefinition getPursuitPositionDefinition() { + return pursuitPositionDefinition; + } } diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/model/PuzzlePiece.java b/core/src/cz/nic/tablexia/game/games/pursuit/model/PuzzlePiece.java index 69bc83ab1..3e5ac4795 100644 --- a/core/src/cz/nic/tablexia/game/games/pursuit/model/PuzzlePiece.java +++ b/core/src/cz/nic/tablexia/game/games/pursuit/model/PuzzlePiece.java @@ -1,9 +1,7 @@ package cz.nic.tablexia.game.games.pursuit.model; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Touchable; -import com.badlogic.gdx.scenes.scene2d.ui.Image; /** * Created by Václav TarantĂk on 17.6.15. diff --git a/core/src/cz/nic/tablexia/util/listener/DragAndRotateActorListener.java b/core/src/cz/nic/tablexia/util/listener/DragAndRotateActorListener.java index 5b7bd225b..dbff95e76 100644 --- a/core/src/cz/nic/tablexia/util/listener/DragAndRotateActorListener.java +++ b/core/src/cz/nic/tablexia/util/listener/DragAndRotateActorListener.java @@ -98,7 +98,7 @@ public class DragAndRotateActorListener extends InputListener { public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { if (pointer==0) { //one finger newTouch = new Touch(((Grid) parentActor).pieceAtPoint(x, y), TimeUtils.millis()); //save touched piece and time - if (lastTouch != null && newTouch.getTime() - lastTouch.getTime() > Touch.TIME_BETWEEN_TAPS) //check if new touch is + if (lastTouch != null && newTouch.getTime() - lastTouch.getTime() > Touch.TIME_BETWEEN_TAPS) //check if new touch is out of the time boundaries lastTouch = null; } if (button != 1) { @@ -160,7 +160,7 @@ public class DragAndRotateActorListener extends InputListener { @Override public void touchUp(InputEvent event, final float x, final float y, int pointer, int button) { - if (pointer==0) { + if (pointer==0 && button !=1) { //don't react on right mouse button double tap Touch tempTouch = new Touch(((Grid) parentActor).pieceAtPoint(x, y), TimeUtils.millis()); if (newTouch != null) { boolean tapped = tempTouch.isTap(newTouch); @@ -169,7 +169,8 @@ public class DragAndRotateActorListener extends InputListener { if (tempTouch.isDoubleTap(lastTouch) && !lastTouch.getTouchedActor().hasActions()) { Actor actorToRotate = lastTouch.getTouchedActor(); float newRotationAngle = ArithmeticsHelper.getClosestRightAngle(actorToRotate.getRotation()-90); - actorToRotate.addAction(Actions.rotateTo(newRotationAngle, 0.5f)); + // FIXME: 22.8.16 sometime piece is rotaed back to the original rotation + actorToRotate.addAction(Actions.rotateTo(newRotationAngle, ROTATION_ANIMATION_DURATION)); rotated(newRotationAngle, actorToRotate); } else { lastTouch = new Touch(draggedActor, (tempTouch.getTime() + newTouch.getTime()) / 2); //not double - save least touch -- GitLab