1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package cz.cuni.amis.pogamut.ut2004.agent.navigation.navmesh.pathfollowing;
18
19 import cz.cuni.amis.pogamut.base3d.worldview.object.Location;
20 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.NavPointNeighbourLink;
21
22
23
24
25
26
27 public class JumpBoundaries {
28
29 private boolean jumpable;
30
31 private Location takeOffMin;
32 private Location takeOffMax;
33 private Location takeoffEdgeDirection;
34
35 private Location landingTarget;
36
37 private Location navigTarget;
38
39 private Location targetEdgeDirection;
40 private NavPointNeighbourLink link;
41
42
43
44
45
46
47
48
49
50
51
52
53 public JumpBoundaries(NavPointNeighbourLink link, Location takeOffMin, Location takeOffMax, Location takeoffEdgeDirection, Location target, Location targetEdgeDirection, Location navigTarget) {
54 this.link = link;
55 this.takeOffMin = takeOffMin;
56 this.takeOffMax = takeOffMax;
57 this.takeoffEdgeDirection = takeoffEdgeDirection;
58 this.landingTarget = target;
59 this.targetEdgeDirection = targetEdgeDirection;
60 this.navigTarget = navigTarget;
61 this.jumpable = true;
62 }
63
64
65
66
67
68
69 public JumpBoundaries(NavPointNeighbourLink link) {
70 this.link = link;
71 this.jumpable = false;
72 }
73
74
75
76
77
78 public NavPointNeighbourLink getLink() {
79 return link;
80 }
81
82
83
84
85
86 public void setLink(NavPointNeighbourLink link) {
87 this.link = link;
88 }
89
90
91
92
93
94 public boolean isJumpable() {
95 return jumpable;
96 }
97
98
99
100
101
102 public void setJumpable(boolean jumpable) {
103 this.jumpable = jumpable;
104 }
105
106
107
108
109
110 public Location getTakeOffMin() {
111 return takeOffMin;
112 }
113
114
115
116
117
118 public void setTakeOffMin(Location takeOffMin) {
119 this.takeOffMin = takeOffMin;
120 }
121
122
123
124
125
126 public Location getTakeOffMax() {
127 return takeOffMax;
128 }
129
130
131
132
133
134 public void setTakeOffMax(Location takeOffMax) {
135 this.takeOffMax = takeOffMax;
136 }
137
138
139
140
141
142 public Location getLandingTarget() {
143 return landingTarget;
144 }
145
146
147
148
149
150 public void setLandingTarget(Location landingTarget) {
151 this.landingTarget = landingTarget;
152 }
153
154
155
156
157
158
159
160 boolean isInBoundaries(Location botLocation) {
161 if (!jumpable) {
162 return false;
163 }
164
165 if (takeOffMin.equals(takeOffMax, 1.0)) {
166
167 return botLocation.getDistance(takeOffMin) < 20;
168 }
169
170
171 return botLocation.getDistance(takeOffMax) + botLocation.getDistance(takeOffMin) <= 2 * takeOffMin.getDistance(takeOffMax);
172 }
173
174
175
176
177
178
179
180 boolean isPastBoundaries(Location botLocation) {
181 if (jumpable) {
182 return botLocation.getDistance(landingTarget) < takeOffMax.getDistance(landingTarget);
183 } else {
184 return false;
185 }
186 }
187
188
189
190
191
192
193 public boolean isJumpUp() {
194 return jumpable && landingTarget.z - takeOffMax.z > 45;
195 }
196
197
198
199
200
201
202 public Location getTargetEdgeDirection() {
203 return targetEdgeDirection;
204 }
205
206
207
208
209
210
211 public Location getTakeoffEdgeDirection() {
212 return takeoffEdgeDirection;
213 }
214
215
216
217
218
219
220 public Location getNavigTarget() {
221 return navigTarget;
222 }
223
224
225
226
227
228
229
230 boolean canLandLater(double distanceLater) {
231 return landingTarget.getDistance2D(navigTarget) > distanceLater;
232 }
233
234 }