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=local]+classtype[@name=impl] BEGIN
13  		
14  		// --- IMPORTS FROM extra/code/java/javapart/classcategory[@name=local]+classtype[@name=impl] END
15      
16   		/**
17           *  
18              				Implementation of the local part of the GameBots2004 message CONFCH.  
19              			
20           *
21           *  <p></p><p></p>
22           *  Complete message documentation:               
23           *  
24  		Asynchronous message. Message sent when the bot configuration
25  		changed - each agent has a lot of parameters affecting his state
26  		in the environment. See each property for the details.
27  	
28           */
29   	public class ConfigChangeLocalImpl 
30    						extends
31    						ConfigChangeLocal
32  	    {
33   	
34      	
35      	
36      	/**
37      	 * Parameter-less contructor for the message.
38      	 */
39  		public ConfigChangeLocalImpl()
40  		{
41  		}
42  	
43      	
44      	
45      	
46      	/**
47  		 * Creates new instance of the message ConfigChange.
48  		 * 
49  		Asynchronous message. Message sent when the bot configuration
50  		changed - each agent has a lot of parameters affecting his state
51  		in the environment. See each property for the details.
52  	
53  		 * Corresponding GameBots message
54  		 *   (local part)
55  		 *   is
56  		 *   CONFCH.
57  		 * 
58   	  	 * 
59  		 *   
60  		 *     @param Id Id of this config message. This Id is generated from BotId, string "_CONFCH" is added at the end.
61  		 *   
62  		 * 
63  		 *   
64  		 *     @param BotId Unique Id of the bot.
65  		 *   
66  		 * 
67  		 *   
68  		 *     @param ManualSpawn 
69  			True if we have to spawn the bot manually after each death
70  		
71  		 *   
72  		 * 
73  		 *   
74  		 *     @param AutoTrace 
75  			True if the bot is using auto ray tracing (is provided with
76  			synchronous ATR messages). See ATR messages for more
77  			details.
78  		
79  		 *   
80  		 * 
81  		 *   
82  		 *     @param Name The bot's name.
83  		 *   
84  		 * 
85  		 *   
86  		 *     @param SpeedMultiplier 
87  			Bots default speed will be multiplied by this number. Ranges from 0.1 to 2 (default, can be set in ini in [GameBots2004.RemoteBot] MaxSpeed).
88  		
89  		 *   
90  		 * 
91  		 *   
92  		 *     @param RotationRate 
93  			Bot rotation rate. Default rotation rate is: (Pitch=3072,Yaw=60000,Roll=2048) and may be configured in ini file in [GameBots2004.RemoteBot] DefaultRotationRate. (pitch - up/down, yaw - left/right, roll - equivalent of doing a cartwheel)
94  		
95  		 *   
96  		 * 
97  		 *   
98  		 *     @param Invulnerable 
99  			If bot is invulnerable (cannot die) or not.
100 		
101 		 *   
102 		 * 
103 		 *   
104 		 *     @param SelfUpdateTime 
105 			The delay between two self message synchronous batches 
106 			(can range from 0.01 to 2 seconds). Will be used only if NewSelfBatchProtocol
107 			attribute is set to true in INIT message.
108 		
109 		 *   
110 		 * 
111 		 *   
112 		 *     @param VisionTime 
113 			The delay between two synchronous batches containing vision updates
114 			(can range from 0.1 to 2 seconds). If NewSelfBatchProtocol
115 			attribute is set to true in INIT message, more batch messages containing only
116 			SELF message will arrive between two vision update batches (containing PLR,PRJ,INV.. messages).
117 		
118 		 *   
119 		 * 
120 		 *   
121 		 *     @param ShowDebug 
122 			If some additional debug information will be shown in the
123 			UT2004 server console window.
124 		
125 		 *   
126 		 * 
127 		 *   
128 		 *     @param ShowFocalPoint 
129 			If true an actor visualizing the location the bot is
130 			actually looking at will appear in the game.
131 		
132 		 *   
133 		 * 
134 		 *   
135 		 *     @param DrawTraceLines 
136 			if the GB should draw lines representing the auto ray traces
137 			of the bot (for more information see ATR message).
138 		
139 		 *   
140 		 * 
141 		 *   
142 		 *     @param SynchronousOff 
143 			It informs if sending of all GB synchronous messages is
144 			enabled or disabled.
145 		
146 		 *   
147 		 * 
148 		 *   
149 		 *     @param AutoPickupOff 
150 			It enables/disables automatic pickup of the bot. If true the items can be picked up through PICK command.
151 		
152 		 *   
153 		 * 
154 		 *   
155 		 *     @param Action 
156 			Name of current BDI action.
157 		
158 		 *   
159 		 * 
160 		 */
161 		public ConfigChangeLocalImpl(
162 			UnrealId Id,  UnrealId BotId,  boolean ManualSpawn,  boolean AutoTrace,  String Name,  double SpeedMultiplier,  Rotation RotationRate,  boolean Invulnerable,  double SelfUpdateTime,  double VisionTime,  boolean ShowDebug,  boolean ShowFocalPoint,  boolean DrawTraceLines,  boolean SynchronousOff,  boolean AutoPickupOff,  String Action
163 		) {
164 			
165 					this.Id = Id;
166 				
167 					this.BotId = BotId;
168 				
169 					this.ManualSpawn = ManualSpawn;
170 				
171 					this.AutoTrace = AutoTrace;
172 				
173 					this.Name = Name;
174 				
175 					this.SpeedMultiplier = SpeedMultiplier;
176 				
177 					this.RotationRate = RotationRate;
178 				
179 					this.Invulnerable = Invulnerable;
180 				
181 					this.SelfUpdateTime = SelfUpdateTime;
182 				
183 					this.VisionTime = VisionTime;
184 				
185 					this.ShowDebug = ShowDebug;
186 				
187 					this.ShowFocalPoint = ShowFocalPoint;
188 				
189 					this.DrawTraceLines = DrawTraceLines;
190 				
191 					this.SynchronousOff = SynchronousOff;
192 				
193 					this.AutoPickupOff = AutoPickupOff;
194 				
195 					this.Action = Action;
196 				
197 		}
198     
199     	/**
200 		 * Cloning constructor from the full message.
201 		 *
202 		 * @param original
203 		 */
204 		public ConfigChangeLocalImpl(ConfigChange original) {		
205 			
206 					this.Id = original.getId()
207  	;
208 				
209 					this.BotId = original.getBotId()
210  	;
211 				
212 					this.ManualSpawn = original.isManualSpawn()
213  	;
214 				
215 					this.AutoTrace = original.isAutoTrace()
216  	;
217 				
218 					this.Name = original.getName()
219  	;
220 				
221 					this.SpeedMultiplier = original.getSpeedMultiplier()
222  	;
223 				
224 					this.RotationRate = original.getRotationRate()
225  	;
226 				
227 					this.Invulnerable = original.isInvulnerable()
228  	;
229 				
230 					this.SelfUpdateTime = original.getSelfUpdateTime()
231  	;
232 				
233 					this.VisionTime = original.getVisionTime()
234  	;
235 				
236 					this.ShowDebug = original.isShowDebug()
237  	;
238 				
239 					this.ShowFocalPoint = original.isShowFocalPoint()
240  	;
241 				
242 					this.DrawTraceLines = original.isDrawTraceLines()
243  	;
244 				
245 					this.SynchronousOff = original.isSynchronousOff()
246  	;
247 				
248 					this.AutoPickupOff = original.isAutoPickupOff()
249  	;
250 				
251 					this.Action = original.getAction()
252  	;
253 				
254 			this.SimTime = original.getSimTime();			
255 		}
256 		
257 		/**
258 		 * Cloning constructor from the full message.
259 		 *
260 		 * @param original
261 		 */
262 		public ConfigChangeLocalImpl(ConfigChangeLocalImpl original) {		
263 			
264 					this.Id = original.getId()
265  	;
266 				
267 					this.BotId = original.getBotId()
268  	;
269 				
270 					this.ManualSpawn = original.isManualSpawn()
271  	;
272 				
273 					this.AutoTrace = original.isAutoTrace()
274  	;
275 				
276 					this.Name = original.getName()
277  	;
278 				
279 					this.SpeedMultiplier = original.getSpeedMultiplier()
280  	;
281 				
282 					this.RotationRate = original.getRotationRate()
283  	;
284 				
285 					this.Invulnerable = original.isInvulnerable()
286  	;
287 				
288 					this.SelfUpdateTime = original.getSelfUpdateTime()
289  	;
290 				
291 					this.VisionTime = original.getVisionTime()
292  	;
293 				
294 					this.ShowDebug = original.isShowDebug()
295  	;
296 				
297 					this.ShowFocalPoint = original.isShowFocalPoint()
298  	;
299 				
300 					this.DrawTraceLines = original.isDrawTraceLines()
301  	;
302 				
303 					this.SynchronousOff = original.isSynchronousOff()
304  	;
305 				
306 					this.AutoPickupOff = original.isAutoPickupOff()
307  	;
308 				
309 					this.Action = original.getAction()
310  	;
311 				
312 			this.SimTime = original.getSimTime();
313 		}
314 		
315 			/**
316 			 * Cloning constructor from the message part.
317 			 *
318 			 * @param original
319 			 */
320 			public ConfigChangeLocalImpl(ConfigChangeLocal original) {
321 				
322 						this.Id = original.getId()
323  	;
324 					
325 						this.BotId = original.getBotId()
326  	;
327 					
328 						this.ManualSpawn = original.isManualSpawn()
329  	;
330 					
331 						this.AutoTrace = original.isAutoTrace()
332  	;
333 					
334 						this.Name = original.getName()
335  	;
336 					
337 						this.SpeedMultiplier = original.getSpeedMultiplier()
338  	;
339 					
340 						this.RotationRate = original.getRotationRate()
341  	;
342 					
343 						this.Invulnerable = original.isInvulnerable()
344  	;
345 					
346 						this.SelfUpdateTime = original.getSelfUpdateTime()
347  	;
348 					
349 						this.VisionTime = original.getVisionTime()
350  	;
351 					
352 						this.ShowDebug = original.isShowDebug()
353  	;
354 					
355 						this.ShowFocalPoint = original.isShowFocalPoint()
356  	;
357 					
358 						this.DrawTraceLines = original.isDrawTraceLines()
359  	;
360 					
361 						this.SynchronousOff = original.isSynchronousOff()
362  	;
363 					
364 						this.AutoPickupOff = original.isAutoPickupOff()
365  	;
366 					
367 						this.Action = original.getAction()
368  	;
369 					
370 			}
371 		
372    				
373    				@Override
374    				public void setSimTime(long SimTime) {
375 					super.setSimTime(SimTime);
376 				}
377    			
378 	    				@Override
379 	    				public 
380 	    				ConfigChangeLocalImpl clone() {
381 	    					return new 
382 	    					ConfigChangeLocalImpl(this);
383 	    				}
384 	    				
385 	    				
386     	
387 	    /**
388          * Id of this config message. This Id is generated from BotId, string "_CONFCH" is added at the end. 
389          */
390         protected
391          UnrealId Id =
392        	null;
393 	
394  		/**
395          * Id of this config message. This Id is generated from BotId, string "_CONFCH" is added at the end. 
396          */
397         public  UnrealId getId()
398  	 {
399 				    					return Id;
400 				    				}
401 				    			
402     	
403 	    /**
404          * Unique Id of the bot. 
405          */
406         protected
407          UnrealId BotId =
408        	null;
409 	
410  		/**
411          * Unique Id of the bot. 
412          */
413         public  UnrealId getBotId()
414  	 {
415 				    					return BotId;
416 				    				}
417 				    			
418     	
419 	    /**
420          * 
421 			True if we have to spawn the bot manually after each death
422 		 
423          */
424         protected
425          boolean ManualSpawn =
426        	false;
427 	
428  		/**
429          * 
430 			True if we have to spawn the bot manually after each death
431 		 
432          */
433         public  boolean isManualSpawn()
434  	 {
435 				    					return ManualSpawn;
436 				    				}
437 				    			
438     	
439 	    /**
440          * 
441 			True if the bot is using auto ray tracing (is provided with
442 			synchronous ATR messages). See ATR messages for more
443 			details.
444 		 
445          */
446         protected
447          boolean AutoTrace =
448        	false;
449 	
450  		/**
451          * 
452 			True if the bot is using auto ray tracing (is provided with
453 			synchronous ATR messages). See ATR messages for more
454 			details.
455 		 
456          */
457         public  boolean isAutoTrace()
458  	 {
459 				    					return AutoTrace;
460 				    				}
461 				    			
462     	
463 	    /**
464          * The bot's name. 
465          */
466         protected
467          String Name =
468        	null;
469 	
470  		/**
471          * The bot's name. 
472          */
473         public  String getName()
474  	 {
475 				    					return Name;
476 				    				}
477 				    			
478     	
479 	    /**
480          * 
481 			Bots default speed will be multiplied by this number. Ranges from 0.1 to 2 (default, can be set in ini in [GameBots2004.RemoteBot] MaxSpeed).
482 		 
483          */
484         protected
485          double SpeedMultiplier =
486        	0;
487 	
488  		/**
489          * 
490 			Bots default speed will be multiplied by this number. Ranges from 0.1 to 2 (default, can be set in ini in [GameBots2004.RemoteBot] MaxSpeed).
491 		 
492          */
493         public  double getSpeedMultiplier()
494  	 {
495 				    					return SpeedMultiplier;
496 				    				}
497 				    			
498     	
499 	    /**
500          * 
501 			Bot rotation rate. Default rotation rate is: (Pitch=3072,Yaw=60000,Roll=2048) and may be configured in ini file in [GameBots2004.RemoteBot] DefaultRotationRate. (pitch - up/down, yaw - left/right, roll - equivalent of doing a cartwheel)
502 		 
503          */
504         protected
505          Rotation RotationRate =
506        	null;
507 	
508  		/**
509          * 
510 			Bot rotation rate. Default rotation rate is: (Pitch=3072,Yaw=60000,Roll=2048) and may be configured in ini file in [GameBots2004.RemoteBot] DefaultRotationRate. (pitch - up/down, yaw - left/right, roll - equivalent of doing a cartwheel)
511 		 
512          */
513         public  Rotation getRotationRate()
514  	 {
515 				    					return RotationRate;
516 				    				}
517 				    			
518     	
519 	    /**
520          * 
521 			If bot is invulnerable (cannot die) or not.
522 		 
523          */
524         protected
525          boolean Invulnerable =
526        	false;
527 	
528  		/**
529          * 
530 			If bot is invulnerable (cannot die) or not.
531 		 
532          */
533         public  boolean isInvulnerable()
534  	 {
535 				    					return Invulnerable;
536 				    				}
537 				    			
538     	
539 	    /**
540          * 
541 			The delay between two self message synchronous batches 
542 			(can range from 0.01 to 2 seconds). Will be used only if NewSelfBatchProtocol
543 			attribute is set to true in INIT message.
544 		 
545          */
546         protected
547          double SelfUpdateTime =
548        	0;
549 	
550  		/**
551          * 
552 			The delay between two self message synchronous batches 
553 			(can range from 0.01 to 2 seconds). Will be used only if NewSelfBatchProtocol
554 			attribute is set to true in INIT message.
555 		 
556          */
557         public  double getSelfUpdateTime()
558  	 {
559 				    					return SelfUpdateTime;
560 				    				}
561 				    			
562     	
563 	    /**
564          * 
565 			The delay between two synchronous batches containing vision updates
566 			(can range from 0.1 to 2 seconds). If NewSelfBatchProtocol
567 			attribute is set to true in INIT message, more batch messages containing only
568 			SELF message will arrive between two vision update batches (containing PLR,PRJ,INV.. messages).
569 		 
570          */
571         protected
572          double VisionTime =
573        	0;
574 	
575  		/**
576          * 
577 			The delay between two synchronous batches containing vision updates
578 			(can range from 0.1 to 2 seconds). If NewSelfBatchProtocol
579 			attribute is set to true in INIT message, more batch messages containing only
580 			SELF message will arrive between two vision update batches (containing PLR,PRJ,INV.. messages).
581 		 
582          */
583         public  double getVisionTime()
584  	 {
585 				    					return VisionTime;
586 				    				}
587 				    			
588     	
589 	    /**
590          * 
591 			If some additional debug information will be shown in the
592 			UT2004 server console window.
593 		 
594          */
595         protected
596          boolean ShowDebug =
597        	false;
598 	
599  		/**
600          * 
601 			If some additional debug information will be shown in the
602 			UT2004 server console window.
603 		 
604          */
605         public  boolean isShowDebug()
606  	 {
607 				    					return ShowDebug;
608 				    				}
609 				    			
610     	
611 	    /**
612          * 
613 			If true an actor visualizing the location the bot is
614 			actually looking at will appear in the game.
615 		 
616          */
617         protected
618          boolean ShowFocalPoint =
619        	false;
620 	
621  		/**
622          * 
623 			If true an actor visualizing the location the bot is
624 			actually looking at will appear in the game.
625 		 
626          */
627         public  boolean isShowFocalPoint()
628  	 {
629 				    					return ShowFocalPoint;
630 				    				}
631 				    			
632     	
633 	    /**
634          * 
635 			if the GB should draw lines representing the auto ray traces
636 			of the bot (for more information see ATR message).
637 		 
638          */
639         protected
640          boolean DrawTraceLines =
641        	false;
642 	
643  		/**
644          * 
645 			if the GB should draw lines representing the auto ray traces
646 			of the bot (for more information see ATR message).
647 		 
648          */
649         public  boolean isDrawTraceLines()
650  	 {
651 				    					return DrawTraceLines;
652 				    				}
653 				    			
654     	
655 	    /**
656          * 
657 			It informs if sending of all GB synchronous messages is
658 			enabled or disabled.
659 		 
660          */
661         protected
662          boolean SynchronousOff =
663        	false;
664 	
665  		/**
666          * 
667 			It informs if sending of all GB synchronous messages is
668 			enabled or disabled.
669 		 
670          */
671         public  boolean isSynchronousOff()
672  	 {
673 				    					return SynchronousOff;
674 				    				}
675 				    			
676     	
677 	    /**
678          * 
679 			It enables/disables automatic pickup of the bot. If true the items can be picked up through PICK command.
680 		 
681          */
682         protected
683          boolean AutoPickupOff =
684        	false;
685 	
686  		/**
687          * 
688 			It enables/disables automatic pickup of the bot. If true the items can be picked up through PICK command.
689 		 
690          */
691         public  boolean isAutoPickupOff()
692  	 {
693 				    					return AutoPickupOff;
694 				    				}
695 				    			
696     	
697 	    /**
698          * 
699 			Name of current BDI action.
700 		 
701          */
702         protected
703          String Action =
704        	null;
705 	
706  		/**
707          * 
708 			Name of current BDI action.
709 		 
710          */
711         public  String getAction()
712  	 {
713 				    					return Action;
714 				    				}
715 				    			
716     	
717     	
718     	
719     	
720     	public ConfigChangeLocalImpl getLocal() {
721 			return this;
722     	}
723 		public ISharedWorldObject getShared() {
724 		 	throw new UnsupportedOperationException("Could not return LOCAL as SHARED");
725 		}
726 		public IStaticWorldObject getStatic() {
727 		    throw new UnsupportedOperationException("Could not return LOCAL as STATIC");
728 		}
729  	
730 		public static class ConfigChangeLocalUpdate
731      implements ILocalWorldObjectUpdatedEvent, IGBWorldObjectEvent
732 		{
733 			protected long time;
734 			
735 			protected ConfigChangeLocal data = null; //contains object data for this update
736 			
737 			public ConfigChangeLocalUpdate
738     (ConfigChangeLocal moverLocal, long time)
739 			{
740 				this.data = moverLocal;
741 				this.time = time;
742 			}
743 			
744 			@Override
745 			public IWorldObjectUpdateResult<ILocalWorldObject> update(
746 					ILocalWorldObject object) 
747 			{
748 				if ( object == null)
749 				{
750 					data = new ConfigChangeLocalImpl(data); //we always return Impl object
751 					return new IWorldObjectUpdateResult.WorldObjectUpdateResult<ILocalWorldObject>(IWorldObjectUpdateResult.Result.CREATED, data);
752 				}
753 				if ( object instanceof ConfigChangeLocalImpl )
754 				{
755 					ConfigChangeLocalImpl toUpdate = (ConfigChangeLocalImpl)object;
756 					
757 					boolean updated = false;
758 					
759 					// UPDATING LOCAL PROPERTIES
760 					
761 				if (!SafeEquals.equals(toUpdate.BotId, data.getBotId()
762  	)) {
763 					toUpdate.BotId=data.getBotId()
764  	;
765 					updated = true;
766 				}
767 			
768 				if (toUpdate.ManualSpawn != data.isManualSpawn()
769  	) {
770 				    toUpdate.ManualSpawn=data.isManualSpawn()
771  	;
772 					updated = true;
773 				}
774 			
775 				if (toUpdate.AutoTrace != data.isAutoTrace()
776  	) {
777 				    toUpdate.AutoTrace=data.isAutoTrace()
778  	;
779 					updated = true;
780 				}
781 			
782 				if (!SafeEquals.equals(toUpdate.Name, data.getName()
783  	)) {
784 					toUpdate.Name=data.getName()
785  	;
786 					updated = true;
787 				}
788 			
789 				if (toUpdate.SpeedMultiplier != data.getSpeedMultiplier()
790  	) {
791 				    toUpdate.SpeedMultiplier=data.getSpeedMultiplier()
792  	;
793 					updated = true;
794 				}
795 			
796 				if (!SafeEquals.equals(toUpdate.RotationRate, data.getRotationRate()
797  	)) {
798 					toUpdate.RotationRate=data.getRotationRate()
799  	;
800 					updated = true;
801 				}
802 			
803 				if (toUpdate.Invulnerable != data.isInvulnerable()
804  	) {
805 				    toUpdate.Invulnerable=data.isInvulnerable()
806  	;
807 					updated = true;
808 				}
809 			
810 				if (toUpdate.SelfUpdateTime != data.getSelfUpdateTime()
811  	) {
812 				    toUpdate.SelfUpdateTime=data.getSelfUpdateTime()
813  	;
814 					updated = true;
815 				}
816 			
817 				if (toUpdate.VisionTime != data.getVisionTime()
818  	) {
819 				    toUpdate.VisionTime=data.getVisionTime()
820  	;
821 					updated = true;
822 				}
823 			
824 				if (toUpdate.ShowDebug != data.isShowDebug()
825  	) {
826 				    toUpdate.ShowDebug=data.isShowDebug()
827  	;
828 					updated = true;
829 				}
830 			
831 				if (toUpdate.ShowFocalPoint != data.isShowFocalPoint()
832  	) {
833 				    toUpdate.ShowFocalPoint=data.isShowFocalPoint()
834  	;
835 					updated = true;
836 				}
837 			
838 				if (toUpdate.DrawTraceLines != data.isDrawTraceLines()
839  	) {
840 				    toUpdate.DrawTraceLines=data.isDrawTraceLines()
841  	;
842 					updated = true;
843 				}
844 			
845 				if (toUpdate.SynchronousOff != data.isSynchronousOff()
846  	) {
847 				    toUpdate.SynchronousOff=data.isSynchronousOff()
848  	;
849 					updated = true;
850 				}
851 			
852 				if (toUpdate.AutoPickupOff != data.isAutoPickupOff()
853  	) {
854 				    toUpdate.AutoPickupOff=data.isAutoPickupOff()
855  	;
856 					updated = true;
857 				}
858 			
859 				if (!SafeEquals.equals(toUpdate.Action, data.getAction()
860  	)) {
861 					toUpdate.Action=data.getAction()
862  	;
863 					updated = true;
864 				}
865 			
866 					
867 					data = toUpdate; //the updating has finished
868 					
869 					if ( updated )
870 					{
871 						toUpdate.SimTime = this.time;
872 						return new IWorldObjectUpdateResult.WorldObjectUpdateResult<ILocalWorldObject>(IWorldObjectUpdateResult.Result.UPDATED, data);
873 					}
874 					
875 					return new IWorldObjectUpdateResult.WorldObjectUpdateResult<ILocalWorldObject>(IWorldObjectUpdateResult.Result.SAME, data);
876 				}
877 				throw new PogamutException("Unsupported object type for update. Expected ConfigChangeLocalImpl for object " + object.getId() +", not object of class " + object.getClass().getSimpleName() + ".", this);
878 			}
879 	
880 			/**
881 			 * Simulation time in MILLI SECONDS !!!
882 			 */
883 			@Override
884 			public long getSimTime() {
885 				return this.time;
886 			}
887 	
888 			@Override
889 			public IWorldObject getObject() {
890 				return data;
891 			}
892 	
893 			@Override
894 			public WorldObjectId getId() {
895 				return data.getId();
896 			}
897 			
898 		}	
899  	
900  		
901  	    public String toString() {
902             return
903             	super.toString() + "[" +
904             	
905 		              			"Id = " + String.valueOf(getId()
906  	) + " | " + 
907 		              		
908 		              			"BotId = " + String.valueOf(getBotId()
909  	) + " | " + 
910 		              		
911 		              			"ManualSpawn = " + String.valueOf(isManualSpawn()
912  	) + " | " + 
913 		              		
914 		              			"AutoTrace = " + String.valueOf(isAutoTrace()
915  	) + " | " + 
916 		              		
917 		              			"Name = " + String.valueOf(getName()
918  	) + " | " + 
919 		              		
920 		              			"SpeedMultiplier = " + String.valueOf(getSpeedMultiplier()
921  	) + " | " + 
922 		              		
923 		              			"RotationRate = " + String.valueOf(getRotationRate()
924  	) + " | " + 
925 		              		
926 		              			"Invulnerable = " + String.valueOf(isInvulnerable()
927  	) + " | " + 
928 		              		
929 		              			"SelfUpdateTime = " + String.valueOf(getSelfUpdateTime()
930  	) + " | " + 
931 		              		
932 		              			"VisionTime = " + String.valueOf(getVisionTime()
933  	) + " | " + 
934 		              		
935 		              			"ShowDebug = " + String.valueOf(isShowDebug()
936  	) + " | " + 
937 		              		
938 		              			"ShowFocalPoint = " + String.valueOf(isShowFocalPoint()
939  	) + " | " + 
940 		              		
941 		              			"DrawTraceLines = " + String.valueOf(isDrawTraceLines()
942  	) + " | " + 
943 		              		
944 		              			"SynchronousOff = " + String.valueOf(isSynchronousOff()
945  	) + " | " + 
946 		              		
947 		              			"AutoPickupOff = " + String.valueOf(isAutoPickupOff()
948  	) + " | " + 
949 		              		
950 		              			"Action = " + String.valueOf(getAction()
951  	) + " | " + 
952 		              		
953 				"]";           		
954         }
955  	
956  		
957  		public String toHtmlString() {
958  			return super.toString() + "[<br/>" +
959             	
960 		              			"<b>Id</b> = " + String.valueOf(getId()
961  	) + " <br/> " + 
962 		              		
963 		              			"<b>BotId</b> = " + String.valueOf(getBotId()
964  	) + " <br/> " + 
965 		              		
966 		              			"<b>ManualSpawn</b> = " + String.valueOf(isManualSpawn()
967  	) + " <br/> " + 
968 		              		
969 		              			"<b>AutoTrace</b> = " + String.valueOf(isAutoTrace()
970  	) + " <br/> " + 
971 		              		
972 		              			"<b>Name</b> = " + String.valueOf(getName()
973  	) + " <br/> " + 
974 		              		
975 		              			"<b>SpeedMultiplier</b> = " + String.valueOf(getSpeedMultiplier()
976  	) + " <br/> " + 
977 		              		
978 		              			"<b>RotationRate</b> = " + String.valueOf(getRotationRate()
979  	) + " <br/> " + 
980 		              		
981 		              			"<b>Invulnerable</b> = " + String.valueOf(isInvulnerable()
982  	) + " <br/> " + 
983 		              		
984 		              			"<b>SelfUpdateTime</b> = " + String.valueOf(getSelfUpdateTime()
985  	) + " <br/> " + 
986 		              		
987 		              			"<b>VisionTime</b> = " + String.valueOf(getVisionTime()
988  	) + " <br/> " + 
989 		              		
990 		              			"<b>ShowDebug</b> = " + String.valueOf(isShowDebug()
991  	) + " <br/> " + 
992 		              		
993 		              			"<b>ShowFocalPoint</b> = " + String.valueOf(isShowFocalPoint()
994  	) + " <br/> " + 
995 		              		
996 		              			"<b>DrawTraceLines</b> = " + String.valueOf(isDrawTraceLines()
997  	) + " <br/> " + 
998 		              		
999 		              			"<b>SynchronousOff</b> = " + String.valueOf(isSynchronousOff()
1000  	) + " <br/> " + 
1001 		              		
1002 		              			"<b>AutoPickupOff</b> = " + String.valueOf(isAutoPickupOff()
1003  	) + " <br/> " + 
1004 		              		
1005 		              			"<b>Action</b> = " + String.valueOf(getAction()
1006  	) + " <br/> " + 
1007 		              		
1008 				"<br/>]";     
1009 		}
1010  	
1011  		
1012  		// --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
1013         	
1014 		// --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
1015 		
1016 	    // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=local+classtype[@name=impl]) ---
1017 	        
1018 	    // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=local+classtype[@name=impl]) ---        	            	
1019  	
1020 		}
1021