1 package cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages;
2
3 // --- IMPORTS FROM /messages/settings/javasettings/javaimport BEGIN
4 import java.util.*;import javax.vecmath.*;import cz.cuni.amis.pogamut.base.communication.messages.*;import cz.cuni.amis.pogamut.base.communication.worldview.*;import cz.cuni.amis.pogamut.base.communication.worldview.event.*;import cz.cuni.amis.pogamut.base.communication.worldview.object.*;import cz.cuni.amis.pogamut.multi.communication.worldview.object.*;import cz.cuni.amis.pogamut.base.communication.translator.event.*;import cz.cuni.amis.pogamut.multi.communication.translator.event.*;import cz.cuni.amis.pogamut.base3d.worldview.object.*;import cz.cuni.amis.pogamut.base3d.worldview.object.event.*;import cz.cuni.amis.pogamut.ut2004.communication.messages.*;import cz.cuni.amis.pogamut.ut2004.communication.worldview.objects.*;import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.objects.*;import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.*;import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType.Category;import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;import cz.cuni.amis.utils.exception.*;import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result;import cz.cuni.amis.utils.SafeEquals;import cz.cuni.amis.pogamut.base.agent.*;import cz.cuni.amis.pogamut.multi.agent.*;import cz.cuni.amis.pogamut.multi.communication.worldview.property.*;import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.property.*;import cz.cuni.amis.utils.token.*;import cz.cuni.amis.utils.*;
5 // --- IMPORTS FROM /messages/settings/javasettings/javaimport END
6
7
8 // --- IMPORTS FROM extra/code/java/javapart/classcategory[@name='all'] BEGIN
9
10 // --- IMPORTS FROM extra/code/java/javapart/classcategory[@name='all'] END
11
12 // --- IMPORTS FROM extra/code/java/javapart/classcategory[@name=base]+classtype[@name=message] BEGIN
13
14 // --- IMPORTS FROM extra/code/java/javapart/classcategory[@name=base]+classtype[@name=message] END
15
16 /**
17 *
18 Implementation of the GameBots2004 message NAV contains also its Local/Shared/Static subpart class definitions..
19
20 *
21 * <p></p><p></p>
22 * Complete message documentation:
23 *
24 Synchronous message - however only NavPoints marking item pickup locations are exported synchronously. Other NavPoints are not exported synchronously at all, even if the bot can actually see them (but note that ALL NavPoints are exported in the handshake between bot and the server). Exporting NavPoints synchronously took a lot of UT server resources with limited information gain (in Pogamut there is now available visibility matrix holding static information which points can be seen from other points). NavPoint carries information about UT navigation point - location, paths and some additional information are stored there (if it is an ambush point, or sniper point, etc.).
25
26 */
27 public class NavPointMessage
28 extends
29 NavPoint
30 implements IWorldObjectUpdatedEvent, ICompositeWorldObjectUpdatedEvent
31
32 {
33
34
35
36 /**
37 * Parameter-less contructor for the message.
38 */
39 public NavPointMessage()
40 {
41 }
42
43
44
45
46 /**
47 * Creates new instance of the message NavPoint.
48 *
49 Synchronous message - however only NavPoints marking item pickup locations are exported synchronously. Other NavPoints are not exported synchronously at all, even if the bot can actually see them (but note that ALL NavPoints are exported in the handshake between bot and the server). Exporting NavPoints synchronously took a lot of UT server resources with limited information gain (in Pogamut there is now available visibility matrix holding static information which points can be seen from other points). NavPoint carries information about UT navigation point - location, paths and some additional information are stored there (if it is an ambush point, or sniper point, etc.).
50
51 * Corresponding GameBots message
52 *
53 * is
54 * NAV.
55 *
56 *
57 *
58 * @param Id
59 A unique Id of this navigation point assigned by the game.
60
61 *
62 *
63 *
64 * @param Location Location of navigation point.
65 *
66 *
67 *
68 * @param Velocity
69 Velocity of the navigation point (if the navigation point is
70 currently moving). Not sent at the moment.
71
72 *
73 *
74 *
75 * @param Visible
76 If the point is in the field of view of the bot.
77
78 *
79 *
80 *
81 * @param Item
82 Unique Id of the respawned item (the item respawns at this
83 point). Not sent if point is not an inventory spot. Sent only in HandShake.
84
85 *
86 *
87 *
88 * @param ItemClass
89 Class of the item (e.g. xWeapons.FlakCannonPickup). Not sent if point is not an inventory spot. Sent only in HandShake.
90
91 *
92 *
93 *
94 * @param ItemSpawned
95 True if the item is spawned at the point. Not sent if point is not an inventory spot.
96
97 *
98 *
99 *
100 * @param DoorOpened
101 True if this NavPoint is a Door and door is opened. Not sent if point is not a door.
102
103 *
104 *
105 *
106 * @param Mover
107 If this NavPoint is marking some mover, the mover id will be here. Not sent if point is not a Door, a LiftCenter or a LiftExit. Sent only in HandShake.
108
109 *
110 *
111 *
112 * @param LiftOffset
113 Starting vector between MyLift location and LiftCenter location. Not sent if point is not a LiftCenter. Sent only in HandShake.
114
115 *
116 *
117 *
118 * @param LiftJumpExit
119 Boolean. If we can/should exit the lift by a jump when near the destination place. Not sent if point is not a LiftExit. Sent only in HandShake.
120
121 *
122 *
123 *
124 * @param NoDoubleJump
125 Boolean. If we should or not use double jump when exiting lift with a jump. Not sent if point is not a LiftExit. Sent only in HandShake.
126
127 *
128 *
129 *
130 * @param InvSpot
131 If this is an inventory spot (item is respawned at this point).
132
133 *
134 *
135 *
136 * @param PlayerStart
137 If this is a player start (players and/or bots are respawned at this point).
138
139 *
140 *
141 *
142 * @param TeamNumber
143 Will be sent if this is a player start. In Team games (team deathmatch, capture the flag, domination) holds information about which team respawns at this player start spot. In non-team games will return 0!
144
145 *
146 *
147 *
148 * @param DomPoint If this point marks a DominationPoint (for BotDoubleDomination game).
149 *
150 *
151 *
152 * @param DomPointController Exported if this NavPoint is a DominationPoint (for BotDoubleDomination game) - which team controls this point.
153 *
154 *
155 *
156 * @param Door
157 If this point marks a door mover.
158
159 *
160 *
161 *
162 * @param LiftCenter
163 If this point marks a lift center (used to mark center of a lift mover, note that this point will be always moved with the lift).
164
165 *
166 *
167 *
168 * @param LiftExit
169 If this point marks a lift exit (used to mark exit point of a lift mover).
170
171 *
172 *
173 *
174 * @param AIMarker
175 If this point is an AI marker - marks an interesting spot in the environment. May be ambush point or sniping spot, etc.
176
177 *
178 *
179 *
180 * @param JumpSpot
181 If this point marks a jump spot (a special device that causes the bot to jump high or far).
182
183 *
184 *
185 *
186 * @param JumpPad
187 If this point marks a jump pad (a special device that causes the bot to jump high or far).
188
189 *
190 *
191 *
192 * @param JumpDest
193 If this point marks a jump destination - some place that can be reached by some special jump.
194
195 *
196 *
197 *
198 * @param Teleporter
199 If this point marks a teleport.
200
201 *
202 *
203 *
204 * @param Rotation
205 If the type is AIMarker. The rotation the bot should be
206 facing, when doing the action specified by AIMarker. Sent only in HandShake.
207
208 *
209 *
210 *
211 * @param RoamingSpot
212 Some ambush point, where is good chance to intercept
213 approaching opponents. Sent only in HandShake.
214
215 *
216 *
217 *
218 * @param SnipingSpot Point good for sniping. Sent only in HandShake.
219 *
220 *
221 *
222 * @param ItemInstance If item should be present at this navpoint it's instance will be here.
223 *
224 *
225 *
226 * @param OutgoingEdges Maps edge-LEADING_TO-navpoint-UnrealId to neighbour link, those are outgoing edges (those edges that originates in this navpoint going to another one, those you may usually travel).
227 *
228 *
229 *
230 * @param IncomingEdges Maps edge-ORIGINATES_FROM-navpoint-UnrealId to neighbour link, those are incoming edges (those edges that originates in different navpoint and ends here, do not use this to ask whether you can get to navpoint of specific unreal id, use OutgoingEdges instead).
231 *
232 *
233 *
234 * @param PreferedWeapon
235 Class of the weapon that should be prefered when using this
236 point for AIMarker specified action. Sent only in HandShake.
237
238 *
239 *
240 */
241 public NavPointMessage(
242 UnrealId Id, Location Location, Velocity Velocity, boolean Visible, UnrealId Item, ItemType ItemClass, boolean ItemSpawned, boolean DoorOpened, UnrealId Mover, Vector3d LiftOffset, boolean LiftJumpExit, boolean NoDoubleJump, boolean InvSpot, boolean PlayerStart, int TeamNumber, boolean DomPoint, int DomPointController, boolean Door, boolean LiftCenter, boolean LiftExit, boolean AIMarker, boolean JumpSpot, boolean JumpPad, boolean JumpDest, boolean Teleporter, Rotation Rotation, boolean RoamingSpot, boolean SnipingSpot, Item ItemInstance, Map<UnrealId, NavPointNeighbourLink> OutgoingEdges, Map<UnrealId, NavPointNeighbourLink> IncomingEdges, String PreferedWeapon
243 ) {
244
245 this.Id = Id;
246
247 this.Location = Location;
248
249 this.Velocity = Velocity;
250
251 this.Visible = Visible;
252
253 this.Item = Item;
254
255 this.ItemClass = ItemClass;
256
257 this.ItemSpawned = ItemSpawned;
258
259 this.DoorOpened = DoorOpened;
260
261 this.Mover = Mover;
262
263 this.LiftOffset = LiftOffset;
264
265 this.LiftJumpExit = LiftJumpExit;
266
267 this.NoDoubleJump = NoDoubleJump;
268
269 this.InvSpot = InvSpot;
270
271 this.PlayerStart = PlayerStart;
272
273 this.TeamNumber = TeamNumber;
274
275 this.DomPoint = DomPoint;
276
277 this.DomPointController = DomPointController;
278
279 this.Door = Door;
280
281 this.LiftCenter = LiftCenter;
282
283 this.LiftExit = LiftExit;
284
285 this.AIMarker = AIMarker;
286
287 this.JumpSpot = JumpSpot;
288
289 this.JumpPad = JumpPad;
290
291 this.JumpDest = JumpDest;
292
293 this.Teleporter = Teleporter;
294
295 this.Rotation = Rotation;
296
297 this.RoamingSpot = RoamingSpot;
298
299 this.SnipingSpot = SnipingSpot;
300
301 this.ItemInstance = ItemInstance;
302
303 this.OutgoingEdges = OutgoingEdges;
304
305 this.IncomingEdges = IncomingEdges;
306
307 this.PreferedWeapon = PreferedWeapon;
308
309 }
310
311 /**
312 * Cloning constructor from the full message.
313 *
314 * @param original
315 */
316 public NavPointMessage(NavPointMessage original) {
317
318 this.Id = original.getId()
319 ;
320
321 this.Location = original.getLocation()
322 ;
323
324 this.Velocity = original.getVelocity()
325 ;
326
327 this.Visible = original.isVisible()
328 ;
329
330 this.Item = original.getItem()
331 ;
332
333 this.ItemClass = original.getItemClass()
334 ;
335
336 this.ItemSpawned = original.isItemSpawned()
337 ;
338
339 this.DoorOpened = original.isDoorOpened()
340 ;
341
342 this.Mover = original.getMover()
343 ;
344
345 this.LiftOffset = original.getLiftOffset()
346 ;
347
348 this.LiftJumpExit = original.isLiftJumpExit()
349 ;
350
351 this.NoDoubleJump = original.isNoDoubleJump()
352 ;
353
354 this.InvSpot = original.isInvSpot()
355 ;
356
357 this.PlayerStart = original.isPlayerStart()
358 ;
359
360 this.TeamNumber = original.getTeamNumber()
361 ;
362
363 this.DomPoint = original.isDomPoint()
364 ;
365
366 this.DomPointController = original.getDomPointController()
367 ;
368
369 this.Door = original.isDoor()
370 ;
371
372 this.LiftCenter = original.isLiftCenter()
373 ;
374
375 this.LiftExit = original.isLiftExit()
376 ;
377
378 this.AIMarker = original.isAIMarker()
379 ;
380
381 this.JumpSpot = original.isJumpSpot()
382 ;
383
384 this.JumpPad = original.isJumpPad()
385 ;
386
387 this.JumpDest = original.isJumpDest()
388 ;
389
390 this.Teleporter = original.isTeleporter()
391 ;
392
393 this.Rotation = original.getRotation()
394 ;
395
396 this.RoamingSpot = original.isRoamingSpot()
397 ;
398
399 this.SnipingSpot = original.isSnipingSpot()
400 ;
401
402 this.ItemInstance = original.getItemInstance()
403 ;
404
405 this.OutgoingEdges = original.getOutgoingEdges()
406 ;
407
408 this.IncomingEdges = original.getIncomingEdges()
409 ;
410
411 this.PreferedWeapon = original.getPreferedWeapon()
412 ;
413
414 this.TeamId = original.getTeamId();
415
416 this.SimTime = original.getSimTime();
417 }
418
419
420 protected ITeamId TeamId;
421
422 /**
423 * Used by Yylex to slip corretn TeamId.
424 */
425 protected void setTeamId(ITeamId TeamId) {
426 this.TeamId = TeamId;
427 }
428
429 public ITeamId getTeamId() {
430 return TeamId;
431 }
432
433
434
435
436 /**
437 *
438 A unique Id of this navigation point assigned by the game.
439
440 */
441 protected
442 UnrealId Id =
443 null;
444
445
446 /**
447 * Whether property 'Id' was received from GB2004.
448 */
449 protected boolean Id_Set = false;
450
451 @Override
452
453 /**
454 *
455 A unique Id of this navigation point assigned by the game.
456
457 */
458 public UnrealId getId()
459 {
460 return Id;
461 }
462
463
464 /**
465 * Location of navigation point.
466 */
467 protected
468 Location Location =
469 null;
470
471
472 /**
473 * Whether property 'Location' was received from GB2004.
474 */
475 protected boolean Location_Set = false;
476
477 @Override
478
479 /**
480 * Location of navigation point.
481 */
482 public Location getLocation()
483 {
484 return Location;
485 }
486
487
488 /**
489 *
490 Velocity of the navigation point (if the navigation point is
491 currently moving). Not sent at the moment.
492
493 */
494 protected
495 Velocity Velocity =
496 null;
497
498
499 /**
500 * Whether property 'Velocity' was received from GB2004.
501 */
502 protected boolean Velocity_Set = false;
503
504 @Override
505
506 /**
507 *
508 Velocity of the navigation point (if the navigation point is
509 currently moving). Not sent at the moment.
510
511 */
512 public Velocity getVelocity()
513 {
514 return Velocity;
515 }
516
517
518 /**
519 *
520 If the point is in the field of view of the bot.
521
522 */
523 protected
524 boolean Visible =
525 false;
526
527
528 /**
529 * Whether property 'Visible' was received from GB2004.
530 */
531 protected boolean Visible_Set = false;
532
533 @Override
534
535 /**
536 *
537 If the point is in the field of view of the bot.
538
539 */
540 public boolean isVisible()
541 {
542 return Visible;
543 }
544
545
546 /**
547 *
548 Unique Id of the respawned item (the item respawns at this
549 point). Not sent if point is not an inventory spot. Sent only in HandShake.
550
551 */
552 protected
553 UnrealId Item =
554 null;
555
556
557 /**
558 * Whether property 'Item' was received from GB2004.
559 */
560 protected boolean Item_Set = false;
561
562 @Override
563
564 /**
565 *
566 Unique Id of the respawned item (the item respawns at this
567 point). Not sent if point is not an inventory spot. Sent only in HandShake.
568
569 */
570 public UnrealId getItem()
571 {
572 return Item;
573 }
574
575
576 /**
577 *
578 Class of the item (e.g. xWeapons.FlakCannonPickup). Not sent if point is not an inventory spot. Sent only in HandShake.
579
580 */
581 protected
582 ItemType ItemClass =
583 null;
584
585
586 /**
587 * Whether property 'ItemClass' was received from GB2004.
588 */
589 protected boolean ItemClass_Set = false;
590
591 @Override
592
593 /**
594 *
595 Class of the item (e.g. xWeapons.FlakCannonPickup). Not sent if point is not an inventory spot. Sent only in HandShake.
596
597 */
598 public ItemType getItemClass()
599 {
600 return ItemClass;
601 }
602
603
604 /**
605 *
606 True if the item is spawned at the point. Not sent if point is not an inventory spot.
607
608 */
609 protected
610 boolean ItemSpawned =
611 false;
612
613
614 /**
615 * Whether property 'ItemSpawned' was received from GB2004.
616 */
617 protected boolean ItemSpawned_Set = false;
618
619 @Override
620
621 /**
622 *
623 True if the item is spawned at the point. Not sent if point is not an inventory spot.
624
625 */
626 public boolean isItemSpawned()
627 {
628 return ItemSpawned;
629 }
630
631
632 /**
633 *
634 True if this NavPoint is a Door and door is opened. Not sent if point is not a door.
635
636 */
637 protected
638 boolean DoorOpened =
639 false;
640
641
642 /**
643 * Whether property 'DoorOpened' was received from GB2004.
644 */
645 protected boolean DoorOpened_Set = false;
646
647 @Override
648
649 /**
650 *
651 True if this NavPoint is a Door and door is opened. Not sent if point is not a door.
652
653 */
654 public boolean isDoorOpened()
655 {
656 return DoorOpened;
657 }
658
659
660 /**
661 *
662 If this NavPoint is marking some mover, the mover id will be here. Not sent if point is not a Door, a LiftCenter or a LiftExit. Sent only in HandShake.
663
664 */
665 protected
666 UnrealId Mover =
667 null;
668
669
670 /**
671 * Whether property 'Mover' was received from GB2004.
672 */
673 protected boolean Mover_Set = false;
674
675 @Override
676
677 /**
678 *
679 If this NavPoint is marking some mover, the mover id will be here. Not sent if point is not a Door, a LiftCenter or a LiftExit. Sent only in HandShake.
680
681 */
682 public UnrealId getMover()
683 {
684 return Mover;
685 }
686
687
688 /**
689 *
690 Starting vector between MyLift location and LiftCenter location. Not sent if point is not a LiftCenter. Sent only in HandShake.
691
692 */
693 protected
694 Vector3d LiftOffset =
695 null;
696
697
698 /**
699 * Whether property 'LiftOffset' was received from GB2004.
700 */
701 protected boolean LiftOffset_Set = false;
702
703 @Override
704
705 /**
706 *
707 Starting vector between MyLift location and LiftCenter location. Not sent if point is not a LiftCenter. Sent only in HandShake.
708
709 */
710 public Vector3d getLiftOffset()
711 {
712 return LiftOffset;
713 }
714
715
716 /**
717 *
718 Boolean. If we can/should exit the lift by a jump when near the destination place. Not sent if point is not a LiftExit. Sent only in HandShake.
719
720 */
721 protected
722 boolean LiftJumpExit =
723 false;
724
725
726 /**
727 * Whether property 'LiftJumpExit' was received from GB2004.
728 */
729 protected boolean LiftJumpExit_Set = false;
730
731 @Override
732
733 /**
734 *
735 Boolean. If we can/should exit the lift by a jump when near the destination place. Not sent if point is not a LiftExit. Sent only in HandShake.
736
737 */
738 public boolean isLiftJumpExit()
739 {
740 return LiftJumpExit;
741 }
742
743
744 /**
745 *
746 Boolean. If we should or not use double jump when exiting lift with a jump. Not sent if point is not a LiftExit. Sent only in HandShake.
747
748 */
749 protected
750 boolean NoDoubleJump =
751 false;
752
753
754 /**
755 * Whether property 'NoDoubleJump' was received from GB2004.
756 */
757 protected boolean NoDoubleJump_Set = false;
758
759 @Override
760
761 /**
762 *
763 Boolean. If we should or not use double jump when exiting lift with a jump. Not sent if point is not a LiftExit. Sent only in HandShake.
764
765 */
766 public boolean isNoDoubleJump()
767 {
768 return NoDoubleJump;
769 }
770
771
772 /**
773 *
774 If this is an inventory spot (item is respawned at this point).
775
776 */
777 protected
778 boolean InvSpot =
779 false;
780
781
782 /**
783 * Whether property 'InvSpot' was received from GB2004.
784 */
785 protected boolean InvSpot_Set = false;
786
787 @Override
788
789 /**
790 *
791 If this is an inventory spot (item is respawned at this point).
792
793 */
794 public boolean isInvSpot()
795 {
796 return InvSpot;
797 }
798
799
800 /**
801 *
802 If this is a player start (players and/or bots are respawned at this point).
803
804 */
805 protected
806 boolean PlayerStart =
807 false;
808
809
810 /**
811 * Whether property 'PlayerStart' was received from GB2004.
812 */
813 protected boolean PlayerStart_Set = false;
814
815 @Override
816
817 /**
818 *
819 If this is a player start (players and/or bots are respawned at this point).
820
821 */
822 public boolean isPlayerStart()
823 {
824 return PlayerStart;
825 }
826
827
828 /**
829 *
830 Will be sent if this is a player start. In Team games (team deathmatch, capture the flag, domination) holds information about which team respawns at this player start spot. In non-team games will return 0!
831
832 */
833 protected
834 int TeamNumber =
835 0;
836
837
838 /**
839 * Whether property 'TeamNumber' was received from GB2004.
840 */
841 protected boolean TeamNumber_Set = false;
842
843 @Override
844
845 /**
846 *
847 Will be sent if this is a player start. In Team games (team deathmatch, capture the flag, domination) holds information about which team respawns at this player start spot. In non-team games will return 0!
848
849 */
850 public int getTeamNumber()
851 {
852 return TeamNumber;
853 }
854
855
856 /**
857 * If this point marks a DominationPoint (for BotDoubleDomination game).
858 */
859 protected
860 boolean DomPoint =
861 false;
862
863
864 /**
865 * Whether property 'DomPoint' was received from GB2004.
866 */
867 protected boolean DomPoint_Set = false;
868
869 @Override
870
871 /**
872 * If this point marks a DominationPoint (for BotDoubleDomination game).
873 */
874 public boolean isDomPoint()
875 {
876 return DomPoint;
877 }
878
879
880 /**
881 * Exported if this NavPoint is a DominationPoint (for BotDoubleDomination game) - which team controls this point.
882 */
883 protected
884 int DomPointController =
885 0;
886
887
888 /**
889 * Whether property 'DomPointController' was received from GB2004.
890 */
891 protected boolean DomPointController_Set = false;
892
893 @Override
894
895 /**
896 * Exported if this NavPoint is a DominationPoint (for BotDoubleDomination game) - which team controls this point.
897 */
898 public int getDomPointController()
899 {
900 return DomPointController;
901 }
902
903
904 /**
905 *
906 If this point marks a door mover.
907
908 */
909 protected
910 boolean Door =
911 false;
912
913
914 /**
915 * Whether property 'Door' was received from GB2004.
916 */
917 protected boolean Door_Set = false;
918
919 @Override
920
921 /**
922 *
923 If this point marks a door mover.
924
925 */
926 public boolean isDoor()
927 {
928 return Door;
929 }
930
931
932 /**
933 *
934 If this point marks a lift center (used to mark center of a lift mover, note that this point will be always moved with the lift).
935
936 */
937 protected
938 boolean LiftCenter =
939 false;
940
941
942 /**
943 * Whether property 'LiftCenter' was received from GB2004.
944 */
945 protected boolean LiftCenter_Set = false;
946
947 @Override
948
949 /**
950 *
951 If this point marks a lift center (used to mark center of a lift mover, note that this point will be always moved with the lift).
952
953 */
954 public boolean isLiftCenter()
955 {
956 return LiftCenter;
957 }
958
959
960 /**
961 *
962 If this point marks a lift exit (used to mark exit point of a lift mover).
963
964 */
965 protected
966 boolean LiftExit =
967 false;
968
969
970 /**
971 * Whether property 'LiftExit' was received from GB2004.
972 */
973 protected boolean LiftExit_Set = false;
974
975 @Override
976
977 /**
978 *
979 If this point marks a lift exit (used to mark exit point of a lift mover).
980
981 */
982 public boolean isLiftExit()
983 {
984 return LiftExit;
985 }
986
987
988 /**
989 *
990 If this point is an AI marker - marks an interesting spot in the environment. May be ambush point or sniping spot, etc.
991
992 */
993 protected
994 boolean AIMarker =
995 false;
996
997
998 /**
999 * Whether property 'AIMarker' was received from GB2004.
1000 */
1001 protected boolean AIMarker_Set = false;
1002
1003 @Override
1004
1005 /**
1006 *
1007 If this point is an AI marker - marks an interesting spot in the environment. May be ambush point or sniping spot, etc.
1008
1009 */
1010 public boolean isAIMarker()
1011 {
1012 return AIMarker;
1013 }
1014
1015
1016 /**
1017 *
1018 If this point marks a jump spot (a special device that causes the bot to jump high or far).
1019
1020 */
1021 protected
1022 boolean JumpSpot =
1023 false;
1024
1025
1026 /**
1027 * Whether property 'JumpSpot' was received from GB2004.
1028 */
1029 protected boolean JumpSpot_Set = false;
1030
1031 @Override
1032
1033 /**
1034 *
1035 If this point marks a jump spot (a special device that causes the bot to jump high or far).
1036
1037 */
1038 public boolean isJumpSpot()
1039 {
1040 return JumpSpot;
1041 }
1042
1043
1044 /**
1045 *
1046 If this point marks a jump pad (a special device that causes the bot to jump high or far).
1047
1048 */
1049 protected
1050 boolean JumpPad =
1051 false;
1052
1053
1054 /**
1055 * Whether property 'JumpPad' was received from GB2004.
1056 */
1057 protected boolean JumpPad_Set = false;
1058
1059 @Override
1060
1061 /**
1062 *
1063 If this point marks a jump pad (a special device that causes the bot to jump high or far).
1064
1065 */
1066 public boolean isJumpPad()
1067 {
1068 return JumpPad;
1069 }
1070
1071
1072 /**
1073 *
1074 If this point marks a jump destination - some place that can be reached by some special jump.
1075
1076 */
1077 protected
1078 boolean JumpDest =
1079 false;
1080
1081
1082 /**
1083 * Whether property 'JumpDest' was received from GB2004.
1084 */
1085 protected boolean JumpDest_Set = false;
1086
1087 @Override
1088
1089 /**
1090 *
1091 If this point marks a jump destination - some place that can be reached by some special jump.
1092
1093 */
1094 public boolean isJumpDest()
1095 {
1096 return JumpDest;
1097 }
1098
1099
1100 /**
1101 *
1102 If this point marks a teleport.
1103
1104 */
1105 protected
1106 boolean Teleporter =
1107 false;
1108
1109
1110 /**
1111 * Whether property 'Teleporter' was received from GB2004.
1112 */
1113 protected boolean Teleporter_Set = false;
1114
1115 @Override
1116
1117 /**
1118 *
1119 If this point marks a teleport.
1120
1121 */
1122 public boolean isTeleporter()
1123 {
1124 return Teleporter;
1125 }
1126
1127
1128 /**
1129 *
1130 If the type is AIMarker. The rotation the bot should be
1131 facing, when doing the action specified by AIMarker. Sent only in HandShake.
1132
1133 */
1134 protected
1135 Rotation Rotation =
1136 null;
1137
1138
1139 /**
1140 * Whether property 'Rotation' was received from GB2004.
1141 */
1142 protected boolean Rotation_Set = false;
1143
1144 @Override
1145
1146 /**
1147 *
1148 If the type is AIMarker. The rotation the bot should be
1149 facing, when doing the action specified by AIMarker. Sent only in HandShake.
1150
1151 */
1152 public Rotation getRotation()
1153 {
1154 return Rotation;
1155 }
1156
1157
1158 /**
1159 *
1160 Some ambush point, where is good chance to intercept
1161 approaching opponents. Sent only in HandShake.
1162
1163 */
1164 protected
1165 boolean RoamingSpot =
1166 false;
1167
1168
1169 /**
1170 * Whether property 'RoamingSpot' was received from GB2004.
1171 */
1172 protected boolean RoamingSpot_Set = false;
1173
1174 @Override
1175
1176 /**
1177 *
1178 Some ambush point, where is good chance to intercept
1179 approaching opponents. Sent only in HandShake.
1180
1181 */
1182 public boolean isRoamingSpot()
1183 {
1184 return RoamingSpot;
1185 }
1186
1187
1188 /**
1189 * Point good for sniping. Sent only in HandShake.
1190 */
1191 protected
1192 boolean SnipingSpot =
1193 false;
1194
1195
1196 /**
1197 * Whether property 'SnipingSpot' was received from GB2004.
1198 */
1199 protected boolean SnipingSpot_Set = false;
1200
1201 @Override
1202
1203 /**
1204 * Point good for sniping. Sent only in HandShake.
1205 */
1206 public boolean isSnipingSpot()
1207 {
1208 return SnipingSpot;
1209 }
1210
1211
1212 /**
1213 * If item should be present at this navpoint it's instance will be here.
1214 */
1215 protected
1216 Item ItemInstance =
1217 null;
1218
1219
1220 /**
1221 * Whether property 'ItemInstance' was received from GB2004.
1222 */
1223 protected boolean ItemInstance_Set = false;
1224
1225 @Override
1226
1227 /**
1228 * If item should be present at this navpoint it's instance will be here.
1229 */
1230 public Item getItemInstance()
1231 {
1232 return ItemInstance;
1233 }
1234
1235
1236 /**
1237 * Maps edge-LEADING_TO-navpoint-UnrealId to neighbour link, those are outgoing edges (those edges that originates in this navpoint going to another one, those you may usually travel).
1238 */
1239 protected
1240 Map<UnrealId, NavPointNeighbourLink> OutgoingEdges =
1241 new HashMap<UnrealId, NavPointNeighbourLink>();
1242
1243
1244 /**
1245 * Whether property 'OutgoingEdges' was received from GB2004.
1246 */
1247 protected boolean OutgoingEdges_Set = false;
1248
1249 @Override
1250
1251 /**
1252 * Maps edge-LEADING_TO-navpoint-UnrealId to neighbour link, those are outgoing edges (those edges that originates in this navpoint going to another one, those you may usually travel).
1253 */
1254 public Map<UnrealId, NavPointNeighbourLink> getOutgoingEdges()
1255 {
1256 return OutgoingEdges;
1257 }
1258
1259
1260 /**
1261 * Maps edge-ORIGINATES_FROM-navpoint-UnrealId to neighbour link, those are incoming edges (those edges that originates in different navpoint and ends here, do not use this to ask whether you can get to navpoint of specific unreal id, use OutgoingEdges instead).
1262 */
1263 protected
1264 Map<UnrealId, NavPointNeighbourLink> IncomingEdges =
1265 new HashMap<UnrealId, NavPointNeighbourLink>();
1266
1267
1268 /**
1269 * Whether property 'IncomingEdges' was received from GB2004.
1270 */
1271 protected boolean IncomingEdges_Set = false;
1272
1273 @Override
1274
1275 /**
1276 * Maps edge-ORIGINATES_FROM-navpoint-UnrealId to neighbour link, those are incoming edges (those edges that originates in different navpoint and ends here, do not use this to ask whether you can get to navpoint of specific unreal id, use OutgoingEdges instead).
1277 */
1278 public Map<UnrealId, NavPointNeighbourLink> getIncomingEdges()
1279 {
1280 return IncomingEdges;
1281 }
1282
1283
1284 /**
1285 *
1286 Class of the weapon that should be prefered when using this
1287 point for AIMarker specified action. Sent only in HandShake.
1288
1289 */
1290 protected
1291 String PreferedWeapon =
1292 null;
1293
1294
1295 /**
1296 * Whether property 'PreferedWeapon' was received from GB2004.
1297 */
1298 protected boolean PreferedWeapon_Set = false;
1299
1300 @Override
1301
1302 /**
1303 *
1304 Class of the weapon that should be prefered when using this
1305 point for AIMarker specified action. Sent only in HandShake.
1306
1307 */
1308 public String getPreferedWeapon()
1309 {
1310 return PreferedWeapon;
1311 }
1312
1313
1314 private NavPointLocal localPart = null;
1315
1316 @Override
1317 public NavPointLocal
1318 getLocal() {
1319 if (localPart != null) return localPart;
1320 return localPart = new
1321 NavPointLocalMessage();
1322 }
1323
1324 private NavPointShared sharedPart = null;
1325
1326 @Override
1327 public NavPointShared
1328 getShared() {
1329 if (sharedPart != null) return sharedPart;
1330 return sharedPart = new
1331 NavPointSharedMessage();
1332 }
1333
1334 private NavPointStatic staticPart = null;
1335
1336 @Override
1337 public NavPointStatic
1338 getStatic() {
1339 if (staticPart != null) return staticPart;
1340 return staticPart = new
1341 NavPointStaticMessage();
1342 }
1343
1344 /**
1345 *
1346 Implementation of the local part of the GameBots2004 message NAV, used
1347 to facade NAVMessage.
1348
1349 *
1350 * <p></p><p></p>
1351 * Complete message documentation:
1352 *
1353 Synchronous message - however only NavPoints marking item pickup locations are exported synchronously. Other NavPoints are not exported synchronously at all, even if the bot can actually see them (but note that ALL NavPoints are exported in the handshake between bot and the server). Exporting NavPoints synchronously took a lot of UT server resources with limited information gain (in Pogamut there is now available visibility matrix holding static information which points can be seen from other points). NavPoint carries information about UT navigation point - location, paths and some additional information are stored there (if it is an ambush point, or sniper point, etc.).
1354
1355 */
1356 public class NavPointLocalMessage
1357 extends
1358 NavPointLocal
1359 {
1360
1361 @Override
1362 public
1363 NavPointLocalMessage clone() {
1364 return this;
1365 }
1366
1367 public NavPointLocalMessage getLocal() {
1368 return this;
1369 }
1370 public ISharedWorldObject getShared() {
1371 throw new UnsupportedOperationException("Could not return LOCAL as SHARED");
1372 }
1373 public IStaticWorldObject getStatic() {
1374 throw new UnsupportedOperationException("Could not return LOCAL as STATIC");
1375 }
1376
1377 /**
1378 *
1379 A unique Id of this navigation point assigned by the game.
1380
1381 */
1382 public UnrealId getId()
1383 {
1384 return Id;
1385 }
1386
1387 /**
1388 *
1389 If the point is in the field of view of the bot.
1390
1391 */
1392 public boolean isVisible()
1393 {
1394 return Visible;
1395 }
1396
1397
1398 public String toString() {
1399 return
1400 super.toString() + "[" +
1401
1402 "Id = " + String.valueOf(getId()
1403 ) + " | " +
1404
1405 "Visible = " + String.valueOf(isVisible()
1406 ) + " | " +
1407
1408 "]";
1409 }
1410
1411
1412 public String toHtmlString() {
1413 return super.toString() + "[<br/>" +
1414
1415 "<b>Id</b> = " + String.valueOf(getId()
1416 ) + " <br/> " +
1417
1418 "<b>Visible</b> = " + String.valueOf(isVisible()
1419 ) + " <br/> " +
1420
1421 "<br/>]";
1422 }
1423
1424
1425 // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
1426
1427 // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
1428
1429 // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=local+classtype[@name=message]) ---
1430
1431 // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=local+classtype[@name=message]) ---
1432
1433 }
1434
1435 /**
1436 *
1437 Implementation of the static part of the GameBots2004 message NAV, used
1438 to facade NAVMessage.
1439
1440 *
1441 * <p></p><p></p>
1442 * Complete message documentation:
1443 *
1444 Synchronous message - however only NavPoints marking item pickup locations are exported synchronously. Other NavPoints are not exported synchronously at all, even if the bot can actually see them (but note that ALL NavPoints are exported in the handshake between bot and the server). Exporting NavPoints synchronously took a lot of UT server resources with limited information gain (in Pogamut there is now available visibility matrix holding static information which points can be seen from other points). NavPoint carries information about UT navigation point - location, paths and some additional information are stored there (if it is an ambush point, or sniper point, etc.).
1445
1446 */
1447 public class NavPointStaticMessage
1448 extends
1449 NavPointStatic
1450 {
1451
1452 @Override
1453 public
1454 NavPointStaticMessage clone() {
1455 return this;
1456 }
1457
1458 /**
1459 *
1460 A unique Id of this navigation point assigned by the game.
1461
1462 */
1463 public UnrealId getId()
1464 {
1465 return Id;
1466 }
1467
1468 /**
1469 *
1470 Unique Id of the respawned item (the item respawns at this
1471 point). Not sent if point is not an inventory spot. Sent only in HandShake.
1472
1473 */
1474 public UnrealId getItem()
1475 {
1476 return Item;
1477 }
1478
1479 /**
1480 *
1481 Class of the item (e.g. xWeapons.FlakCannonPickup). Not sent if point is not an inventory spot. Sent only in HandShake.
1482
1483 */
1484 public ItemType getItemClass()
1485 {
1486 return ItemClass;
1487 }
1488
1489 /**
1490 *
1491 If this NavPoint is marking some mover, the mover id will be here. Not sent if point is not a Door, a LiftCenter or a LiftExit. Sent only in HandShake.
1492
1493 */
1494 public UnrealId getMover()
1495 {
1496 return Mover;
1497 }
1498
1499 /**
1500 *
1501 Starting vector between MyLift location and LiftCenter location. Not sent if point is not a LiftCenter. Sent only in HandShake.
1502
1503 */
1504 public Vector3d getLiftOffset()
1505 {
1506 return LiftOffset;
1507 }
1508
1509 /**
1510 *
1511 Boolean. If we can/should exit the lift by a jump when near the destination place. Not sent if point is not a LiftExit. Sent only in HandShake.
1512
1513 */
1514 public boolean isLiftJumpExit()
1515 {
1516 return LiftJumpExit;
1517 }
1518
1519 /**
1520 *
1521 Boolean. If we should or not use double jump when exiting lift with a jump. Not sent if point is not a LiftExit. Sent only in HandShake.
1522
1523 */
1524 public boolean isNoDoubleJump()
1525 {
1526 return NoDoubleJump;
1527 }
1528
1529 /**
1530 *
1531 If this is an inventory spot (item is respawned at this point).
1532
1533 */
1534 public boolean isInvSpot()
1535 {
1536 return InvSpot;
1537 }
1538
1539 /**
1540 *
1541 If this is a player start (players and/or bots are respawned at this point).
1542
1543 */
1544 public boolean isPlayerStart()
1545 {
1546 return PlayerStart;
1547 }
1548
1549 /**
1550 *
1551 Will be sent if this is a player start. In Team games (team deathmatch, capture the flag, domination) holds information about which team respawns at this player start spot. In non-team games will return 0!
1552
1553 */
1554 public int getTeamNumber()
1555 {
1556 return TeamNumber;
1557 }
1558
1559 /**
1560 * If this point marks a DominationPoint (for BotDoubleDomination game).
1561 */
1562 public boolean isDomPoint()
1563 {
1564 return DomPoint;
1565 }
1566
1567 /**
1568 * Exported if this NavPoint is a DominationPoint (for BotDoubleDomination game) - which team controls this point.
1569 */
1570 public int getDomPointController()
1571 {
1572 return DomPointController;
1573 }
1574
1575 /**
1576 *
1577 If this point marks a door mover.
1578
1579 */
1580 public boolean isDoor()
1581 {
1582 return Door;
1583 }
1584
1585 /**
1586 *
1587 If this point marks a lift center (used to mark center of a lift mover, note that this point will be always moved with the lift).
1588
1589 */
1590 public boolean isLiftCenter()
1591 {
1592 return LiftCenter;
1593 }
1594
1595 /**
1596 *
1597 If this point marks a lift exit (used to mark exit point of a lift mover).
1598
1599 */
1600 public boolean isLiftExit()
1601 {
1602 return LiftExit;
1603 }
1604
1605 /**
1606 *
1607 If this point is an AI marker - marks an interesting spot in the environment. May be ambush point or sniping spot, etc.
1608
1609 */
1610 public boolean isAIMarker()
1611 {
1612 return AIMarker;
1613 }
1614
1615 /**
1616 *
1617 If this point marks a jump spot (a special device that causes the bot to jump high or far).
1618
1619 */
1620 public boolean isJumpSpot()
1621 {
1622 return JumpSpot;
1623 }
1624
1625 /**
1626 *
1627 If this point marks a jump pad (a special device that causes the bot to jump high or far).
1628
1629 */
1630 public boolean isJumpPad()
1631 {
1632 return JumpPad;
1633 }
1634
1635 /**
1636 *
1637 If this point marks a jump destination - some place that can be reached by some special jump.
1638
1639 */
1640 public boolean isJumpDest()
1641 {
1642 return JumpDest;
1643 }
1644
1645 /**
1646 *
1647 If this point marks a teleport.
1648
1649 */
1650 public boolean isTeleporter()
1651 {
1652 return Teleporter;
1653 }
1654
1655 /**
1656 *
1657 If the type is AIMarker. The rotation the bot should be
1658 facing, when doing the action specified by AIMarker. Sent only in HandShake.
1659
1660 */
1661 public Rotation getRotation()
1662 {
1663 return Rotation;
1664 }
1665
1666 /**
1667 *
1668 Some ambush point, where is good chance to intercept
1669 approaching opponents. Sent only in HandShake.
1670
1671 */
1672 public boolean isRoamingSpot()
1673 {
1674 return RoamingSpot;
1675 }
1676
1677 /**
1678 * Point good for sniping. Sent only in HandShake.
1679 */
1680 public boolean isSnipingSpot()
1681 {
1682 return SnipingSpot;
1683 }
1684
1685 /**
1686 * If item should be present at this navpoint it's instance will be here.
1687 */
1688 public Item getItemInstance()
1689 {
1690 return ItemInstance;
1691 }
1692
1693 /**
1694 * Maps edge-LEADING_TO-navpoint-UnrealId to neighbour link, those are outgoing edges (those edges that originates in this navpoint going to another one, those you may usually travel).
1695 */
1696 public Map<UnrealId, NavPointNeighbourLink> getOutgoingEdges()
1697 {
1698 return OutgoingEdges;
1699 }
1700
1701 /**
1702 * Maps edge-ORIGINATES_FROM-navpoint-UnrealId to neighbour link, those are incoming edges (those edges that originates in different navpoint and ends here, do not use this to ask whether you can get to navpoint of specific unreal id, use OutgoingEdges instead).
1703 */
1704 public Map<UnrealId, NavPointNeighbourLink> getIncomingEdges()
1705 {
1706 return IncomingEdges;
1707 }
1708
1709 /**
1710 *
1711 Class of the weapon that should be prefered when using this
1712 point for AIMarker specified action. Sent only in HandShake.
1713
1714 */
1715 public String getPreferedWeapon()
1716 {
1717 return PreferedWeapon;
1718 }
1719
1720
1721 @Override
1722 public boolean isDifferentFrom(IStaticWorldObject other)
1723 {
1724 if (other == null) //early fail
1725 {
1726 return true;
1727 }
1728 else if (other == this) //early out
1729 {
1730 return false;
1731 }
1732 else
1733 {
1734 NavPointStatic obj = (NavPointStatic) other;
1735
1736
1737 if ( !(
1738 AdvancedEquals.equalsOrNull(this.getId()
1739 , obj.getId()
1740 )
1741 ) )
1742 {
1743 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Id on object class NavPointStatic");
1744 return true;
1745 }
1746
1747 if ( !(
1748 AdvancedEquals.equalsOrNull(this.getItem()
1749 , obj.getItem()
1750 )
1751 ) )
1752 {
1753 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Item on object class NavPointStatic");
1754 return true;
1755 }
1756
1757 if ( !(
1758 AdvancedEquals.equalsOrNull(this.getItemClass()
1759 , obj.getItemClass()
1760 )
1761 ) )
1762 {
1763 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property ItemClass on object class NavPointStatic");
1764 return true;
1765 }
1766
1767 if ( !(
1768 AdvancedEquals.equalsOrNull(this.getMover()
1769 , obj.getMover()
1770 )
1771 ) )
1772 {
1773 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Mover on object class NavPointStatic");
1774 return true;
1775 }
1776
1777 if ( !(
1778 AdvancedEquals.equalsOrNull(this.getLiftOffset()
1779 , obj.getLiftOffset()
1780 )
1781 ) )
1782 {
1783 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftOffset on object class NavPointStatic");
1784 return true;
1785 }
1786
1787 if ( !(this.isLiftJumpExit()
1788
1789 == obj.isLiftJumpExit()
1790 ) )
1791 {
1792 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftJumpExit on object class NavPointStatic");
1793 return true;
1794 }
1795
1796 if ( !(this.isNoDoubleJump()
1797
1798 == obj.isNoDoubleJump()
1799 ) )
1800 {
1801 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property NoDoubleJump on object class NavPointStatic");
1802 return true;
1803 }
1804
1805 if ( !(this.isInvSpot()
1806
1807 == obj.isInvSpot()
1808 ) )
1809 {
1810 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property InvSpot on object class NavPointStatic");
1811 return true;
1812 }
1813
1814 if ( !(this.isPlayerStart()
1815
1816 == obj.isPlayerStart()
1817 ) )
1818 {
1819 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property PlayerStart on object class NavPointStatic");
1820 return true;
1821 }
1822
1823 if ( !(this.getTeamNumber()
1824
1825 == obj.getTeamNumber()
1826 ) )
1827 {
1828 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property TeamNumber on object class NavPointStatic");
1829 return true;
1830 }
1831
1832 if ( !(this.isDomPoint()
1833
1834 == obj.isDomPoint()
1835 ) )
1836 {
1837 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property DomPoint on object class NavPointStatic");
1838 return true;
1839 }
1840
1841 if ( !(this.getDomPointController()
1842
1843 == obj.getDomPointController()
1844 ) )
1845 {
1846 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property DomPointController on object class NavPointStatic");
1847 return true;
1848 }
1849
1850 if ( !(this.isDoor()
1851
1852 == obj.isDoor()
1853 ) )
1854 {
1855 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Door on object class NavPointStatic");
1856 return true;
1857 }
1858
1859 if ( !(this.isLiftCenter()
1860
1861 == obj.isLiftCenter()
1862 ) )
1863 {
1864 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftCenter on object class NavPointStatic");
1865 return true;
1866 }
1867
1868 if ( !(this.isLiftExit()
1869
1870 == obj.isLiftExit()
1871 ) )
1872 {
1873 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftExit on object class NavPointStatic");
1874 return true;
1875 }
1876
1877 if ( !(this.isAIMarker()
1878
1879 == obj.isAIMarker()
1880 ) )
1881 {
1882 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property AIMarker on object class NavPointStatic");
1883 return true;
1884 }
1885
1886 if ( !(this.isJumpSpot()
1887
1888 == obj.isJumpSpot()
1889 ) )
1890 {
1891 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpSpot on object class NavPointStatic");
1892 return true;
1893 }
1894
1895 if ( !(this.isJumpPad()
1896
1897 == obj.isJumpPad()
1898 ) )
1899 {
1900 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpPad on object class NavPointStatic");
1901 return true;
1902 }
1903
1904 if ( !(this.isJumpDest()
1905
1906 == obj.isJumpDest()
1907 ) )
1908 {
1909 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpDest on object class NavPointStatic");
1910 return true;
1911 }
1912
1913 if ( !(this.isTeleporter()
1914
1915 == obj.isTeleporter()
1916 ) )
1917 {
1918 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Teleporter on object class NavPointStatic");
1919 return true;
1920 }
1921
1922 if ( !(
1923 AdvancedEquals.equalsOrNull(this.getRotation()
1924 , obj.getRotation()
1925 )
1926 ) )
1927 {
1928 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Rotation on object class NavPointStatic");
1929 return true;
1930 }
1931
1932 if ( !(this.isRoamingSpot()
1933
1934 == obj.isRoamingSpot()
1935 ) )
1936 {
1937 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property RoamingSpot on object class NavPointStatic");
1938 return true;
1939 }
1940
1941 if ( !(this.isSnipingSpot()
1942
1943 == obj.isSnipingSpot()
1944 ) )
1945 {
1946 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property SnipingSpot on object class NavPointStatic");
1947 return true;
1948 }
1949
1950 if ( !(
1951 AdvancedEquals.equalsOrNull(this.getItemInstance()
1952 , obj.getItemInstance()
1953 )
1954 ) )
1955 {
1956 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property ItemInstance on object class NavPointStatic");
1957 return true;
1958 }
1959
1960 //Skipping outgoing and incoming edges tests because the navGraph is sent only once
1961
1962 //Skipping outgoing and incoming edges tests because the navGraph is sent only once
1963
1964 if ( !(
1965 AdvancedEquals.equalsOrNull(this.getPreferedWeapon()
1966 , obj.getPreferedWeapon()
1967 )
1968 ) )
1969 {
1970 System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property PreferedWeapon on object class NavPointStatic");
1971 return true;
1972 }
1973
1974 }
1975 return false;
1976 }
1977
1978
1979 public String toString() {
1980 return
1981 super.toString() + "[" +
1982
1983 "Id = " + String.valueOf(getId()
1984 ) + " | " +
1985
1986 "Item = " + String.valueOf(getItem()
1987 ) + " | " +
1988
1989 "ItemClass = " + String.valueOf(getItemClass()
1990 ) + " | " +
1991
1992 "Mover = " + String.valueOf(getMover()
1993 ) + " | " +
1994
1995 "LiftOffset = " + String.valueOf(getLiftOffset()
1996 ) + " | " +
1997
1998 "LiftJumpExit = " + String.valueOf(isLiftJumpExit()
1999 ) + " | " +
2000
2001 "NoDoubleJump = " + String.valueOf(isNoDoubleJump()
2002 ) + " | " +
2003
2004 "InvSpot = " + String.valueOf(isInvSpot()
2005 ) + " | " +
2006
2007 "PlayerStart = " + String.valueOf(isPlayerStart()
2008 ) + " | " +
2009
2010 "TeamNumber = " + String.valueOf(getTeamNumber()
2011 ) + " | " +
2012
2013 "DomPoint = " + String.valueOf(isDomPoint()
2014 ) + " | " +
2015
2016 "DomPointController = " + String.valueOf(getDomPointController()
2017 ) + " | " +
2018
2019 "Door = " + String.valueOf(isDoor()
2020 ) + " | " +
2021
2022 "LiftCenter = " + String.valueOf(isLiftCenter()
2023 ) + " | " +
2024
2025 "LiftExit = " + String.valueOf(isLiftExit()
2026 ) + " | " +
2027
2028 "AIMarker = " + String.valueOf(isAIMarker()
2029 ) + " | " +
2030
2031 "JumpSpot = " + String.valueOf(isJumpSpot()
2032 ) + " | " +
2033
2034 "JumpPad = " + String.valueOf(isJumpPad()
2035 ) + " | " +
2036
2037 "JumpDest = " + String.valueOf(isJumpDest()
2038 ) + " | " +
2039
2040 "Teleporter = " + String.valueOf(isTeleporter()
2041 ) + " | " +
2042
2043 "Rotation = " + String.valueOf(getRotation()
2044 ) + " | " +
2045
2046 "RoamingSpot = " + String.valueOf(isRoamingSpot()
2047 ) + " | " +
2048
2049 "SnipingSpot = " + String.valueOf(isSnipingSpot()
2050 ) + " | " +
2051
2052 "PreferedWeapon = " + String.valueOf(getPreferedWeapon()
2053 ) + " | " +
2054
2055 "]";
2056 }
2057
2058
2059 public String toHtmlString() {
2060 return super.toString() + "[<br/>" +
2061
2062 "<b>Id</b> = " + String.valueOf(getId()
2063 ) + " <br/> " +
2064
2065 "<b>Item</b> = " + String.valueOf(getItem()
2066 ) + " <br/> " +
2067
2068 "<b>ItemClass</b> = " + String.valueOf(getItemClass()
2069 ) + " <br/> " +
2070
2071 "<b>Mover</b> = " + String.valueOf(getMover()
2072 ) + " <br/> " +
2073
2074 "<b>LiftOffset</b> = " + String.valueOf(getLiftOffset()
2075 ) + " <br/> " +
2076
2077 "<b>LiftJumpExit</b> = " + String.valueOf(isLiftJumpExit()
2078 ) + " <br/> " +
2079
2080 "<b>NoDoubleJump</b> = " + String.valueOf(isNoDoubleJump()
2081 ) + " <br/> " +
2082
2083 "<b>InvSpot</b> = " + String.valueOf(isInvSpot()
2084 ) + " <br/> " +
2085
2086 "<b>PlayerStart</b> = " + String.valueOf(isPlayerStart()
2087 ) + " <br/> " +
2088
2089 "<b>TeamNumber</b> = " + String.valueOf(getTeamNumber()
2090 ) + " <br/> " +
2091
2092 "<b>DomPoint</b> = " + String.valueOf(isDomPoint()
2093 ) + " <br/> " +
2094
2095 "<b>DomPointController</b> = " + String.valueOf(getDomPointController()
2096 ) + " <br/> " +
2097
2098 "<b>Door</b> = " + String.valueOf(isDoor()
2099 ) + " <br/> " +
2100
2101 "<b>LiftCenter</b> = " + String.valueOf(isLiftCenter()
2102 ) + " <br/> " +
2103
2104 "<b>LiftExit</b> = " + String.valueOf(isLiftExit()
2105 ) + " <br/> " +
2106
2107 "<b>AIMarker</b> = " + String.valueOf(isAIMarker()
2108 ) + " <br/> " +
2109
2110 "<b>JumpSpot</b> = " + String.valueOf(isJumpSpot()
2111 ) + " <br/> " +
2112
2113 "<b>JumpPad</b> = " + String.valueOf(isJumpPad()
2114 ) + " <br/> " +
2115
2116 "<b>JumpDest</b> = " + String.valueOf(isJumpDest()
2117 ) + " <br/> " +
2118
2119 "<b>Teleporter</b> = " + String.valueOf(isTeleporter()
2120 ) + " <br/> " +
2121
2122 "<b>Rotation</b> = " + String.valueOf(getRotation()
2123 ) + " <br/> " +
2124
2125 "<b>RoamingSpot</b> = " + String.valueOf(isRoamingSpot()
2126 ) + " <br/> " +
2127
2128 "<b>SnipingSpot</b> = " + String.valueOf(isSnipingSpot()
2129 ) + " <br/> " +
2130
2131 "<b>PreferedWeapon</b> = " + String.valueOf(getPreferedWeapon()
2132 ) + " <br/> " +
2133
2134 "<br/>]";
2135 }
2136
2137
2138 // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
2139
2140 // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
2141
2142 // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=static+classtype[@name=message]) ---
2143
2144 // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=static+classtype[@name=message]) ---
2145
2146 }
2147
2148 /**
2149 *
2150 Implementation of the shared part of the GameBots2004 message NAV, used
2151 to facade NAVMessage.
2152
2153 *
2154 * <p></p><p></p>
2155 * Complete message documentation:
2156 *
2157 Synchronous message - however only NavPoints marking item pickup locations are exported synchronously. Other NavPoints are not exported synchronously at all, even if the bot can actually see them (but note that ALL NavPoints are exported in the handshake between bot and the server). Exporting NavPoints synchronously took a lot of UT server resources with limited information gain (in Pogamut there is now available visibility matrix holding static information which points can be seen from other points). NavPoint carries information about UT navigation point - location, paths and some additional information are stored there (if it is an ambush point, or sniper point, etc.).
2158
2159 */
2160 public class NavPointSharedMessage
2161 extends
2162 NavPointShared
2163 {
2164
2165
2166
2167 public NavPointSharedMessage()
2168 {
2169
2170 propertyMap.put(myLocation.getPropertyId(), myLocation);
2171
2172 propertyMap.put(myVelocity.getPropertyId(), myVelocity);
2173
2174 propertyMap.put(myItemSpawned.getPropertyId(), myItemSpawned);
2175
2176 propertyMap.put(myDoorOpened.getPropertyId(), myDoorOpened);
2177
2178 }
2179
2180 @Override
2181 public
2182 NavPointSharedMessage clone() {
2183 return this;
2184 }
2185
2186
2187
2188
2189 protected HashMap<PropertyId, ISharedProperty> propertyMap = new HashMap<PropertyId, ISharedProperty>(
2190 4
2191 );
2192
2193 @Override
2194 public ISharedProperty getProperty(PropertyId id) {
2195 return propertyMap.get(id);
2196 }
2197
2198 @Override
2199 public Map<PropertyId, ISharedProperty> getProperties() {
2200 return propertyMap;
2201 }
2202
2203
2204
2205 /**
2206 *
2207 A unique Id of this navigation point assigned by the game.
2208
2209 */
2210 public UnrealId getId()
2211 {
2212 return Id;
2213 }
2214
2215
2216 /**
2217 * Location of navigation point.
2218 */
2219 protected
2220 LocationProperty
2221 myLocation
2222 = new
2223 LocationProperty
2224 (
2225 getId(),
2226 "Location",
2227 Location,
2228 NavPoint.class
2229 );
2230
2231 /**
2232 * Location of navigation point.
2233 */
2234 public Location getLocation()
2235 {
2236 return myLocation.getValue();
2237 }
2238
2239
2240 /**
2241 *
2242 Velocity of the navigation point (if the navigation point is
2243 currently moving). Not sent at the moment.
2244
2245 */
2246 protected
2247 VelocityProperty
2248 myVelocity
2249 = new
2250 VelocityProperty
2251 (
2252 getId(),
2253 "Velocity",
2254 Velocity,
2255 NavPoint.class
2256 );
2257
2258 /**
2259 *
2260 Velocity of the navigation point (if the navigation point is
2261 currently moving). Not sent at the moment.
2262
2263 */
2264 public Velocity getVelocity()
2265 {
2266 return myVelocity.getValue();
2267 }
2268
2269
2270 /**
2271 *
2272 True if the item is spawned at the point. Not sent if point is not an inventory spot.
2273
2274 */
2275 protected
2276 BooleanProperty
2277 myItemSpawned
2278 = new
2279 BooleanProperty
2280 (
2281 getId(),
2282 "ItemSpawned",
2283 ItemSpawned,
2284 NavPoint.class
2285 );
2286
2287 /**
2288 *
2289 True if the item is spawned at the point. Not sent if point is not an inventory spot.
2290
2291 */
2292 public boolean isItemSpawned()
2293 {
2294 return myItemSpawned.getValue();
2295 }
2296
2297
2298 /**
2299 *
2300 True if this NavPoint is a Door and door is opened. Not sent if point is not a door.
2301
2302 */
2303 protected
2304 BooleanProperty
2305 myDoorOpened
2306 = new
2307 BooleanProperty
2308 (
2309 getId(),
2310 "DoorOpened",
2311 DoorOpened,
2312 NavPoint.class
2313 );
2314
2315 /**
2316 *
2317 True if this NavPoint is a Door and door is opened. Not sent if point is not a door.
2318
2319 */
2320 public boolean isDoorOpened()
2321 {
2322 return myDoorOpened.getValue();
2323 }
2324
2325
2326 public String toString() {
2327 return
2328 super.toString() + "[" +
2329
2330 "Id = " + String.valueOf(getId()
2331 ) + " | " +
2332
2333 "Location = " + String.valueOf(getLocation()
2334 ) + " | " +
2335
2336 "Velocity = " + String.valueOf(getVelocity()
2337 ) + " | " +
2338
2339 "ItemSpawned = " + String.valueOf(isItemSpawned()
2340 ) + " | " +
2341
2342 "DoorOpened = " + String.valueOf(isDoorOpened()
2343 ) + " | " +
2344
2345 "]";
2346 }
2347
2348
2349 public String toHtmlString() {
2350 return super.toString() + "[<br/>" +
2351
2352 "<b>Id</b> = " + String.valueOf(getId()
2353 ) + " <br/> " +
2354
2355 "<b>Location</b> = " + String.valueOf(getLocation()
2356 ) + " <br/> " +
2357
2358 "<b>Velocity</b> = " + String.valueOf(getVelocity()
2359 ) + " <br/> " +
2360
2361 "<b>ItemSpawned</b> = " + String.valueOf(isItemSpawned()
2362 ) + " <br/> " +
2363
2364 "<b>DoorOpened</b> = " + String.valueOf(isDoorOpened()
2365 ) + " <br/> " +
2366
2367 "<br/>]";
2368 }
2369
2370
2371 // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
2372
2373 // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
2374
2375 // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=shared+classtype[@name=message]) ---
2376
2377 // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=shared+classtype[@name=message]) ---
2378
2379 }
2380
2381
2382
2383
2384 @Override
2385 public IWorldObjectUpdateResult<IWorldObject> update(IWorldObject object) {
2386 if (object == null)
2387 {
2388 return new IWorldObjectUpdateResult.WorldObjectUpdateResult(IWorldObjectUpdateResult.Result.CREATED, this);
2389 }
2390 if (!( object instanceof NavPointMessage) ) {
2391 throw new PogamutException("Can't update different class than NavPointMessage, got class " + object.getClass().getSimpleName() + "!", this);
2392 }
2393 NavPointMessage toUpdate = (NavPointMessage)object;
2394
2395 boolean updated = false;
2396
2397 // UPDATING LOCAL PROPERTIES
2398
2399 if (toUpdate.Visible != isVisible()
2400 ) {
2401 toUpdate.Visible=isVisible()
2402 ;
2403 updated = true;
2404 }
2405
2406
2407 // UPDATING SHARED PROPERTIES
2408
2409 if (getLocation()
2410 != null) {
2411
2412 if (!SafeEquals.equals(toUpdate.Location, getLocation()
2413 )) {
2414 toUpdate.Location=getLocation()
2415 ;
2416 updated = true;
2417 }
2418
2419 }
2420
2421 if (!SafeEquals.equals(toUpdate.Velocity, getVelocity()
2422 )) {
2423 toUpdate.Velocity=getVelocity()
2424 ;
2425 updated = true;
2426 }
2427
2428 if (toUpdate.ItemSpawned != isItemSpawned()
2429 ) {
2430 toUpdate.ItemSpawned=isItemSpawned()
2431 ;
2432 updated = true;
2433 }
2434
2435 if (toUpdate.DoorOpened != isDoorOpened()
2436 ) {
2437 toUpdate.DoorOpened=isDoorOpened()
2438 ;
2439 updated = true;
2440 }
2441
2442
2443 // UPDATE TIME
2444 toUpdate.SimTime = SimTime;
2445
2446 if (updated) {
2447 return new IWorldObjectUpdateResult.WorldObjectUpdateResult<IWorldObject>(IWorldObjectUpdateResult.Result.UPDATED, toUpdate);
2448 } else {
2449 return new IWorldObjectUpdateResult.WorldObjectUpdateResult<IWorldObject>(IWorldObjectUpdateResult.Result.SAME, toUpdate);
2450 }
2451 }
2452
2453 @Override
2454 public ILocalWorldObjectUpdatedEvent getLocalEvent() {
2455 return new NavPointLocalImpl.NavPointLocalUpdate
2456 (this.getLocal(), SimTime);
2457 }
2458
2459 @Override
2460 public ISharedWorldObjectUpdatedEvent getSharedEvent() {
2461 return new NavPointSharedImpl.NavPointSharedUpdate
2462 (this.getShared(), SimTime, this.getTeamId());
2463 }
2464
2465 @Override
2466 public IStaticWorldObjectUpdatedEvent getStaticEvent() {
2467 return new NavPointStaticImpl.NavPointStaticUpdate
2468 (this.getStatic(), SimTime);
2469 }
2470
2471
2472 public String toString() {
2473 return
2474 super.toString() + "[" +
2475
2476 "Id = " + String.valueOf(getId()
2477 ) + " | " +
2478
2479 "Location = " + String.valueOf(getLocation()
2480 ) + " | " +
2481
2482 "Velocity = " + String.valueOf(getVelocity()
2483 ) + " | " +
2484
2485 "Visible = " + String.valueOf(isVisible()
2486 ) + " | " +
2487
2488 "Item = " + String.valueOf(getItem()
2489 ) + " | " +
2490
2491 "ItemClass = " + String.valueOf(getItemClass()
2492 ) + " | " +
2493
2494 "ItemSpawned = " + String.valueOf(isItemSpawned()
2495 ) + " | " +
2496
2497 "DoorOpened = " + String.valueOf(isDoorOpened()
2498 ) + " | " +
2499
2500 "Mover = " + String.valueOf(getMover()
2501 ) + " | " +
2502
2503 "LiftOffset = " + String.valueOf(getLiftOffset()
2504 ) + " | " +
2505
2506 "LiftJumpExit = " + String.valueOf(isLiftJumpExit()
2507 ) + " | " +
2508
2509 "NoDoubleJump = " + String.valueOf(isNoDoubleJump()
2510 ) + " | " +
2511
2512 "InvSpot = " + String.valueOf(isInvSpot()
2513 ) + " | " +
2514
2515 "PlayerStart = " + String.valueOf(isPlayerStart()
2516 ) + " | " +
2517
2518 "TeamNumber = " + String.valueOf(getTeamNumber()
2519 ) + " | " +
2520
2521 "DomPoint = " + String.valueOf(isDomPoint()
2522 ) + " | " +
2523
2524 "DomPointController = " + String.valueOf(getDomPointController()
2525 ) + " | " +
2526
2527 "Door = " + String.valueOf(isDoor()
2528 ) + " | " +
2529
2530 "LiftCenter = " + String.valueOf(isLiftCenter()
2531 ) + " | " +
2532
2533 "LiftExit = " + String.valueOf(isLiftExit()
2534 ) + " | " +
2535
2536 "AIMarker = " + String.valueOf(isAIMarker()
2537 ) + " | " +
2538
2539 "JumpSpot = " + String.valueOf(isJumpSpot()
2540 ) + " | " +
2541
2542 "JumpPad = " + String.valueOf(isJumpPad()
2543 ) + " | " +
2544
2545 "JumpDest = " + String.valueOf(isJumpDest()
2546 ) + " | " +
2547
2548 "Teleporter = " + String.valueOf(isTeleporter()
2549 ) + " | " +
2550
2551 "Rotation = " + String.valueOf(getRotation()
2552 ) + " | " +
2553
2554 "RoamingSpot = " + String.valueOf(isRoamingSpot()
2555 ) + " | " +
2556
2557 "SnipingSpot = " + String.valueOf(isSnipingSpot()
2558 ) + " | " +
2559
2560 "PreferedWeapon = " + String.valueOf(getPreferedWeapon()
2561 ) + " | " +
2562
2563 "]";
2564 }
2565
2566
2567 public String toHtmlString() {
2568 return super.toString() + "[<br/>" +
2569
2570 "<b>Id</b> = " + String.valueOf(getId()
2571 ) + " <br/> " +
2572
2573 "<b>Location</b> = " + String.valueOf(getLocation()
2574 ) + " <br/> " +
2575
2576 "<b>Velocity</b> = " + String.valueOf(getVelocity()
2577 ) + " <br/> " +
2578
2579 "<b>Visible</b> = " + String.valueOf(isVisible()
2580 ) + " <br/> " +
2581
2582 "<b>Item</b> = " + String.valueOf(getItem()
2583 ) + " <br/> " +
2584
2585 "<b>ItemClass</b> = " + String.valueOf(getItemClass()
2586 ) + " <br/> " +
2587
2588 "<b>ItemSpawned</b> = " + String.valueOf(isItemSpawned()
2589 ) + " <br/> " +
2590
2591 "<b>DoorOpened</b> = " + String.valueOf(isDoorOpened()
2592 ) + " <br/> " +
2593
2594 "<b>Mover</b> = " + String.valueOf(getMover()
2595 ) + " <br/> " +
2596
2597 "<b>LiftOffset</b> = " + String.valueOf(getLiftOffset()
2598 ) + " <br/> " +
2599
2600 "<b>LiftJumpExit</b> = " + String.valueOf(isLiftJumpExit()
2601 ) + " <br/> " +
2602
2603 "<b>NoDoubleJump</b> = " + String.valueOf(isNoDoubleJump()
2604 ) + " <br/> " +
2605
2606 "<b>InvSpot</b> = " + String.valueOf(isInvSpot()
2607 ) + " <br/> " +
2608
2609 "<b>PlayerStart</b> = " + String.valueOf(isPlayerStart()
2610 ) + " <br/> " +
2611
2612 "<b>TeamNumber</b> = " + String.valueOf(getTeamNumber()
2613 ) + " <br/> " +
2614
2615 "<b>DomPoint</b> = " + String.valueOf(isDomPoint()
2616 ) + " <br/> " +
2617
2618 "<b>DomPointController</b> = " + String.valueOf(getDomPointController()
2619 ) + " <br/> " +
2620
2621 "<b>Door</b> = " + String.valueOf(isDoor()
2622 ) + " <br/> " +
2623
2624 "<b>LiftCenter</b> = " + String.valueOf(isLiftCenter()
2625 ) + " <br/> " +
2626
2627 "<b>LiftExit</b> = " + String.valueOf(isLiftExit()
2628 ) + " <br/> " +
2629
2630 "<b>AIMarker</b> = " + String.valueOf(isAIMarker()
2631 ) + " <br/> " +
2632
2633 "<b>JumpSpot</b> = " + String.valueOf(isJumpSpot()
2634 ) + " <br/> " +
2635
2636 "<b>JumpPad</b> = " + String.valueOf(isJumpPad()
2637 ) + " <br/> " +
2638
2639 "<b>JumpDest</b> = " + String.valueOf(isJumpDest()
2640 ) + " <br/> " +
2641
2642 "<b>Teleporter</b> = " + String.valueOf(isTeleporter()
2643 ) + " <br/> " +
2644
2645 "<b>Rotation</b> = " + String.valueOf(getRotation()
2646 ) + " <br/> " +
2647
2648 "<b>RoamingSpot</b> = " + String.valueOf(isRoamingSpot()
2649 ) + " <br/> " +
2650
2651 "<b>SnipingSpot</b> = " + String.valueOf(isSnipingSpot()
2652 ) + " <br/> " +
2653
2654 "<b>PreferedWeapon</b> = " + String.valueOf(getPreferedWeapon()
2655 ) + " <br/> " +
2656
2657 "<br/>]";
2658 }
2659
2660
2661 // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
2662
2663 // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
2664
2665 // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=base+classtype[@name=message]) ---
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675 /**
2676 * DO NOT USE THIS METHOD! Reserved for GaviaLib (Pogamut core)! It's used
2677 * to set correct item instance into the NavPoint.
2678 */
2679 public void setItemInstance(Item item) {
2680 this.ItemInstance = item;
2681 if (item != null) {
2682 this.Item = item.getId();
2683 }
2684 }
2685
2686 // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=base+classtype[@name=message]) ---
2687
2688 }
2689