View Javadoc

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          * 
1569 			If this point marks a door mover.
1570 		 
1571          */
1572         public  boolean isDoor()
1573  	 {
1574 				    					return Door;
1575 				    				}
1576 				    			
1577  		/**
1578          * 
1579 			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).
1580 		 
1581          */
1582         public  boolean isLiftCenter()
1583  	 {
1584 				    					return LiftCenter;
1585 				    				}
1586 				    			
1587  		/**
1588          * 
1589 			If this point marks a lift exit (used to mark exit point of a lift mover).
1590 		 
1591          */
1592         public  boolean isLiftExit()
1593  	 {
1594 				    					return LiftExit;
1595 				    				}
1596 				    			
1597  		/**
1598          * 
1599 			If this point is an AI marker - marks an interesting spot in the environment. May be ambush point or sniping spot, etc.
1600 		 
1601          */
1602         public  boolean isAIMarker()
1603  	 {
1604 				    					return AIMarker;
1605 				    				}
1606 				    			
1607  		/**
1608          * 
1609 			If this point marks a jump spot (a special device that causes the bot to jump high or far).
1610 		 
1611          */
1612         public  boolean isJumpSpot()
1613  	 {
1614 				    					return JumpSpot;
1615 				    				}
1616 				    			
1617  		/**
1618          * 
1619 			If this point marks a jump pad (a special device that causes the bot to jump high or far).
1620 		 
1621          */
1622         public  boolean isJumpPad()
1623  	 {
1624 				    					return JumpPad;
1625 				    				}
1626 				    			
1627  		/**
1628          * 
1629 			If this point marks a jump destination - some place that can be reached by some special jump.
1630 		 
1631          */
1632         public  boolean isJumpDest()
1633  	 {
1634 				    					return JumpDest;
1635 				    				}
1636 				    			
1637  		/**
1638          * 
1639 			If this point marks a teleport. 
1640 		 
1641          */
1642         public  boolean isTeleporter()
1643  	 {
1644 				    					return Teleporter;
1645 				    				}
1646 				    			
1647  		/**
1648          * 
1649 			If the type is AIMarker. The rotation the bot should be
1650 			facing, when doing the action specified by AIMarker. Sent only in HandShake.
1651 		 
1652          */
1653         public  Rotation getRotation()
1654  	 {
1655 				    					return Rotation;
1656 				    				}
1657 				    			
1658  		/**
1659          * 
1660 			Some ambush point, where is good chance to intercept
1661 			approaching opponents. Sent only in HandShake.
1662 		 
1663          */
1664         public  boolean isRoamingSpot()
1665  	 {
1666 				    					return RoamingSpot;
1667 				    				}
1668 				    			
1669  		/**
1670          * Point good for sniping. Sent only in HandShake. 
1671          */
1672         public  boolean isSnipingSpot()
1673  	 {
1674 				    					return SnipingSpot;
1675 				    				}
1676 				    			
1677  		/**
1678          * If item should be present at this navpoint it's instance will be here. 
1679          */
1680         public  Item getItemInstance()
1681  	 {
1682 				    					return ItemInstance;
1683 				    				}
1684 				    			
1685  		/**
1686          * 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). 
1687          */
1688         public  Map<UnrealId, NavPointNeighbourLink> getOutgoingEdges()
1689  	 {
1690 				    					return OutgoingEdges;
1691 				    				}
1692 				    			
1693  		/**
1694          * 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). 
1695          */
1696         public  Map<UnrealId, NavPointNeighbourLink> getIncomingEdges()
1697  	 {
1698 				    					return IncomingEdges;
1699 				    				}
1700 				    			
1701  		/**
1702          * 
1703 			Class of the weapon that should be prefered when using this
1704 			point for AIMarker specified action. Sent only in HandShake.
1705 		 
1706          */
1707         public  String getPreferedWeapon()
1708  	 {
1709 				    					return PreferedWeapon;
1710 				    				}
1711 				    			
1712  		
1713  		@Override
1714  		public boolean isDifferentFrom(IStaticWorldObject other)
1715  		{
1716  			if (other == null) //early fail
1717  			{
1718  				return true;
1719  			}
1720  			else if (other == this) //early out
1721  			{
1722  				return false;
1723  			}
1724  			else
1725  			{
1726  				NavPointStatic obj = (NavPointStatic) other;
1727 
1728  				
1729  						if ( !(
1730  	 			AdvancedEquals.equalsOrNull(this.getId()
1731  	, obj.getId()
1732  	)
1733  	 		) )
1734 						{
1735 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Id on object class NavPointStatic");
1736 							return true;
1737 						}
1738  					
1739  						if ( !(
1740  	 			AdvancedEquals.equalsOrNull(this.getItem()
1741  	, obj.getItem()
1742  	)
1743  	 		) )
1744 						{
1745 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Item on object class NavPointStatic");
1746 							return true;
1747 						}
1748  					
1749  						if ( !(
1750  	 			AdvancedEquals.equalsOrNull(this.getItemClass()
1751  	, obj.getItemClass()
1752  	)
1753  	 		) )
1754 						{
1755 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property ItemClass on object class NavPointStatic");
1756 							return true;
1757 						}
1758  					
1759  						if ( !(
1760  	 			AdvancedEquals.equalsOrNull(this.getMover()
1761  	, obj.getMover()
1762  	)
1763  	 		) )
1764 						{
1765 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Mover on object class NavPointStatic");
1766 							return true;
1767 						}
1768  					
1769  						if ( !(
1770  	 			AdvancedEquals.equalsOrNull(this.getLiftOffset()
1771  	, obj.getLiftOffset()
1772  	)
1773  	 		) )
1774 						{
1775 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftOffset on object class NavPointStatic");
1776 							return true;
1777 						}
1778  					
1779  						if ( !(this.isLiftJumpExit()
1780  	
1781  	 			== obj.isLiftJumpExit()
1782  	) )
1783 						{
1784 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftJumpExit on object class NavPointStatic");
1785 							return true;
1786 						}
1787  					
1788  						if ( !(this.isNoDoubleJump()
1789  	
1790  	 			== obj.isNoDoubleJump()
1791  	) )
1792 						{
1793 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property NoDoubleJump on object class NavPointStatic");
1794 							return true;
1795 						}
1796  					
1797  						if ( !(this.isInvSpot()
1798  	
1799  	 			== obj.isInvSpot()
1800  	) )
1801 						{
1802 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property InvSpot on object class NavPointStatic");
1803 							return true;
1804 						}
1805  					
1806  						if ( !(this.isPlayerStart()
1807  	
1808  	 			== obj.isPlayerStart()
1809  	) )
1810 						{
1811 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property PlayerStart on object class NavPointStatic");
1812 							return true;
1813 						}
1814  					
1815  						if ( !(this.getTeamNumber()
1816  	
1817  	 			== obj.getTeamNumber()
1818  	) )
1819 						{
1820 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property TeamNumber on object class NavPointStatic");
1821 							return true;
1822 						}
1823  					
1824  						if ( !(this.isDomPoint()
1825  	
1826  	 			== obj.isDomPoint()
1827  	) )
1828 						{
1829 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property DomPoint on object class NavPointStatic");
1830 							return true;
1831 						}
1832  					
1833  						if ( !(this.isDoor()
1834  	
1835  	 			== obj.isDoor()
1836  	) )
1837 						{
1838 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Door on object class NavPointStatic");
1839 							return true;
1840 						}
1841  					
1842  						if ( !(this.isLiftCenter()
1843  	
1844  	 			== obj.isLiftCenter()
1845  	) )
1846 						{
1847 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftCenter on object class NavPointStatic");
1848 							return true;
1849 						}
1850  					
1851  						if ( !(this.isLiftExit()
1852  	
1853  	 			== obj.isLiftExit()
1854  	) )
1855 						{
1856 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property LiftExit on object class NavPointStatic");
1857 							return true;
1858 						}
1859  					
1860  						if ( !(this.isAIMarker()
1861  	
1862  	 			== obj.isAIMarker()
1863  	) )
1864 						{
1865 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property AIMarker on object class NavPointStatic");
1866 							return true;
1867 						}
1868  					
1869  						if ( !(this.isJumpSpot()
1870  	
1871  	 			== obj.isJumpSpot()
1872  	) )
1873 						{
1874 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpSpot on object class NavPointStatic");
1875 							return true;
1876 						}
1877  					
1878  						if ( !(this.isJumpPad()
1879  	
1880  	 			== obj.isJumpPad()
1881  	) )
1882 						{
1883 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpPad on object class NavPointStatic");
1884 							return true;
1885 						}
1886  					
1887  						if ( !(this.isJumpDest()
1888  	
1889  	 			== obj.isJumpDest()
1890  	) )
1891 						{
1892 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property JumpDest on object class NavPointStatic");
1893 							return true;
1894 						}
1895  					
1896  						if ( !(this.isTeleporter()
1897  	
1898  	 			== obj.isTeleporter()
1899  	) )
1900 						{
1901 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Teleporter on object class NavPointStatic");
1902 							return true;
1903 						}
1904  					
1905  						if ( !(
1906  	 			AdvancedEquals.equalsOrNull(this.getRotation()
1907  	, obj.getRotation()
1908  	)
1909  	 		) )
1910 						{
1911 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property Rotation on object class NavPointStatic");
1912 							return true;
1913 						}
1914  					
1915  						if ( !(this.isRoamingSpot()
1916  	
1917  	 			== obj.isRoamingSpot()
1918  	) )
1919 						{
1920 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property RoamingSpot on object class NavPointStatic");
1921 							return true;
1922 						}
1923  					
1924  						if ( !(this.isSnipingSpot()
1925  	
1926  	 			== obj.isSnipingSpot()
1927  	) )
1928 						{
1929 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property SnipingSpot on object class NavPointStatic");
1930 							return true;
1931 						}
1932  					
1933  						if ( !(
1934  	 			AdvancedEquals.equalsOrNull(this.getItemInstance()
1935  	, obj.getItemInstance()
1936  	)
1937  	 		) )
1938 						{
1939 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property ItemInstance on object class NavPointStatic");
1940 							return true;
1941 						}
1942  					
1943  						//Skipping outgoing and incoming edges tests because the navGraph is sent only once
1944  					
1945  						//Skipping outgoing and incoming edges tests because the navGraph is sent only once
1946  					
1947  						if ( !(
1948  	 			AdvancedEquals.equalsOrNull(this.getPreferedWeapon()
1949  	, obj.getPreferedWeapon()
1950  	)
1951  	 		) )
1952 						{
1953 							System.out.println("!!!!!PROPERTY UPDATE ERROR!!!! on property PreferedWeapon on object class NavPointStatic");
1954 							return true;
1955 						}
1956  					
1957  			}
1958  			return false;
1959  		}
1960  	 
1961  		
1962  	    public String toString() {
1963             return
1964             	super.toString() + "[" +
1965             	
1966 		              			"Id = " + String.valueOf(getId()
1967  	) + " | " + 
1968 		              		
1969 		              			"Item = " + String.valueOf(getItem()
1970  	) + " | " + 
1971 		              		
1972 		              			"ItemClass = " + String.valueOf(getItemClass()
1973  	) + " | " + 
1974 		              		
1975 		              			"Mover = " + String.valueOf(getMover()
1976  	) + " | " + 
1977 		              		
1978 		              			"LiftOffset = " + String.valueOf(getLiftOffset()
1979  	) + " | " + 
1980 		              		
1981 		              			"LiftJumpExit = " + String.valueOf(isLiftJumpExit()
1982  	) + " | " + 
1983 		              		
1984 		              			"NoDoubleJump = " + String.valueOf(isNoDoubleJump()
1985  	) + " | " + 
1986 		              		
1987 		              			"InvSpot = " + String.valueOf(isInvSpot()
1988  	) + " | " + 
1989 		              		
1990 		              			"PlayerStart = " + String.valueOf(isPlayerStart()
1991  	) + " | " + 
1992 		              		
1993 		              			"TeamNumber = " + String.valueOf(getTeamNumber()
1994  	) + " | " + 
1995 		              		
1996 		              			"DomPoint = " + String.valueOf(isDomPoint()
1997  	) + " | " + 
1998 		              		
1999 		              			"Door = " + String.valueOf(isDoor()
2000  	) + " | " + 
2001 		              		
2002 		              			"LiftCenter = " + String.valueOf(isLiftCenter()
2003  	) + " | " + 
2004 		              		
2005 		              			"LiftExit = " + String.valueOf(isLiftExit()
2006  	) + " | " + 
2007 		              		
2008 		              			"AIMarker = " + String.valueOf(isAIMarker()
2009  	) + " | " + 
2010 		              		
2011 		              			"JumpSpot = " + String.valueOf(isJumpSpot()
2012  	) + " | " + 
2013 		              		
2014 		              			"JumpPad = " + String.valueOf(isJumpPad()
2015  	) + " | " + 
2016 		              		
2017 		              			"JumpDest = " + String.valueOf(isJumpDest()
2018  	) + " | " + 
2019 		              		
2020 		              			"Teleporter = " + String.valueOf(isTeleporter()
2021  	) + " | " + 
2022 		              		
2023 		              			"Rotation = " + String.valueOf(getRotation()
2024  	) + " | " + 
2025 		              		
2026 		              			"RoamingSpot = " + String.valueOf(isRoamingSpot()
2027  	) + " | " + 
2028 		              		
2029 		              			"SnipingSpot = " + String.valueOf(isSnipingSpot()
2030  	) + " | " + 
2031 		              		
2032 		              			"PreferedWeapon = " + String.valueOf(getPreferedWeapon()
2033  	) + " | " + 
2034 		              		
2035 				"]";           		
2036         }
2037  	
2038  		
2039  		public String toHtmlString() {
2040  			return super.toString() + "[<br/>" +
2041             	
2042 		              			"<b>Id</b> = " + String.valueOf(getId()
2043  	) + " <br/> " + 
2044 		              		
2045 		              			"<b>Item</b> = " + String.valueOf(getItem()
2046  	) + " <br/> " + 
2047 		              		
2048 		              			"<b>ItemClass</b> = " + String.valueOf(getItemClass()
2049  	) + " <br/> " + 
2050 		              		
2051 		              			"<b>Mover</b> = " + String.valueOf(getMover()
2052  	) + " <br/> " + 
2053 		              		
2054 		              			"<b>LiftOffset</b> = " + String.valueOf(getLiftOffset()
2055  	) + " <br/> " + 
2056 		              		
2057 		              			"<b>LiftJumpExit</b> = " + String.valueOf(isLiftJumpExit()
2058  	) + " <br/> " + 
2059 		              		
2060 		              			"<b>NoDoubleJump</b> = " + String.valueOf(isNoDoubleJump()
2061  	) + " <br/> " + 
2062 		              		
2063 		              			"<b>InvSpot</b> = " + String.valueOf(isInvSpot()
2064  	) + " <br/> " + 
2065 		              		
2066 		              			"<b>PlayerStart</b> = " + String.valueOf(isPlayerStart()
2067  	) + " <br/> " + 
2068 		              		
2069 		              			"<b>TeamNumber</b> = " + String.valueOf(getTeamNumber()
2070  	) + " <br/> " + 
2071 		              		
2072 		              			"<b>DomPoint</b> = " + String.valueOf(isDomPoint()
2073  	) + " <br/> " + 
2074 		              		
2075 		              			"<b>Door</b> = " + String.valueOf(isDoor()
2076  	) + " <br/> " + 
2077 		              		
2078 		              			"<b>LiftCenter</b> = " + String.valueOf(isLiftCenter()
2079  	) + " <br/> " + 
2080 		              		
2081 		              			"<b>LiftExit</b> = " + String.valueOf(isLiftExit()
2082  	) + " <br/> " + 
2083 		              		
2084 		              			"<b>AIMarker</b> = " + String.valueOf(isAIMarker()
2085  	) + " <br/> " + 
2086 		              		
2087 		              			"<b>JumpSpot</b> = " + String.valueOf(isJumpSpot()
2088  	) + " <br/> " + 
2089 		              		
2090 		              			"<b>JumpPad</b> = " + String.valueOf(isJumpPad()
2091  	) + " <br/> " + 
2092 		              		
2093 		              			"<b>JumpDest</b> = " + String.valueOf(isJumpDest()
2094  	) + " <br/> " + 
2095 		              		
2096 		              			"<b>Teleporter</b> = " + String.valueOf(isTeleporter()
2097  	) + " <br/> " + 
2098 		              		
2099 		              			"<b>Rotation</b> = " + String.valueOf(getRotation()
2100  	) + " <br/> " + 
2101 		              		
2102 		              			"<b>RoamingSpot</b> = " + String.valueOf(isRoamingSpot()
2103  	) + " <br/> " + 
2104 		              		
2105 		              			"<b>SnipingSpot</b> = " + String.valueOf(isSnipingSpot()
2106  	) + " <br/> " + 
2107 		              		
2108 		              			"<b>PreferedWeapon</b> = " + String.valueOf(getPreferedWeapon()
2109  	) + " <br/> " + 
2110 		              		
2111 				"<br/>]";     
2112 		}
2113  	
2114  		
2115  		// --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
2116         	
2117 		// --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
2118 		
2119 	    // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=static+classtype[@name=message]) ---
2120 	        
2121 	    // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=static+classtype[@name=message]) ---        	            	
2122  	
2123 		}
2124  	
2125  		/**
2126          *  
2127             				Implementation of the shared part of the GameBots2004 message NAV, used
2128             				to facade NAVMessage.  
2129             			
2130          *
2131          *  <p></p><p></p>
2132          *  Complete message documentation:               
2133          *  
2134 		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.).
2135    
2136          */
2137  	public class NavPointSharedMessage 
2138 	  					extends
2139   						NavPointShared
2140 	    {
2141  	
2142     	
2143     	
2144 		public NavPointSharedMessage()
2145 		{
2146 			
2147 				propertyMap.put(myLocation.getPropertyId(), myLocation);
2148 			
2149 				propertyMap.put(myVelocity.getPropertyId(), myVelocity);
2150 			
2151 				propertyMap.put(myItemSpawned.getPropertyId(), myItemSpawned);
2152 			
2153 				propertyMap.put(myDoorOpened.getPropertyId(), myDoorOpened);
2154 			
2155 				propertyMap.put(myDomPointController.getPropertyId(), myDomPointController);
2156 			
2157 		}		
2158     
2159 		    			@Override
2160 		    			public 
2161 		    			NavPointSharedMessage clone() {
2162 		    				return this;
2163 		    			}
2164 		    			
2165 		
2166 		
2167 		
2168 		protected HashMap<PropertyId, ISharedProperty> propertyMap = new HashMap<PropertyId, ISharedProperty>(
2169 			5
2170 		);
2171 		
2172 		@Override
2173 		public ISharedProperty getProperty(PropertyId id) {
2174 			return propertyMap.get(id);
2175 		}
2176 
2177 		@Override
2178 		public Map<PropertyId, ISharedProperty> getProperties() {
2179 			return propertyMap;
2180 		}
2181 	
2182 		
2183 		
2184  		/**
2185          * 
2186 			A unique Id of this navigation point assigned by the game.
2187 		 
2188          */
2189         public  UnrealId getId()
2190  	 {
2191   			return Id;
2192   		}
2193   		
2194     	
2195 	    /**
2196          * Location of navigation point. 
2197          */
2198         protected
2199          LocationProperty 
2200         myLocation
2201 					= new
2202 					LocationProperty
2203 					(
2204 						getId(), 
2205 						"Location", 
2206 						Location, 
2207 						NavPoint.class
2208 					);
2209 					
2210  		/**
2211          * Location of navigation point. 
2212          */
2213         public  Location getLocation()
2214  	 {
2215 			  			return myLocation.getValue();
2216 			  		}
2217 				
2218     	
2219 	    /**
2220          * 
2221 			Velocity of the navigation point (if the navigation point is
2222 			currently moving). Not sent at the moment.
2223 		 
2224          */
2225         protected
2226          VelocityProperty 
2227         myVelocity
2228 					= new
2229 					VelocityProperty
2230 					(
2231 						getId(), 
2232 						"Velocity", 
2233 						Velocity, 
2234 						NavPoint.class
2235 					);
2236 					
2237  		/**
2238          * 
2239 			Velocity of the navigation point (if the navigation point is
2240 			currently moving). Not sent at the moment.
2241 		 
2242          */
2243         public  Velocity getVelocity()
2244  	 {
2245 			  			return myVelocity.getValue();
2246 			  		}
2247 				
2248     	
2249 	    /**
2250          * 
2251             True if the item is spawned at the point. Not sent if point is not an inventory spot. 
2252          
2253          */
2254         protected
2255          BooleanProperty 
2256         myItemSpawned
2257 					= new
2258 					BooleanProperty
2259 					(
2260 						getId(), 
2261 						"ItemSpawned", 
2262 						ItemSpawned, 
2263 						NavPoint.class
2264 					);
2265 					
2266  		/**
2267          * 
2268             True if the item is spawned at the point. Not sent if point is not an inventory spot. 
2269          
2270          */
2271         public  boolean isItemSpawned()
2272  	 {
2273 			  			return myItemSpawned.getValue();
2274 			  		}
2275 				
2276     	
2277 	    /**
2278          * 
2279             True if this NavPoint is a Door and door is opened. Not sent if point is not a door.
2280          
2281          */
2282         protected
2283          BooleanProperty 
2284         myDoorOpened
2285 					= new
2286 					BooleanProperty
2287 					(
2288 						getId(), 
2289 						"DoorOpened", 
2290 						DoorOpened, 
2291 						NavPoint.class
2292 					);
2293 					
2294  		/**
2295          * 
2296             True if this NavPoint is a Door and door is opened. Not sent if point is not a door.
2297          
2298          */
2299         public  boolean isDoorOpened()
2300  	 {
2301 			  			return myDoorOpened.getValue();
2302 			  		}
2303 				
2304     	
2305 	    /**
2306          * Exported if this NavPoint is a DominationPoint (for BotDoubleDomination game) - which team controls this point. 
2307          */
2308         protected
2309          IntProperty 
2310         myDomPointController
2311 					= new
2312 					IntProperty
2313 					(
2314 						getId(), 
2315 						"DomPointController", 
2316 						DomPointController, 
2317 						NavPoint.class
2318 					);
2319 					
2320  		/**
2321          * Exported if this NavPoint is a DominationPoint (for BotDoubleDomination game) - which team controls this point. 
2322          */
2323         public  int getDomPointController()
2324  	 {
2325 			  			return myDomPointController.getValue();
2326 			  		}
2327 				
2328  		
2329  	    public String toString() {
2330             return
2331             	super.toString() + "[" +
2332             	
2333 		              			"Id = " + String.valueOf(getId()
2334  	) + " | " + 
2335 		              		
2336 		              			"Location = " + String.valueOf(getLocation()
2337  	) + " | " + 
2338 		              		
2339 		              			"Velocity = " + String.valueOf(getVelocity()
2340  	) + " | " + 
2341 		              		
2342 		              			"ItemSpawned = " + String.valueOf(isItemSpawned()
2343  	) + " | " + 
2344 		              		
2345 		              			"DoorOpened = " + String.valueOf(isDoorOpened()
2346  	) + " | " + 
2347 		              		
2348 		              			"DomPointController = " + String.valueOf(getDomPointController()
2349  	) + " | " + 
2350 		              		
2351 				"]";           		
2352         }
2353  	
2354  		
2355  		public String toHtmlString() {
2356  			return super.toString() + "[<br/>" +
2357             	
2358 		              			"<b>Id</b> = " + String.valueOf(getId()
2359  	) + " <br/> " + 
2360 		              		
2361 		              			"<b>Location</b> = " + String.valueOf(getLocation()
2362  	) + " <br/> " + 
2363 		              		
2364 		              			"<b>Velocity</b> = " + String.valueOf(getVelocity()
2365  	) + " <br/> " + 
2366 		              		
2367 		              			"<b>ItemSpawned</b> = " + String.valueOf(isItemSpawned()
2368  	) + " <br/> " + 
2369 		              		
2370 		              			"<b>DoorOpened</b> = " + String.valueOf(isDoorOpened()
2371  	) + " <br/> " + 
2372 		              		
2373 		              			"<b>DomPointController</b> = " + String.valueOf(getDomPointController()
2374  	) + " <br/> " + 
2375 		              		
2376 				"<br/>]";     
2377 		}
2378  	
2379  		
2380  		// --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
2381         	
2382 		// --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
2383 		
2384 	    // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=shared+classtype[@name=message]) ---
2385 	        
2386 	    // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=shared+classtype[@name=message]) ---        	            	
2387  	
2388 		}
2389  	
2390     	
2391     	
2392  	
2393 		@Override
2394 		public IWorldObjectUpdateResult<IWorldObject> update(IWorldObject object) {
2395 			if (object == null)
2396 			{
2397 				return new IWorldObjectUpdateResult.WorldObjectUpdateResult(IWorldObjectUpdateResult.Result.CREATED, this);
2398 			}
2399 			if (!( object instanceof NavPointMessage) ) {
2400 				throw new PogamutException("Can't update different class than NavPointMessage, got class " + object.getClass().getSimpleName() + "!", this);		
2401 			}
2402 			NavPointMessage toUpdate = (NavPointMessage)object;
2403 			
2404 			boolean updated = false;
2405 			
2406 			// UPDATING LOCAL PROPERTIES
2407 			
2408 				if (toUpdate.Visible != isVisible()
2409  	) {
2410 				    toUpdate.Visible=isVisible()
2411  	;
2412 					updated = true;
2413 				}
2414 			
2415          	
2416          	// UPDATING SHARED PROPERTIES
2417          	
2418      		if (getLocation()
2419  	 != null) {
2420      	
2421 	            if (!SafeEquals.equals(toUpdate.Location, getLocation()
2422  	)) {
2423 					toUpdate.Location=getLocation()
2424  	;
2425 					updated = true;
2426 				}
2427 			
2428      		}
2429      	
2430 				if (!SafeEquals.equals(toUpdate.Velocity, getVelocity()
2431  	)) {
2432 					toUpdate.Velocity=getVelocity()
2433  	;
2434 					updated = true;
2435 				}
2436 			
2437 				if (toUpdate.ItemSpawned != isItemSpawned()
2438  	) {
2439 				    toUpdate.ItemSpawned=isItemSpawned()
2440  	;
2441 					updated = true;
2442 				}
2443 			
2444 				if (toUpdate.DoorOpened != isDoorOpened()
2445  	) {
2446 				    toUpdate.DoorOpened=isDoorOpened()
2447  	;
2448 					updated = true;
2449 				}
2450 			
2451 				if (toUpdate.DomPointController != getDomPointController()
2452  	) {
2453 				    toUpdate.DomPointController=getDomPointController()
2454  	;
2455 					updated = true;
2456 				}
2457 			
2458          	
2459          	// UPDATE TIME
2460          	toUpdate.SimTime = SimTime;
2461 			
2462 			if (updated) {
2463 				return new IWorldObjectUpdateResult.WorldObjectUpdateResult<IWorldObject>(IWorldObjectUpdateResult.Result.UPDATED, toUpdate);
2464 			} else {
2465 				return new IWorldObjectUpdateResult.WorldObjectUpdateResult<IWorldObject>(IWorldObjectUpdateResult.Result.SAME, toUpdate);
2466 			}
2467 		}
2468 		
2469 		@Override
2470 		public ILocalWorldObjectUpdatedEvent getLocalEvent() {
2471 			return new NavPointLocalImpl.NavPointLocalUpdate
2472     (this.getLocal(), SimTime);
2473 		}
2474 
2475 		@Override
2476 		public ISharedWorldObjectUpdatedEvent getSharedEvent() {
2477 			return new NavPointSharedImpl.NavPointSharedUpdate
2478     (this.getShared(), SimTime, this.getTeamId());
2479 		}
2480 
2481 		@Override
2482 		public IStaticWorldObjectUpdatedEvent getStaticEvent() {
2483 			return new NavPointStaticImpl.NavPointStaticUpdate
2484     (this.getStatic(), SimTime);
2485 		}
2486  	
2487  		
2488  	    public String toString() {
2489             return
2490             	super.toString() + "[" +
2491             	
2492 		              			"Id = " + String.valueOf(getId()
2493  	) + " | " + 
2494 		              		
2495 		              			"Location = " + String.valueOf(getLocation()
2496  	) + " | " + 
2497 		              		
2498 		              			"Velocity = " + String.valueOf(getVelocity()
2499  	) + " | " + 
2500 		              		
2501 		              			"Visible = " + String.valueOf(isVisible()
2502  	) + " | " + 
2503 		              		
2504 		              			"Item = " + String.valueOf(getItem()
2505  	) + " | " + 
2506 		              		
2507 		              			"ItemClass = " + String.valueOf(getItemClass()
2508  	) + " | " + 
2509 		              		
2510 		              			"ItemSpawned = " + String.valueOf(isItemSpawned()
2511  	) + " | " + 
2512 		              		
2513 		              			"DoorOpened = " + String.valueOf(isDoorOpened()
2514  	) + " | " + 
2515 		              		
2516 		              			"Mover = " + String.valueOf(getMover()
2517  	) + " | " + 
2518 		              		
2519 		              			"LiftOffset = " + String.valueOf(getLiftOffset()
2520  	) + " | " + 
2521 		              		
2522 		              			"LiftJumpExit = " + String.valueOf(isLiftJumpExit()
2523  	) + " | " + 
2524 		              		
2525 		              			"NoDoubleJump = " + String.valueOf(isNoDoubleJump()
2526  	) + " | " + 
2527 		              		
2528 		              			"InvSpot = " + String.valueOf(isInvSpot()
2529  	) + " | " + 
2530 		              		
2531 		              			"PlayerStart = " + String.valueOf(isPlayerStart()
2532  	) + " | " + 
2533 		              		
2534 		              			"TeamNumber = " + String.valueOf(getTeamNumber()
2535  	) + " | " + 
2536 		              		
2537 		              			"DomPoint = " + String.valueOf(isDomPoint()
2538  	) + " | " + 
2539 		              		
2540 		              			"DomPointController = " + String.valueOf(getDomPointController()
2541  	) + " | " + 
2542 		              		
2543 		              			"Door = " + String.valueOf(isDoor()
2544  	) + " | " + 
2545 		              		
2546 		              			"LiftCenter = " + String.valueOf(isLiftCenter()
2547  	) + " | " + 
2548 		              		
2549 		              			"LiftExit = " + String.valueOf(isLiftExit()
2550  	) + " | " + 
2551 		              		
2552 		              			"AIMarker = " + String.valueOf(isAIMarker()
2553  	) + " | " + 
2554 		              		
2555 		              			"JumpSpot = " + String.valueOf(isJumpSpot()
2556  	) + " | " + 
2557 		              		
2558 		              			"JumpPad = " + String.valueOf(isJumpPad()
2559  	) + " | " + 
2560 		              		
2561 		              			"JumpDest = " + String.valueOf(isJumpDest()
2562  	) + " | " + 
2563 		              		
2564 		              			"Teleporter = " + String.valueOf(isTeleporter()
2565  	) + " | " + 
2566 		              		
2567 		              			"Rotation = " + String.valueOf(getRotation()
2568  	) + " | " + 
2569 		              		
2570 		              			"RoamingSpot = " + String.valueOf(isRoamingSpot()
2571  	) + " | " + 
2572 		              		
2573 		              			"SnipingSpot = " + String.valueOf(isSnipingSpot()
2574  	) + " | " + 
2575 		              		
2576 		              			"PreferedWeapon = " + String.valueOf(getPreferedWeapon()
2577  	) + " | " + 
2578 		              		
2579 				"]";           		
2580         }
2581  	
2582  		
2583  		public String toHtmlString() {
2584  			return super.toString() + "[<br/>" +
2585             	
2586 		              			"<b>Id</b> = " + String.valueOf(getId()
2587  	) + " <br/> " + 
2588 		              		
2589 		              			"<b>Location</b> = " + String.valueOf(getLocation()
2590  	) + " <br/> " + 
2591 		              		
2592 		              			"<b>Velocity</b> = " + String.valueOf(getVelocity()
2593  	) + " <br/> " + 
2594 		              		
2595 		              			"<b>Visible</b> = " + String.valueOf(isVisible()
2596  	) + " <br/> " + 
2597 		              		
2598 		              			"<b>Item</b> = " + String.valueOf(getItem()
2599  	) + " <br/> " + 
2600 		              		
2601 		              			"<b>ItemClass</b> = " + String.valueOf(getItemClass()
2602  	) + " <br/> " + 
2603 		              		
2604 		              			"<b>ItemSpawned</b> = " + String.valueOf(isItemSpawned()
2605  	) + " <br/> " + 
2606 		              		
2607 		              			"<b>DoorOpened</b> = " + String.valueOf(isDoorOpened()
2608  	) + " <br/> " + 
2609 		              		
2610 		              			"<b>Mover</b> = " + String.valueOf(getMover()
2611  	) + " <br/> " + 
2612 		              		
2613 		              			"<b>LiftOffset</b> = " + String.valueOf(getLiftOffset()
2614  	) + " <br/> " + 
2615 		              		
2616 		              			"<b>LiftJumpExit</b> = " + String.valueOf(isLiftJumpExit()
2617  	) + " <br/> " + 
2618 		              		
2619 		              			"<b>NoDoubleJump</b> = " + String.valueOf(isNoDoubleJump()
2620  	) + " <br/> " + 
2621 		              		
2622 		              			"<b>InvSpot</b> = " + String.valueOf(isInvSpot()
2623  	) + " <br/> " + 
2624 		              		
2625 		              			"<b>PlayerStart</b> = " + String.valueOf(isPlayerStart()
2626  	) + " <br/> " + 
2627 		              		
2628 		              			"<b>TeamNumber</b> = " + String.valueOf(getTeamNumber()
2629  	) + " <br/> " + 
2630 		              		
2631 		              			"<b>DomPoint</b> = " + String.valueOf(isDomPoint()
2632  	) + " <br/> " + 
2633 		              		
2634 		              			"<b>DomPointController</b> = " + String.valueOf(getDomPointController()
2635  	) + " <br/> " + 
2636 		              		
2637 		              			"<b>Door</b> = " + String.valueOf(isDoor()
2638  	) + " <br/> " + 
2639 		              		
2640 		              			"<b>LiftCenter</b> = " + String.valueOf(isLiftCenter()
2641  	) + " <br/> " + 
2642 		              		
2643 		              			"<b>LiftExit</b> = " + String.valueOf(isLiftExit()
2644  	) + " <br/> " + 
2645 		              		
2646 		              			"<b>AIMarker</b> = " + String.valueOf(isAIMarker()
2647  	) + " <br/> " + 
2648 		              		
2649 		              			"<b>JumpSpot</b> = " + String.valueOf(isJumpSpot()
2650  	) + " <br/> " + 
2651 		              		
2652 		              			"<b>JumpPad</b> = " + String.valueOf(isJumpPad()
2653  	) + " <br/> " + 
2654 		              		
2655 		              			"<b>JumpDest</b> = " + String.valueOf(isJumpDest()
2656  	) + " <br/> " + 
2657 		              		
2658 		              			"<b>Teleporter</b> = " + String.valueOf(isTeleporter()
2659  	) + " <br/> " + 
2660 		              		
2661 		              			"<b>Rotation</b> = " + String.valueOf(getRotation()
2662  	) + " <br/> " + 
2663 		              		
2664 		              			"<b>RoamingSpot</b> = " + String.valueOf(isRoamingSpot()
2665  	) + " <br/> " + 
2666 		              		
2667 		              			"<b>SnipingSpot</b> = " + String.valueOf(isSnipingSpot()
2668  	) + " <br/> " + 
2669 		              		
2670 		              			"<b>PreferedWeapon</b> = " + String.valueOf(getPreferedWeapon()
2671  	) + " <br/> " + 
2672 		              		
2673 				"<br/>]";     
2674 		}
2675  	
2676  		
2677  		// --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
2678         	
2679 		// --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
2680 		
2681 	    // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=base+classtype[@name=message]) ---
2682 	                
2683          	  
2684          		    
2685          		    
2686          	            		   	
2687          	  
2688          		    
2689          		    
2690          	  
2691          	/**
2692 		     * DO NOT USE THIS METHOD! Reserved for GaviaLib (Pogamut core)! It's used
2693 		     * to set correct item instance into the NavPoint.
2694 		     */  	
2695 		    public void setItemInstance(Item item) {
2696 		        this.ItemInstance = item;
2697 		        if (item != null) {
2698 		        	this.Item = item.getId();
2699 		        }
2700 		    } 	
2701 		
2702 	    // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=base+classtype[@name=message]) ---        	            	
2703  	
2704 		}
2705