diff options
3 files changed, 31 insertions, 8 deletions
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java index d3bd101..6cf9b10 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java | |||
@@ -71,7 +71,11 @@ public class MapViewGameState implements GameState { | |||
71 | 71 | ||
72 | public void deinitalize() | 72 | public void deinitalize() |
73 | { | 73 | { |
74 | // Do nothing, yet | 74 | // If an event is running when the game state is closing, kill it |
75 | for (LayerEvent ev : currentMap.getEvents()) | ||
76 | { | ||
77 | ev.getCallback().cancel(); | ||
78 | } | ||
75 | } | 79 | } |
76 | 80 | ||
77 | public void processInput(KeyInput key) | 81 | public void processInput(KeyInput key) |
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java index 30db7a2..2daefab 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java | |||
@@ -63,21 +63,27 @@ public class SpecialEvent { | |||
63 | public void DisplayMessage(String message) throws InterruptedException | 63 | public void DisplayMessage(String message) throws InterruptedException |
64 | { | 64 | { |
65 | MessageWindow mw; | 65 | MessageWindow mw; |
66 | 66 | ||
67 | if (faceSet.equals("")) | 67 | if (faceSet.equals("")) |
68 | { | 68 | { |
69 | mw = new MessageWindow(message); | 69 | mw = new MessageWindow(message); |
70 | } else { | 70 | } else { |
71 | mw = new MessageWindow(message, faceSet, face); | 71 | mw = new MessageWindow(message, faceSet, face); |
72 | } | 72 | } |
73 | 73 | ||
74 | Display.registerRenderable(mw); | 74 | Display.registerRenderable(mw); |
75 | KeyboardInput.registerInputable(mw); | 75 | KeyboardInput.registerInputable(mw); |
76 | |||
77 | mw.waitForCompletion(); | ||
78 | 76 | ||
79 | Display.unregisterRenderable(mw); | 77 | try { |
80 | KeyboardInput.unregisterInputable(mw); | 78 | mw.waitForCompletion(); |
79 | } catch (InterruptedException ex) { | ||
80 | /* The special event has been cancelled, kill the message and then | ||
81 | * propogate the exception to the EventHandler */ | ||
82 | throw ex; | ||
83 | } finally { | ||
84 | Display.unregisterRenderable(mw); | ||
85 | KeyboardInput.unregisterInputable(mw); | ||
86 | } | ||
81 | } | 87 | } |
82 | 88 | ||
83 | /** | 89 | /** |
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/movement/FollowMovementType.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/movement/FollowMovementType.java index b84fc4a..bbe9d82 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/movement/FollowMovementType.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/movement/FollowMovementType.java | |||
@@ -40,6 +40,9 @@ public class FollowMovementType implements MovementType { | |||
40 | 40 | ||
41 | private boolean search(ImmutableEvent ev) | 41 | private boolean search(ImmutableEvent ev) |
42 | { | 42 | { |
43 | /* Iterate over all of the directions and check if moving in that | ||
44 | * direction would place the event on the destination event. If so, the | ||
45 | * correct path has been aquired and thus we can return */ | ||
43 | for (Direction d : Direction.values()) | 46 | for (Direction d : Direction.values()) |
44 | { | 47 | { |
45 | Point loc = d.to(ev.getLocation()); | 48 | Point loc = d.to(ev.getLocation()); |
@@ -49,6 +52,9 @@ public class FollowMovementType implements MovementType { | |||
49 | } | 52 | } |
50 | } | 53 | } |
51 | 54 | ||
55 | /* Calculate the directions to attempt and the order in which to do so | ||
56 | * based on proximity to the destination event */ | ||
57 | |||
52 | List<Direction> ds = ev.getLegalMoves(); | 58 | List<Direction> ds = ev.getLegalMoves(); |
53 | List<Direction> tempd = new ArrayList<Direction>(); | 59 | List<Direction> tempd = new ArrayList<Direction>(); |
54 | 60 | ||
@@ -80,18 +86,25 @@ public class FollowMovementType implements MovementType { | |||
80 | } | 86 | } |
81 | } | 87 | } |
82 | 88 | ||
89 | // Remove calculated directions that aren't legal movements | ||
83 | tempd.retainAll(ds); | 90 | tempd.retainAll(ds); |
91 | |||
92 | // Randomize directions so movement is more fluid | ||
84 | Collections.shuffle(tempd); | 93 | Collections.shuffle(tempd); |
85 | 94 | ||
95 | // Iterate over the suggested directions | ||
86 | for (Direction d : tempd) | 96 | for (Direction d : tempd) |
87 | { | 97 | { |
98 | /* If the position in the suggested direction has already been | ||
99 | * covered, try the next direction */ | ||
88 | Point loc = d.to(ev.getLocation()); | 100 | Point loc = d.to(ev.getLocation()); |
89 | |||
90 | if (attempts.contains(loc)) | 101 | if (attempts.contains(loc)) |
91 | { | 102 | { |
92 | continue; | 103 | continue; |
93 | } | 104 | } |
94 | 105 | ||
106 | /* Create a dummy event and use it to search from the position in | ||
107 | * the suggested direction */ | ||
95 | Event temp = new LayerEvent(loc.x, loc.y); | 108 | Event temp = new LayerEvent(loc.x, loc.y); |
96 | temp.setParentMap(ev.getParentMap()); | 109 | temp.setParentMap(ev.getParentMap()); |
97 | attempts.add(loc); | 110 | attempts.add(loc); |