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