summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/Map.java14
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java9
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/event/AbstractEvent.java122
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/event/Event.java7
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/event/EventList.java28
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/event/HeroEvent.java94
-rw-r--r--src/com/fourisland/fourpuzzle/gamestate/mapview/event/LayerEvent.java103
7 files changed, 195 insertions, 182 deletions
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/Map.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/Map.java index 62270bf..bc0073e 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/Map.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/Map.java
@@ -6,7 +6,9 @@
6package com.fourisland.fourpuzzle.gamestate.mapview; 6package com.fourisland.fourpuzzle.gamestate.mapview;
7 7
8import com.fourisland.fourpuzzle.*; 8import com.fourisland.fourpuzzle.*;
9import com.fourisland.fourpuzzle.gamestate.mapview.event.Event;
9import com.fourisland.fourpuzzle.gamestate.mapview.event.EventList; 10import com.fourisland.fourpuzzle.gamestate.mapview.event.EventList;
11import com.fourisland.fourpuzzle.gamestate.mapview.event.HeroEvent;
10import com.fourisland.fourpuzzle.gamestate.mapview.event.LayerEvent; 12import com.fourisland.fourpuzzle.gamestate.mapview.event.LayerEvent;
11import java.awt.Dimension; 13import java.awt.Dimension;
12import java.util.HashMap; 14import java.util.HashMap;
@@ -41,7 +43,7 @@ public abstract class Map {
41 } 43 }
42 } 44 }
43 45
44 private EventList events = new EventList(); 46 private EventList events = new EventList(this);
45 public EventList getEvents() 47 public EventList getEvents()
46 { 48 {
47 return events; 49 return events;
@@ -59,8 +61,11 @@ public abstract class Map {
59 return null; 61 return null;
60 } 62 }
61 63
62 public boolean checkForCollision(int x, int y, Direction toMove) 64 public boolean checkForCollision(Event ev, Direction toMove)
63 { 65 {
66 int x = ev.getLocation().x;
67 int y = ev.getLocation().y;
68
64 if ((toMove == Direction.North) && (y == 0)) 69 if ((toMove == Direction.North) && (y == 0))
65 { 70 {
66 return true; 71 return true;
@@ -75,6 +80,11 @@ public abstract class Map {
75 return true; 80 return true;
76 } 81 }
77 82
83 if ((ev instanceof HeroEvent) && (((MapViewGameState) Game.getGameState()).debugWalkthrough))
84 {
85 return false;
86 }
87
78 if ((toMove == Direction.North) && (checkForEventCollision(x, y-1))) 88 if ((toMove == Direction.North) && (checkForEventCollision(x, y-1)))
79 { 89 {
80 return true; 90 return true;
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java index 48653c0..0604dd0 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java
@@ -29,7 +29,7 @@ import java.util.logging.Logger;
29 */ 29 */
30public class MapViewGameState implements GameState { 30public class MapViewGameState implements GameState {
31 31
32 boolean debugWalkthrough = false; 32 public boolean debugWalkthrough = false;
33 boolean processInput = true; 33 boolean processInput = true;
34 Map currentMap; 34 Map currentMap;
35 35
@@ -99,12 +99,7 @@ public class MapViewGameState implements GameState {
99 99
100 if (letsMove) 100 if (letsMove)
101 { 101 {
102 if (debugWalkthrough || (!currentMap.checkForCollision(hero.getLocation().x, hero.getLocation().y, toMove))) 102 hero.startMoving(toMove);
103 {
104 hero.startMoving(toMove);
105 } else {
106 hero.setDirection(toMove);
107 }
108 } 103 }
109 104
110 if ((Game.getKey().getKeyCode() == KeyEvent.VK_ENTER) || (Game.getKey().getKeyCode() == KeyEvent.VK_SPACE)) 105 if ((Game.getKey().getKeyCode() == KeyEvent.VK_ENTER) || (Game.getKey().getKeyCode() == KeyEvent.VK_SPACE))
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/AbstractEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/AbstractEvent.java new file mode 100644 index 0000000..e5334c8 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/AbstractEvent.java
@@ -0,0 +1,122 @@
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.event;
7
8import com.fourisland.fourpuzzle.Direction;
9import com.fourisland.fourpuzzle.gamestate.mapview.Map;
10import com.fourisland.fourpuzzle.util.Functions;
11import java.awt.Point;
12
13/**
14 *
15 * @author hatkirby
16 */
17public abstract class AbstractEvent implements Event {
18
19 private Point location = new Point();
20 public Point getLocation()
21 {
22 return location;
23 }
24 public void setLocation(Point location)
25 {
26 this.location = location;
27 }
28 public void setLocation(int x, int y)
29 {
30 location.setLocation(x, y);
31 }
32
33 private boolean moving = false;
34 public boolean isMoving()
35 {
36 return moving;
37 }
38 public void setMoving(boolean moving)
39 {
40 this.moving = moving;
41 }
42
43 /* TODO Remove the moveDirection field. As direction itself is
44 * always the same as moveDirection when moveDirection is needed,
45 * it will do fine without having to complicated access modifiers
46 */
47
48 protected int moveTimer;
49 protected Direction moveDirection;
50 public void startMoving(Direction toMove)
51 {
52 setDirection(toMove);
53
54 if (!getParentMap().checkForCollision(this, toMove))
55 {
56 setAnimationStep(2);
57 moveTimer = 4;
58 setMoving(true);
59 moveDirection = toMove;
60 }
61 }
62
63 public void processMoving()
64 {
65 if (isMoving())
66 {
67 moveTimer--;
68 if (moveTimer == 2)
69 {
70 setAnimationStep(0);
71 } else if (moveTimer == 0)
72 {
73 setAnimationStep(1);
74 moving = false;
75
76 if (moveDirection == Direction.North)
77 {
78 setLocation(getLocation().x,getLocation().y-1);
79 } else if (moveDirection == Direction.West)
80 {
81 setLocation(getLocation().x-1,getLocation().y);
82 } else if (moveDirection == Direction.South)
83 {
84 setLocation(getLocation().x,getLocation().y+1);
85 } else if (moveDirection == Direction.East)
86 {
87 setLocation(getLocation().x+1,getLocation().y);
88 }
89 }
90 }
91 }
92
93 public boolean isOccupyingSpace(int x, int y)
94 {
95 if (getLocation().equals(new Point(x,y)))
96 {
97 return true;
98 }
99
100 if (Functions.isMovingTo(this, x, y))
101 {
102 return true;
103 }
104
105 return false;
106 }
107
108 private Map parentMap = null;
109 public Map getParentMap()
110 {
111 if (parentMap == null)
112 {
113 throw new NullPointerException();
114 }
115
116 return parentMap;
117 }
118 public void setParentMap(Map parentMap)
119 {
120 this.parentMap = parentMap;
121 }
122}
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/Event.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/Event.java index 71b507f..d6219b3 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/Event.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/Event.java
@@ -7,6 +7,7 @@ package com.fourisland.fourpuzzle.gamestate.mapview.event;
7 7
8import com.fourisland.fourpuzzle.Direction; 8import com.fourisland.fourpuzzle.Direction;
9import com.fourisland.fourpuzzle.Layer; 9import com.fourisland.fourpuzzle.Layer;
10import com.fourisland.fourpuzzle.gamestate.mapview.Map;
10import java.awt.Graphics; 11import java.awt.Graphics;
11import java.awt.Point; 12import java.awt.Point;
12 13
@@ -34,4 +35,10 @@ public interface Event {
34 public Layer getLayer(); 35 public Layer getLayer();
35 36
36 public boolean isOccupyingSpace(int x, int y); 37 public boolean isOccupyingSpace(int x, int y);
38
39 public void setAnimationStep(int animStep);
40 public int getAnimationStep();
41
42 public void setParentMap(Map parentMap);
43 public Map getParentMap();
37} 44}
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/EventList.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/EventList.java index a10aadc..8de4e3c 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/EventList.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/EventList.java
@@ -5,6 +5,7 @@
5 5
6package com.fourisland.fourpuzzle.gamestate.mapview.event; 6package com.fourisland.fourpuzzle.gamestate.mapview.event;
7 7
8import com.fourisland.fourpuzzle.gamestate.mapview.Map;
8import java.util.Vector; 9import java.util.Vector;
9 10
10/** 11/**
@@ -13,6 +14,11 @@ import java.util.Vector;
13 */ 14 */
14public class EventList extends Vector<LayerEvent> { 15public class EventList extends Vector<LayerEvent> {
15 16
17 public EventList(Map parentMap)
18 {
19 setParentMap(parentMap);
20 }
21
16 @Override 22 @Override
17 public boolean add(LayerEvent o) 23 public boolean add(LayerEvent o)
18 { 24 {
@@ -27,7 +33,7 @@ public class EventList extends Vector<LayerEvent> {
27 return false; 33 return false;
28 } 34 }
29 35
30 for (Event ev : this) 36 for (LayerEvent ev : this)
31 { 37 {
32 if (ev.getLabel().equals(o.getLabel())) 38 if (ev.getLabel().equals(o.getLabel()))
33 { 39 {
@@ -36,7 +42,27 @@ public class EventList extends Vector<LayerEvent> {
36 } 42 }
37 } 43 }
38 44
45 if (parentMap != null)
46 {
47 o.setParentMap(parentMap);
48 }
49
39 return super.add(o); 50 return super.add(o);
40 } 51 }
52
53 private Map parentMap = null;
54 public Map getParentMap()
55 {
56 return parentMap;
57 }
58 public void setParentMap(Map parentMap)
59 {
60 this.parentMap = parentMap;
61
62 for (LayerEvent ev : this)
63 {
64 ev.setParentMap(parentMap);
65 }
66 }
41 67
42} 68}
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/HeroEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/HeroEvent.java index d488e7d..17140b9 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/HeroEvent.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/HeroEvent.java
@@ -11,18 +11,18 @@ import java.awt.Point;
11import com.fourisland.fourpuzzle.Direction; 11import com.fourisland.fourpuzzle.Direction;
12import com.fourisland.fourpuzzle.Game; 12import com.fourisland.fourpuzzle.Game;
13import com.fourisland.fourpuzzle.GameCharacter; 13import com.fourisland.fourpuzzle.GameCharacter;
14import com.fourisland.fourpuzzle.gamestate.mapview.CharSet; 14import com.fourisland.fourpuzzle.gamestate.mapview.Map;
15import com.fourisland.fourpuzzle.util.Functions; 15import com.fourisland.fourpuzzle.gamestate.mapview.MapViewGameState;
16 16
17/** 17/**
18 * 18 *
19 * @author hatkirby 19 * @author hatkirby
20 */ 20 */
21public class HeroEvent implements Event { 21public class HeroEvent extends AbstractEvent implements Event {
22 22
23 public HeroEvent() 23 public HeroEvent()
24 { 24 {
25 location = new Point(); 25 setLocation(new Point());
26 } 26 }
27 27
28 public String getLabel() 28 public String getLabel()
@@ -30,26 +30,12 @@ public class HeroEvent implements Event {
30 return "Hero"; 30 return "Hero";
31 } 31 }
32 32
33 private Point location;
34 public Point getLocation()
35 {
36 return location;
37 }
38 public void setLocation(Point location)
39 {
40 this.location = location;
41 }
42 public void setLocation(int x, int y)
43 {
44 location.setLocation(x, y);
45 }
46
47 public void render(Graphics g) 33 public void render(Graphics g)
48 { 34 {
49 int x = (location.x * 16) - 4; 35 int x = (getLocation().x * 16) - 4;
50 int y = (location.y * 16) - 16; 36 int y = (getLocation().y * 16) - 16;
51 37
52 if (moving) 38 if (isMoving())
53 { 39 {
54 if (moveDirection == Direction.North) 40 if (moveDirection == Direction.North)
55 { 41 {
@@ -75,57 +61,6 @@ public class HeroEvent implements Event {
75 } 61 }
76 } 62 }
77 63
78
79 private boolean moving = false;
80 public boolean isMoving()
81 {
82 return moving;
83 }
84 public void setMoving(boolean moving)
85 {
86 this.moving = moving;
87 }
88
89 private int moveTimer;
90 private Direction moveDirection;
91 public void startMoving(Direction toMove)
92 {
93 setDirection(toMove);
94 setAnimationStep(2);
95 moveTimer = 4;
96 moving = true;
97 moveDirection = toMove;
98 }
99 public void processMoving()
100 {
101 if (moving)
102 {
103 moveTimer--;
104 if (moveTimer == 2)
105 {
106 setAnimationStep(0);
107 } else if (moveTimer == 0)
108 {
109 setAnimationStep(1);
110 moving = false;
111
112 if (moveDirection == Direction.North)
113 {
114 setLocation(getLocation().x,getLocation().y-1);
115 } else if (moveDirection == Direction.West)
116 {
117 setLocation(getLocation().x-1,getLocation().y);
118 } else if (moveDirection == Direction.South)
119 {
120 setLocation(getLocation().x,getLocation().y+1);
121 } else if (moveDirection == Direction.East)
122 {
123 setLocation(getLocation().x+1,getLocation().y);
124 }
125 }
126 }
127 }
128
129 private Direction direction = Direction.South; 64 private Direction direction = Direction.South;
130 public Direction getDirection() 65 public Direction getDirection()
131 { 66 {
@@ -151,19 +86,10 @@ public class HeroEvent implements Event {
151 return Layer.Middle; 86 return Layer.Middle;
152 } 87 }
153 88
154 public boolean isOccupyingSpace(int x, int y) 89 @Override
90 public Map getParentMap()
155 { 91 {
156 if (getLocation().equals(new Point(x,y))) 92 return ((MapViewGameState) Game.getGameState()).getCurrentMap();
157 {
158 return true;
159 }
160
161 if (Functions.isMovingTo(this, x, y))
162 {
163 return true;
164 }
165
166 return false;
167 } 93 }
168 94
169} 95}
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/LayerEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/LayerEvent.java index f42cdf0..6be72b7 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/LayerEvent.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/LayerEvent.java
@@ -7,17 +7,16 @@ package com.fourisland.fourpuzzle.gamestate.mapview.event;
7 7
8import com.fourisland.fourpuzzle.Layer; 8import com.fourisland.fourpuzzle.Layer;
9import java.awt.Graphics; 9import java.awt.Graphics;
10import java.awt.Point;
11import java.util.ArrayList; 10import java.util.ArrayList;
12import com.fourisland.fourpuzzle.Direction; 11import com.fourisland.fourpuzzle.Direction;
13import com.fourisland.fourpuzzle.gamestate.mapview.Map; 12import com.fourisland.fourpuzzle.gamestate.mapview.Map;
14import com.fourisland.fourpuzzle.util.Functions; 13import com.fourisland.fourpuzzle.gamestate.mapview.event.graphic.BlankEventGraphic;
15 14
16/** 15/**
17 * 16 *
18 * @author hatkirby 17 * @author hatkirby
19 */ 18 */
20public class LayerEvent implements Event { 19public class LayerEvent extends AbstractEvent implements Event {
21 20
22 /** Create a new Event instance 21 /** Create a new Event instance
23 * 22 *
@@ -26,7 +25,7 @@ public class LayerEvent implements Event {
26 */ 25 */
27 public LayerEvent(int x, int y) 26 public LayerEvent(int x, int y)
28 { 27 {
29 location = new Point(x,y); 28 setLocation(x,y);
30 events = new ArrayList<PossibleEvent>(); 29 events = new ArrayList<PossibleEvent>();
31 label = "Unlabelled"; 30 label = "Unlabelled";
32 } 31 }
@@ -49,20 +48,6 @@ public class LayerEvent implements Event {
49 return label; 48 return label;
50 } 49 }
51 50
52 private Point location;
53 public Point getLocation()
54 {
55 return location;
56 }
57 public void setLocation(Point location)
58 {
59 this.location = location;
60 }
61 public void setLocation(int x, int y)
62 {
63 location.setLocation(x, y);
64 }
65
66 private ArrayList<PossibleEvent> events; 51 private ArrayList<PossibleEvent> events;
67 public void addEvent(PossibleEvent pe) 52 public void addEvent(PossibleEvent pe)
68 { 53 {
@@ -92,10 +77,10 @@ public class LayerEvent implements Event {
92 77
93 public void render(Graphics g) 78 public void render(Graphics g)
94 { 79 {
95 int x = (location.x * 16) - 4; 80 int x = (getLocation().x * 16) - 4;
96 int y = (location.y * 16) - 16; 81 int y = (getLocation().y * 16) - 16;
97 82
98 if (moving) 83 if (isMoving())
99 { 84 {
100 if (moveDirection == Direction.North) 85 if (moveDirection == Direction.North)
101 { 86 {
@@ -113,72 +98,19 @@ public class LayerEvent implements Event {
113 } 98 }
114 99
115 PossibleEvent toDraw = getPossibleEvent(); 100 PossibleEvent toDraw = getPossibleEvent();
116 if (!toDraw.getGraphic().equals("blank")) 101 if (!toDraw.getGraphic().equals(new BlankEventGraphic()))
117 { 102 {
118 g.drawImage(toDraw.getImage(), x, y, null); 103 g.drawImage(toDraw.getImage(), x, y, null);
119 } 104 }
120 } 105 }
121 106
122
123 private boolean moving = false;
124 public boolean isMoving()
125 {
126 return moving;
127 }
128 public void setMoving(boolean moving)
129 {
130 this.moving = moving;
131 }
132
133 private int moveTimer;
134 private Direction moveDirection;
135 public void startMoving(Map map) 107 public void startMoving(Map map)
136 { 108 {
137 Direction toMove = getPossibleEvent().getMovement().nextMovement(); 109 Direction toMove = getPossibleEvent().getMovement().nextMovement();
138 110
139 if (toMove != null) 111 if (toMove != null)
140 { 112 {
141 if (!map.checkForCollision(getLocation().x, getLocation().y, toMove)) 113 startMoving(toMove);
142 {
143 startMoving(toMove);
144 }
145 }
146 }
147 public void startMoving(Direction toMove)
148 {
149 getPossibleEvent().setDirection(toMove);
150 getPossibleEvent().setAnimationStep(2);
151 moveTimer = 4;
152 moving = true;
153 moveDirection = toMove;
154 }
155 public void processMoving()
156 {
157 if (moving)
158 {
159 moveTimer--;
160 if (moveTimer == 2)
161 {
162 getPossibleEvent().setAnimationStep(0);
163 } else if (moveTimer == 0)
164 {
165 getPossibleEvent().setAnimationStep(1);
166 moving = false;
167
168 if (moveDirection == Direction.North)
169 {
170 setLocation(getLocation().x,getLocation().y-1);
171 } else if (moveDirection == Direction.West)
172 {
173 setLocation(getLocation().x-1,getLocation().y);
174 } else if (moveDirection == Direction.South)
175 {
176 setLocation(getLocation().x,getLocation().y+1);
177 } else if (moveDirection == Direction.East)
178 {
179 setLocation(getLocation().x+1,getLocation().y);
180 }
181 }
182 } 114 }
183 } 115 }
184 116
@@ -209,20 +141,15 @@ public class LayerEvent implements Event {
209 public void setLabel(String string) { 141 public void setLabel(String string) {
210 this.label = string; 142 this.label = string;
211 } 143 }
144
145 public void setAnimationStep(int animStep)
146 {
147 getPossibleEvent().setAnimationStep(animStep);
148 }
212 149
213 public boolean isOccupyingSpace(int x, int y) 150 public int getAnimationStep()
214 { 151 {
215 if (getLocation().equals(new Point(x,y))) 152 return getPossibleEvent().getAnimationStep();
216 {
217 return true;
218 }
219
220 if (Functions.isMovingTo(this, x, y))
221 {
222 return true;
223 }
224
225 return false;
226 } 153 }
227 154
228} \ No newline at end of file 155} \ No newline at end of file