diff options
Diffstat (limited to 'src')
7 files changed, 218 insertions, 4 deletions
| diff --git a/src/com/fourisland/fourpuzzle/Game.java b/src/com/fourisland/fourpuzzle/Game.java index 0788a75..432d8ff 100644 --- a/src/com/fourisland/fourpuzzle/Game.java +++ b/src/com/fourisland/fourpuzzle/Game.java | |||
| @@ -17,6 +17,7 @@ public class Game { | |||
| 17 | 17 | ||
| 18 | public static final int WIDTH = 320; | 18 | public static final int WIDTH = 320; |
| 19 | public static final int HEIGHT = 240; | 19 | public static final int HEIGHT = 240; |
| 20 | public static final int FPS = (1000 / 20); // 20 fps | ||
| 20 | 21 | ||
| 21 | private static SaveFile saveFile; | 22 | private static SaveFile saveFile; |
| 22 | public static SaveFile getSaveFile() | 23 | public static SaveFile getSaveFile() |
| diff --git a/src/com/fourisland/fourpuzzle/PuzzleApplication.java b/src/com/fourisland/fourpuzzle/PuzzleApplication.java index 6fbe3a0..0b0e0cb 100644 --- a/src/com/fourisland/fourpuzzle/PuzzleApplication.java +++ b/src/com/fourisland/fourpuzzle/PuzzleApplication.java | |||
| @@ -107,8 +107,7 @@ public class PuzzleApplication extends Application { | |||
| 107 | Game.setGameState(new TitleScreenGameState()); | 107 | Game.setGameState(new TitleScreenGameState()); |
| 108 | 108 | ||
| 109 | long iTickCount = System.currentTimeMillis(); | 109 | long iTickCount = System.currentTimeMillis(); |
| 110 | int iTickDelay = (1000 / 20); // 20 fps | 110 | long iTickTrigger = iTickCount + Game.FPS; |
| 111 | long iTickTrigger = iTickCount + iTickDelay; | ||
| 112 | 111 | ||
| 113 | while (true) | 112 | while (true) |
| 114 | { | 113 | { |
| @@ -126,7 +125,7 @@ public class PuzzleApplication extends Application { | |||
| 126 | 125 | ||
| 127 | if (!debugSpeed) | 126 | if (!debugSpeed) |
| 128 | { | 127 | { |
| 129 | iTickTrigger = iTickCount + iTickDelay; | 128 | iTickTrigger = iTickCount + Game.FPS; |
| 130 | } | 129 | } |
| 131 | } | 130 | } |
| 132 | } | 131 | } |
| diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java index 45eadc9..c4194d9 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java | |||
| @@ -16,6 +16,7 @@ import com.fourisland.fourpuzzle.gamestate.mapview.event.EventCallTime; | |||
| 16 | import com.fourisland.fourpuzzle.gamestate.mapview.event.EventHandler; | 16 | import com.fourisland.fourpuzzle.gamestate.mapview.event.EventHandler; |
| 17 | import com.fourisland.fourpuzzle.gamestate.mapview.event.EventList; | 17 | import com.fourisland.fourpuzzle.gamestate.mapview.event.EventList; |
| 18 | import com.fourisland.fourpuzzle.gamestate.mapview.event.LayerEvent; | 18 | import com.fourisland.fourpuzzle.gamestate.mapview.event.LayerEvent; |
| 19 | import com.fourisland.fourpuzzle.gamestate.mapview.event.SpecialEvent; | ||
| 19 | import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventThread; | 20 | import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventThread; |
| 20 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint; | 21 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint; |
| 21 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; | 22 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; |
| @@ -43,6 +44,7 @@ public class MapViewGameState implements GameState { | |||
| 43 | setCurrentMap(map); | 44 | setCurrentMap(map); |
| 44 | Game.getSaveFile().getHero().setLocation(x, y); | 45 | Game.getSaveFile().getHero().setLocation(x, y); |
| 45 | currentViewpoint = new AutomaticViewpoint(currentMap); | 46 | currentViewpoint = new AutomaticViewpoint(currentMap); |
| 47 | SpecialEvent.setMapView(this); | ||
| 46 | } | 48 | } |
| 47 | 49 | ||
| 48 | public void initalize() | 50 | public void initalize() |
| @@ -212,5 +214,15 @@ public class MapViewGameState implements GameState { | |||
| 212 | { | 214 | { |
| 213 | return currentMap; | 215 | return currentMap; |
| 214 | } | 216 | } |
| 217 | |||
| 218 | public Viewpoint getViewpoint() | ||
| 219 | { | ||
| 220 | return currentViewpoint; | ||
| 221 | } | ||
| 222 | |||
| 223 | public void setViewpoint(Viewpoint viewpoint) | ||
| 224 | { | ||
| 225 | currentViewpoint = viewpoint; | ||
| 226 | } | ||
| 215 | 227 | ||
| 216 | } | 228 | } |
| diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java index 615396b..342b65f 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java | |||
| @@ -9,6 +9,11 @@ import com.fourisland.fourpuzzle.*; | |||
| 9 | import com.fourisland.fourpuzzle.gamestate.mapview.MapViewGameState; | 9 | import com.fourisland.fourpuzzle.gamestate.mapview.MapViewGameState; |
| 10 | import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEvent; | 10 | import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEvent; |
| 11 | import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventThread; | 11 | import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventThread; |
| 12 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint; | ||
| 13 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.FixedViewpoint; | ||
| 14 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.MovingViewpoint; | ||
| 15 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; | ||
| 16 | import java.util.concurrent.CountDownLatch; | ||
| 12 | import java.util.logging.Level; | 17 | import java.util.logging.Level; |
| 13 | import java.util.logging.Logger; | 18 | import java.util.logging.Logger; |
| 14 | 19 | ||
| @@ -17,6 +22,12 @@ import java.util.logging.Logger; | |||
| 17 | * @author hatkirby | 22 | * @author hatkirby |
| 18 | */ | 23 | */ |
| 19 | public class SpecialEvent { | 24 | public class SpecialEvent { |
| 25 | |||
| 26 | protected static MapViewGameState mapView = null; | ||
| 27 | public static void setMapView(MapViewGameState mapView) | ||
| 28 | { | ||
| 29 | SpecialEvent.mapView = mapView; | ||
| 30 | } | ||
| 20 | 31 | ||
| 21 | /** | 32 | /** |
| 22 | * Display a message on the screen. | 33 | * Display a message on the screen. |
| @@ -165,4 +176,71 @@ public class SpecialEvent { | |||
| 165 | } | 176 | } |
| 166 | } | 177 | } |
| 167 | 178 | ||
| 179 | /** | ||
| 180 | * Fixes the viewpoint in the current position | ||
| 181 | */ | ||
| 182 | public void FixViewpoint() | ||
| 183 | { | ||
| 184 | Viewpoint viewpoint = mapView.getViewpoint(); | ||
| 185 | mapView.setViewpoint(new FixedViewpoint(viewpoint.getX(),viewpoint.getY())); | ||
| 186 | } | ||
| 187 | |||
| 188 | /** | ||
| 189 | * Pans the viewpoint the the specified tile location | ||
| 190 | * | ||
| 191 | * @param x The x coordinate of the tile to pan to | ||
| 192 | * @param y The y coordinate of the tile to pan to | ||
| 193 | * @param length How long (in milliseconds) it will take to pan | ||
| 194 | * @param block If true, the game will wait for the pan to complete | ||
| 195 | * before executing any more commands | ||
| 196 | */ | ||
| 197 | public void PanViewpoint(final int x, final int y, int length, final boolean block) | ||
| 198 | { | ||
| 199 | Viewpoint viewpoint = mapView.getViewpoint(); | ||
| 200 | final CountDownLatch blocker; | ||
| 201 | |||
| 202 | if (block) | ||
| 203 | { | ||
| 204 | blocker = new CountDownLatch(1); | ||
| 205 | } else { | ||
| 206 | blocker = null; | ||
| 207 | } | ||
| 208 | |||
| 209 | mapView.setViewpoint(new MovingViewpoint(viewpoint.getX(), viewpoint.getY(), x*16, y*16, new Runnable() { | ||
| 210 | public void run() | ||
| 211 | { | ||
| 212 | mapView.setViewpoint(new FixedViewpoint(x*16,y*16)); | ||
| 213 | |||
| 214 | if (block) | ||
| 215 | { | ||
| 216 | blocker.countDown(); | ||
| 217 | } | ||
| 218 | } | ||
| 219 | }, length)); | ||
| 220 | |||
| 221 | if (block) | ||
| 222 | { | ||
| 223 | try { | ||
| 224 | blocker.await(); | ||
| 225 | } catch (InterruptedException ex) { | ||
| 226 | Logger.getLogger(SpecialEvent.class.getName()).log(Level.SEVERE, null, ex); | ||
| 227 | } | ||
| 228 | } | ||
| 229 | } | ||
| 230 | |||
| 231 | /** | ||
| 232 | * Resets the viewpoint from whatever state is is currently in | ||
| 233 | */ | ||
| 234 | public void ResetViewpoint() | ||
| 235 | { | ||
| 236 | Viewpoint viewpoint = mapView.getViewpoint(); | ||
| 237 | AutomaticViewpoint dest = new AutomaticViewpoint(mapView.getCurrentMap()); | ||
| 238 | |||
| 239 | mapView.setViewpoint(new MovingViewpoint(viewpoint.getX(), viewpoint.getY(), dest.getX(), dest.getY(), new Runnable() { | ||
| 240 | public void run() { | ||
| 241 | mapView.setViewpoint(new AutomaticViewpoint(mapView.getCurrentMap())); | ||
| 242 | } | ||
| 243 | })); | ||
| 244 | } | ||
| 245 | |||
| 168 | } | 246 | } |
| diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/AutomaticViewpoint.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/AutomaticViewpoint.java index 6f6d6b0..fbd7e03 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/AutomaticViewpoint.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/AutomaticViewpoint.java | |||
| @@ -27,7 +27,7 @@ public class AutomaticViewpoint implements Viewpoint { | |||
| 27 | refresh(); | 27 | refresh(); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | public void refresh() | 30 | private void refresh() |
| 31 | { | 31 | { |
| 32 | int x,y; | 32 | int x,y; |
| 33 | HeroEvent hero = Game.getHeroEvent(); | 33 | HeroEvent hero = Game.getHeroEvent(); |
| diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/FixedViewpoint.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/FixedViewpoint.java new file mode 100644 index 0000000..20a6dd0 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/FixedViewpoint.java | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | /* | ||
| 2 | * To change this template, choose Tools | Templates | ||
| 3 | * and open the template in the editor. | ||
| 4 | */ | ||
| 5 | |||
| 6 | package com.fourisland.fourpuzzle.gamestate.mapview.viewpoint; | ||
| 7 | |||
| 8 | /** | ||
| 9 | * | ||
| 10 | * @author hatkirby | ||
| 11 | */ | ||
| 12 | public class FixedViewpoint implements Viewpoint { | ||
| 13 | |||
| 14 | private int x; | ||
| 15 | private int y; | ||
| 16 | |||
| 17 | public FixedViewpoint(int x, int y) | ||
| 18 | { | ||
| 19 | this.x = x; | ||
| 20 | this.y = y; | ||
| 21 | } | ||
| 22 | |||
| 23 | public int getX() | ||
| 24 | { | ||
| 25 | return x; | ||
| 26 | } | ||
| 27 | |||
| 28 | public int getY() | ||
| 29 | { | ||
| 30 | return y; | ||
| 31 | } | ||
| 32 | |||
| 33 | } | ||
| diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/MovingViewpoint.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/MovingViewpoint.java new file mode 100644 index 0000000..eac4b49 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/MovingViewpoint.java | |||
| @@ -0,0 +1,91 @@ | |||
| 1 | /* | ||
| 2 | * To change this template, choose Tools | Templates | ||
| 3 | * and open the template in the editor. | ||
| 4 | */ | ||
| 5 | |||
| 6 | package com.fourisland.fourpuzzle.gamestate.mapview.viewpoint; | ||
| 7 | |||
| 8 | import com.fourisland.fourpuzzle.Game; | ||
| 9 | |||
| 10 | /** | ||
| 11 | * | ||
| 12 | * @author hatkirby | ||
| 13 | */ | ||
| 14 | public class MovingViewpoint implements Viewpoint { | ||
| 15 | |||
| 16 | private double x; | ||
| 17 | private double y; | ||
| 18 | private int sx; | ||
| 19 | private int sy; | ||
| 20 | private int dx; | ||
| 21 | private int dy; | ||
| 22 | private double speed; | ||
| 23 | private int last; | ||
| 24 | private int xdist; | ||
| 25 | private int ydist; | ||
| 26 | private Runnable callback; | ||
| 27 | |||
| 28 | public MovingViewpoint(int sx, int sy, int dx, int dy, Runnable callback) | ||
| 29 | { | ||
| 30 | this(sx, sy, dx, dy, callback, 1000); | ||
| 31 | } | ||
| 32 | |||
| 33 | public MovingViewpoint(int sx, int sy, int dx, int dy, Runnable callback, int length) | ||
| 34 | { | ||
| 35 | this.x = sx; | ||
| 36 | this.y = sy; | ||
| 37 | this.sx = sx; | ||
| 38 | this.sy = sy; | ||
| 39 | this.dx = dx; | ||
| 40 | this.dy = dy; | ||
| 41 | this.speed = length / Game.FPS; | ||
| 42 | this.last = (int) System.currentTimeMillis(); | ||
| 43 | this.xdist = dx - sx; | ||
| 44 | this.ydist = dy - sy; | ||
| 45 | this.callback = callback; | ||
| 46 | } | ||
| 47 | |||
| 48 | private void refresh() | ||
| 49 | { | ||
| 50 | x += (xdist / speed); | ||
| 51 | y += (ydist / speed); | ||
| 52 | |||
| 53 | if (((sx < dx) && (x > dx)) || ((sx > dx) && (x < dx))) | ||
| 54 | { | ||
| 55 | x = dx; | ||
| 56 | } | ||
| 57 | |||
| 58 | if (((sy < dy) && (y > dy)) || ((sy > dy) && (y < dy))) | ||
| 59 | { | ||
| 60 | y = dy; | ||
| 61 | } | ||
| 62 | |||
| 63 | if ((x == dx) && (y == dy)) | ||
| 64 | { | ||
| 65 | callback.run(); | ||
| 66 | } | ||
| 67 | |||
| 68 | last = (int) System.currentTimeMillis(); | ||
| 69 | } | ||
| 70 | |||
| 71 | public int getX() | ||
| 72 | { | ||
| 73 | if (System.currentTimeMillis() + speed > last) | ||
| 74 | { | ||
| 75 | refresh(); | ||
| 76 | } | ||
| 77 | |||
| 78 | return (int) x; | ||
| 79 | } | ||
| 80 | |||
| 81 | public int getY() | ||
| 82 | { | ||
| 83 | if (System.currentTimeMillis() + speed > last) | ||
| 84 | { | ||
| 85 | refresh(); | ||
| 86 | } | ||
| 87 | |||
| 88 | return (int) y; | ||
| 89 | } | ||
| 90 | |||
| 91 | } | ||
