summary refs log tree commit diff stats
path: root/src/com/fourisland
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/fourisland')
-rw-r--r--src/com/fourisland/fourpuzzle/Game.java1
-rw-r--r--src/com/fourisland/fourpuzzle/PuzzleApplication.java5
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java12
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java78
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/AutomaticViewpoint.java2
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/FixedViewpoint.java33
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/viewpoint/MovingViewpoint.java91
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;
16import com.fourisland.fourpuzzle.gamestate.mapview.event.EventHandler; 16import com.fourisland.fourpuzzle.gamestate.mapview.event.EventHandler;
17import com.fourisland.fourpuzzle.gamestate.mapview.event.EventList; 17import com.fourisland.fourpuzzle.gamestate.mapview.event.EventList;
18import com.fourisland.fourpuzzle.gamestate.mapview.event.LayerEvent; 18import com.fourisland.fourpuzzle.gamestate.mapview.event.LayerEvent;
19import com.fourisland.fourpuzzle.gamestate.mapview.event.SpecialEvent;
19import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventThread; 20import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventThread;
20import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint; 21import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint;
21import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; 22import 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.*;
9import com.fourisland.fourpuzzle.gamestate.mapview.MapViewGameState; 9import com.fourisland.fourpuzzle.gamestate.mapview.MapViewGameState;
10import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEvent; 10import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEvent;
11import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventThread; 11import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventThread;
12import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint;
13import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.FixedViewpoint;
14import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.MovingViewpoint;
15import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint;
16import java.util.concurrent.CountDownLatch;
12import java.util.logging.Level; 17import java.util.logging.Level;
13import java.util.logging.Logger; 18import java.util.logging.Logger;
14 19
@@ -17,6 +22,12 @@ import java.util.logging.Logger;
17 * @author hatkirby 22 * @author hatkirby
18 */ 23 */
19public class SpecialEvent { 24public 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
6package com.fourisland.fourpuzzle.gamestate.mapview.viewpoint;
7
8/**
9 *
10 * @author hatkirby
11 */
12public 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
6package com.fourisland.fourpuzzle.gamestate.mapview.viewpoint;
7
8import com.fourisland.fourpuzzle.Game;
9
10/**
11 *
12 * @author hatkirby
13 */
14public 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}