20
20
*/
21
21
package loon .action ;
22
22
23
+ import loon .action .collision .CollisionFilter ;
24
+ import loon .action .collision .CollisionResult ;
25
+ import loon .action .collision .CollisionWorld ;
23
26
import loon .utils .StringKeyValue ;
24
27
import loon .utils .timer .LTimer ;
25
28
@@ -31,6 +34,10 @@ public abstract class ActionEvent {
31
34
32
35
protected boolean firstTick , _isCompleted , isInit ;
33
36
37
+ protected CollisionWorld collisionWorld ;
38
+
39
+ protected CollisionFilter worldCollisionFilter ;
40
+
34
41
protected ActionBind original ;
35
42
36
43
protected Object tag ;
@@ -167,12 +174,55 @@ public ActionEvent set(ActionEvent e) {
167
174
original = e .original ;
168
175
return this ;
169
176
}
170
-
177
+
171
178
public ActionEvent kill () {
172
179
this ._isCompleted = true ;
173
180
return this ;
174
181
}
175
-
182
+
183
+ public void movePos (float x , float y ) {
184
+ movePos (x , y , -1f , -1f );
185
+ }
186
+
187
+ public void movePos (float x , float y , float lastX , float lastY ) {
188
+ if (original == null ) {
189
+ return ;
190
+ }
191
+ if (collisionWorld != null ) {
192
+ if (worldCollisionFilter == null ) {
193
+ worldCollisionFilter = CollisionFilter .getDefault ();
194
+ }
195
+ CollisionResult .Result result = collisionWorld .move (original , x , y , worldCollisionFilter );
196
+ if (lastX != -1 && lastY != -1 ) {
197
+ if (result .goalX != x || result .goalY != y ) {
198
+ original .setLocation (lastX , lastY );
199
+ } else {
200
+ original .setLocation (result .goalX , result .goalY );
201
+ }
202
+ } else {
203
+ original .setLocation (result .goalX , result .goalY );
204
+ }
205
+ } else {
206
+ original .setLocation (x , y );
207
+ }
208
+ }
209
+
210
+ public CollisionFilter getCollisionFilter () {
211
+ return worldCollisionFilter ;
212
+ }
213
+
214
+ public void setCollisionFilter (CollisionFilter filter ) {
215
+ this .worldCollisionFilter = filter ;
216
+ }
217
+
218
+ public CollisionWorld getCollisionWorld () {
219
+ return collisionWorld ;
220
+ }
221
+
222
+ public void setCollisionWorld (CollisionWorld world ) {
223
+ this .collisionWorld = world ;
224
+ }
225
+
176
226
public abstract ActionEvent cpy ();
177
227
178
228
public abstract ActionEvent reverse ();
@@ -182,14 +232,8 @@ public ActionEvent kill() {
182
232
@ Override
183
233
public String toString () {
184
234
StringKeyValue builder = new StringKeyValue (getName ());
185
- builder
186
- .kv ("loaded" , isInit )
187
- .comma ()
188
- .kv ("bind" , original )
189
- .comma ()
190
- .kv ("offset" , (offsetX + " x " + offsetY ))
191
- .comma ()
192
- .kv ("tag" , tag );
235
+ builder .kv ("loaded" , isInit ).comma ().kv ("bind" , original ).comma ().kv ("offset" , (offsetX + " x " + offsetY ))
236
+ .comma ().kv ("tag" , tag );
193
237
return builder .toString ();
194
238
}
195
239
}
0 commit comments