1
2
3
4
5
6
7
8
9
10 package
11 cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages;
12 import java.util.*;
13 import javax.vecmath.*;
14 import cz.cuni.amis.pogamut.base.communication.messages.*;
15 import cz.cuni.amis.pogamut.base.communication.worldview.*;
16 import cz.cuni.amis.pogamut.base.communication.worldview.event.*;
17 import cz.cuni.amis.pogamut.base.communication.worldview.object.*;
18 import cz.cuni.amis.pogamut.base.communication.translator.event.*;
19 import cz.cuni.amis.pogamut.base3d.worldview.object.*;
20 import cz.cuni.amis.pogamut.base3d.worldview.object.event.*;
21 import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;
22 import cz.cuni.amis.pogamut.udk.communication.messages.*;
23 import cz.cuni.amis.pogamut.udk.communication.worldview.objects.*;
24 import cz.cuni.amis.pogamut.udk.communication.translator.itemdescriptor.*;
25 import cz.cuni.amis.pogamut.udk.communication.messages.ItemType.Category;
26 import cz.cuni.amis.utils.exception.*;
27 import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result;
28 import cz.cuni.amis.utils.SafeEquals;
29 import cz.cuni.amis.pogamut.multi.communication.worldview.object.*;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public class
46 Mover
47 extends GBObjectUpdate
48
49 implements IGBWorldObjectEvent, IWorldObject, ILocated, ILocomotive, IGBViewable
50
51 {
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 public Mover(
87 UnrealId Id, Location Location, boolean Visible, boolean Reachable, boolean DamageTrig, String Type, boolean IsMoving, Velocity Velocity, double MoveTime, double OpenTime, Location BasePos, Location BaseRot, double DelayTime, String State, UnrealId NavPointMarker) {
88
89 this.Id = Id;
90
91 this.Location = Location;
92
93 this.Visible = Visible;
94
95 this.Reachable = Reachable;
96
97 this.DamageTrig = DamageTrig;
98
99 this.Type = Type;
100
101 this.IsMoving = IsMoving;
102
103 this.Velocity = Velocity;
104
105 this.MoveTime = MoveTime;
106
107 this.OpenTime = OpenTime;
108
109 this.BasePos = BasePos;
110
111 this.BaseRot = BaseRot;
112
113 this.DelayTime = DelayTime;
114
115 this.State = State;
116
117 this.NavPointMarker = NavPointMarker;
118
119 }
120
121
122
123 public static final String PROTOTYPE =
124 "MOV {Id unreal_id} {Location 0,0,0} {Visible False} {Reachable False} {DamageTrig False} {Type text} {IsMoving False} {Velocity 0,0,0} {MoveTime 0} {OpenTime 0} {BasePos 0,0,0} {BaseRot 0,0,0} {DelayTime 0} {State text} {NavPointMarker unreal_id}";
125
126
127
128
129
130
131
132
133 protected
134 UnrealId Id =
135 null;
136
137
138
139
140
141
142 public
143 UnrealId getId() {
144 return
145 Id;
146 }
147
148
149
150
151
152 protected
153 Location Location =
154 null;
155
156
157
158
159 public
160 Location getLocation() {
161 return
162 Location;
163 }
164
165
166
167
168
169 protected
170 boolean Visible =
171 false;
172
173
174
175
176 public
177 boolean isVisible() {
178 return
179 Visible;
180 }
181
182
183
184
185
186
187
188 protected
189 boolean Reachable =
190 false;
191
192
193
194
195
196
197 public
198 boolean isReachable() {
199 return
200 Reachable;
201 }
202
203
204
205
206
207
208
209 protected
210 boolean DamageTrig =
211 false;
212
213
214
215
216
217
218 public
219 boolean isDamageTrig() {
220 return
221 DamageTrig;
222 }
223
224
225
226
227
228 protected
229 String Type =
230 null;
231
232
233
234
235 public
236 String getType() {
237 return
238 Type;
239 }
240
241
242
243
244
245 protected
246 boolean IsMoving =
247 false;
248
249
250
251
252 public
253 boolean isIsMoving() {
254 return
255 IsMoving;
256 }
257
258
259
260
261
262 protected
263 Velocity Velocity =
264 null;
265
266
267
268
269 public
270 Velocity getVelocity() {
271 return
272 Velocity;
273 }
274
275
276
277
278
279 protected
280 double MoveTime =
281 0;
282
283
284
285
286 public
287 double getMoveTime() {
288 return
289 MoveTime;
290 }
291
292
293
294
295
296
297 protected
298 double OpenTime =
299 0;
300
301
302
303
304
305 public
306 double getOpenTime() {
307 return
308 OpenTime;
309 }
310
311
312
313
314
315 protected
316 Location BasePos =
317 null;
318
319
320
321
322 public
323 Location getBasePos() {
324 return
325 BasePos;
326 }
327
328
329
330
331
332 protected
333 Location BaseRot =
334 null;
335
336
337
338
339 public
340 Location getBaseRot() {
341 return
342 BaseRot;
343 }
344
345
346
347
348
349 protected
350 double DelayTime =
351 0;
352
353
354
355
356 public
357 double getDelayTime() {
358 return
359 DelayTime;
360 }
361
362
363
364
365
366 protected
367 String State =
368 null;
369
370
371
372
373 public
374 String getState() {
375 return
376 State;
377 }
378
379
380
381
382
383 protected
384 UnrealId NavPointMarker =
385 null;
386
387
388
389
390 public
391 UnrealId getNavPointMarker() {
392 return
393 NavPointMarker;
394 }
395
396
397
398
399
400
401
402
403
404 protected double Time = 0;
405
406 protected double getTime() {
407 return Time;
408 }
409
410 protected void setTime(double time) {
411 this.Time = time;
412 }
413
414 public double getLastSeenTime() {
415 return Time;
416 }
417
418
419 public ILocalWorldObject getLocal() {
420 return null;
421 }
422
423 public ISharedWorldObject getShared() {
424 return null;
425 }
426
427 public IStaticWorldObject getStatic() {
428 return null;
429 }
430
431 @Override
432 public long getSimTime() {
433 return (long)getLastSeenTime();
434 }
435
436 public boolean equals(Object obj) {
437 if (!(obj instanceof Mover)) return false;
438 Mover cast = (Mover)obj;
439 if (this.getId() != null) return this.getId().equals(cast.getId());
440 else return cast.getId() == null;
441 }
442
443 public int hashCode() {
444 if (getId() != null) return getId().hashCode();
445 return 0;
446 }
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464 public Mover(Mover original) {
465
466 this.Id=original.Id;
467
468 this.Location=original.Location;
469
470 this.Visible=original.Visible;
471
472 this.Reachable=original.Reachable;
473
474 this.DamageTrig=original.DamageTrig;
475
476 this.Type=original.Type;
477
478 this.IsMoving=original.IsMoving;
479
480 this.Velocity=original.Velocity;
481
482 this.MoveTime=original.MoveTime;
483
484 this.OpenTime=original.OpenTime;
485
486 this.BasePos=original.BasePos;
487
488 this.BaseRot=original.BaseRot;
489
490 this.DelayTime=original.DelayTime;
491
492 this.State=original.State;
493
494 this.NavPointMarker=original.NavPointMarker;
495
496 }
497
498
499
500
501
502 public Mover() {
503 }
504
505
506
507
508
509 public static class ObjectDisappeared implements IGBWorldObjectDisappeared {
510
511 private IWorldObject orig;
512
513 public ObjectDisappeared(IWorldObject orig) {
514 this.orig = orig;
515 }
516
517 public WorldObjectId getId() {
518 return orig.getId();
519 }
520
521 public long getSimTime() {
522 return 0;
523 }
524
525 public IWorldObjectUpdateResult update(IWorldObject obj) {
526 if (obj == null) {
527 throw new PogamutException("not meant to create new object, probably wanted to update non-existing object of id: " + getId(), this);
528 }
529 if (!(obj instanceof Mover)) {
530 throw new PogamutException("can't update object of class " + obj.getClass() + ", meant to update Mover", this);
531 }
532 orig = obj;
533 Mover toUpdate = (Mover)obj;
534 if (toUpdate.Visible) {
535 toUpdate.Visible = false;
536 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result.UPDATED, toUpdate);
537 } else {
538 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result.SAME, toUpdate);
539 }
540 }
541
542 public IWorldObject getObject() {
543 return orig;
544 }
545
546 public String toString() {
547 return "ObjectDisappeared[" + orig.getClass().getSimpleName() + " " + orig.getId().getStringId() + "]";
548 }
549
550 }
551
552
553
554
555 public Mover(Mover Original, boolean Visible) {
556 this(Original);
557 this.Visible = Visible;
558 }
559
560 public IGBWorldObjectDisappeared createDisappearEvent() {
561 return new ObjectDisappeared(this);
562 }
563
564
565
566
567
568 private IWorldObject orig = null;
569
570 public IWorldObjectUpdateResult update(IWorldObject obj) {
571 if(obj == null) {
572 orig = this;
573 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result.CREATED, this);
574 }
575 orig = obj;
576
577 Mover o = (Mover)obj;
578
579 boolean updated = false;
580
581
582 if (!SafeEquals.equals(o.Location, Location)) {
583 o.Location=Location;
584 updated = true;
585 }
586
587 if (o.Visible != Visible) {
588 o.Visible=Visible;
589 updated = true;
590 }
591
592 if (o.Reachable != Reachable) {
593 o.Reachable=Reachable;
594 updated = true;
595 }
596
597 if (o.IsMoving != IsMoving) {
598 o.IsMoving=IsMoving;
599 updated = true;
600 }
601
602 if (!SafeEquals.equals(o.Velocity, Velocity)) {
603 o.Velocity=Velocity;
604 updated = true;
605 }
606
607 if (!SafeEquals.equals(o.State, State)) {
608 o.State=State;
609 updated = true;
610 }
611
612 o.Time = Time;
613
614
615 if (updated) {
616 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result.UPDATED, o);
617 } else {
618 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result.SAME, o);
619 }
620 }
621
622
623
624
625
626 public IWorldObject getObject() {
627 if (orig == null) return this;
628 return orig;
629 }
630
631
632
633 public String toString() {
634 return
635
636 super.toString() + " | " +
637
638 "Id = " +
639 String.valueOf(Id) + " | " +
640
641 "Location = " +
642 String.valueOf(Location) + " | " +
643
644 "Visible = " +
645 String.valueOf(Visible) + " | " +
646
647 "Reachable = " +
648 String.valueOf(Reachable) + " | " +
649
650 "DamageTrig = " +
651 String.valueOf(DamageTrig) + " | " +
652
653 "Type = " +
654 String.valueOf(Type) + " | " +
655
656 "IsMoving = " +
657 String.valueOf(IsMoving) + " | " +
658
659 "Velocity = " +
660 String.valueOf(Velocity) + " | " +
661
662 "MoveTime = " +
663 String.valueOf(MoveTime) + " | " +
664
665 "OpenTime = " +
666 String.valueOf(OpenTime) + " | " +
667
668 "BasePos = " +
669 String.valueOf(BasePos) + " | " +
670
671 "BaseRot = " +
672 String.valueOf(BaseRot) + " | " +
673
674 "DelayTime = " +
675 String.valueOf(DelayTime) + " | " +
676
677 "State = " +
678 String.valueOf(State) + " | " +
679
680 "NavPointMarker = " +
681 String.valueOf(NavPointMarker) + " | " +
682 "";
683
684 }
685
686 public String toHtmlString() {
687 return super.toString() +
688
689 "<b>Id</b> : " +
690 String.valueOf(Id) +
691 " <br/> " +
692
693 "<b>Location</b> : " +
694 String.valueOf(Location) +
695 " <br/> " +
696
697 "<b>Visible</b> : " +
698 String.valueOf(Visible) +
699 " <br/> " +
700
701 "<b>Reachable</b> : " +
702 String.valueOf(Reachable) +
703 " <br/> " +
704
705 "<b>DamageTrig</b> : " +
706 String.valueOf(DamageTrig) +
707 " <br/> " +
708
709 "<b>Type</b> : " +
710 String.valueOf(Type) +
711 " <br/> " +
712
713 "<b>IsMoving</b> : " +
714 String.valueOf(IsMoving) +
715 " <br/> " +
716
717 "<b>Velocity</b> : " +
718 String.valueOf(Velocity) +
719 " <br/> " +
720
721 "<b>MoveTime</b> : " +
722 String.valueOf(MoveTime) +
723 " <br/> " +
724
725 "<b>OpenTime</b> : " +
726 String.valueOf(OpenTime) +
727 " <br/> " +
728
729 "<b>BasePos</b> : " +
730 String.valueOf(BasePos) +
731 " <br/> " +
732
733 "<b>BaseRot</b> : " +
734 String.valueOf(BaseRot) +
735 " <br/> " +
736
737 "<b>DelayTime</b> : " +
738 String.valueOf(DelayTime) +
739 " <br/> " +
740
741 "<b>State</b> : " +
742 String.valueOf(State) +
743 " <br/> " +
744
745 "<b>NavPointMarker</b> : " +
746 String.valueOf(NavPointMarker) +
747 " <br/> " +
748 "";
749 }
750
751
752
753 }
754
755