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=abstract] BEGIN
13  		
14  		// --- IMPORTS FROM extra/code/java/javapart/classcategory[@name=base]+classtype[@name=abstract] END
15      
16   		/**
17           *  
18              				Abstract definition of the GameBots2004 message BOM.  
19              			
20           *
21           *  <p></p><p></p>
22           *  Complete message documentation:               
23           *  
24  		Synchronous message. BombInfo contains all info about the bomb
25  		in the BotBombingRun game mode. Is not sent in other game types.
26  	
27           */
28   	public abstract class BombInfo   
29    				extends 
30    				InfoMessage
31    						implements IWorldEvent, IWorldChangeEvent, ICompositeWorldObject
32    						
33  	    		,IGBViewable
34  	    {
35   	
36      	/** Example how the message looks like - used during parser tests. */
37      	public static final String PROTOTYPE =
38      		"BOM {Id unreal_id}  {Velocity 0,0,0}  {Location 0,0,0}  {Holder unreal_id}  {HolderTeam 0}  {Visible False}  {State text} ";
39      
40      	
41      	
42      	/**
43      	 * Parameter-less contructor for the message.
44      	 */
45  		public BombInfo()
46  		{
47  		}
48  	
49  				// abstract message, it does not have any more constructors				
50  			
51  	   		
52  			protected long SimTime;
53  				
54  			/**
55  			 * Simulation time in MILLI SECONDS !!!
56  			 */	
57  			@Override
58  			public long getSimTime() {
59  				return SimTime;
60  			}
61  						
62  			/**
63  			 * Used by Yylex to slip correct time of the object or programmatically.
64  			 */
65  			protected void setSimTime(long SimTime) {
66  				this.SimTime = SimTime;
67  			}
68  	   	
69   		/**
70           * 
71  			An unique Id for this bomb, assigned by the game.
72  		 
73           */
74          public abstract UnrealId getId()
75   	;
76  		    			
77   		/**
78           * 
79     		Current velocity of the bomb. TODO not sure if this actually does smthing
80     	 
81           */
82          public abstract Velocity getVelocity()
83   	;
84  		    			
85   		/**
86           * 
87  			An absolute location of the bomb (Sent if we can actually
88  			see the flag).
89  		 
90           */
91          public abstract Location getLocation()
92   	;
93  		    			
94   		/**
95           * 
96  			Id of player/bot holding the bomb. (Sent if we can actually
97  			see the bomb and the bomb is being carried, or if the bomb
98  			is being carried by us).
99  		 
100          */
101         public abstract UnrealId getHolder()
102  	;
103 		    			
104  		/**
105          * 
106 			The team of the current holder (if any).
107 		 
108          */
109         public abstract Integer getHolderTeam()
110  	;
111 		    			
112  		/**
113          * True if the bot can see the bomb. 
114          */
115         public abstract boolean isVisible()
116  	;
117 		    			
118  		/**
119          * 
120 			Represents the state the bomb is in. Can be "Held",
121 			"Dropped" or "Home".
122 		 
123          */
124         public abstract String getState()
125  	;
126 		    			
127 		 	@Override
128 			public IWorldObjectUpdatedEvent createDisappearEvent() {
129 				return new ObjectDisappeared(this, getSimTime());
130 			}
131 			
132 			public static class ObjectDisappeared implements IWorldObjectUpdatedEvent
133 			{
134 				
135 				public ObjectDisappeared(BombInfo obj, long time) {
136 					this.obj = obj;
137 					this.time = time;
138 				}
139 				
140 				private BombInfo obj;
141 				private long time;
142 		
143 				@Override
144 				public WorldObjectId getId() {
145 					return obj.getId();
146 				}
147 		
148 		        /**
149 		         * Simulation time in MILLI SECONDS !!!
150 		         */
151 				@Override
152 				public long getSimTime() {
153 					return time;
154 				}
155 		
156 				@Override
157 				public IWorldObjectUpdateResult<IWorldObject> update(IWorldObject obj) {
158 					if (obj == null) {
159 						throw new PogamutException("Can't 'disappear' null!", this);
160 					}
161 					if (!(obj instanceof BombInfoMessage)) {
162 						throw new PogamutException("Can't update different class than BombInfoMessage, got class " + obj.getClass().getSimpleName() + "!", this);
163 					}
164 					BombInfoMessage toUpdate = (BombInfoMessage)obj;
165 					if (toUpdate.Visible) {
166 						toUpdate.Visible = false;
167 						return new IWorldObjectUpdateResult.WorldObjectUpdateResult(IWorldObjectUpdateResult.Result.UPDATED, obj);
168 					} else {
169 						return new IWorldObjectUpdateResult.WorldObjectUpdateResult(IWorldObjectUpdateResult.Result.SAME, obj);
170 					}
171 				}
172 		
173 			}
174 	
175 		
176     	
177     	public static class BombInfoUpdate
178      extends GBObjectUpdate implements ICompositeWorldObjectUpdatedEvent, IGBWorldObjectEvent {	
179 			private BombInfo object;
180 			private long time;
181 			private ITeamId teamId;
182 			
183 			public BombInfoUpdate
184     (BombInfo source, long eventTime, ITeamId teamId) {
185 				this.object = source;
186 				this.time = eventTime;
187 				this.teamId = teamId;
188 			}
189 			
190 			/**
191 			 * Simulation time in MILLI SECONDS !!!
192 			 */ 
193 			@Override
194 			public long getSimTime() {
195 				return time;
196 			}
197 	
198 			@Override
199 			public IWorldObject getObject() {
200 				return object;
201 			}
202 	
203 			@Override
204 			public WorldObjectId getId() {
205 				return object.getId();
206 			}
207 	
208 			@Override
209 			public ILocalWorldObjectUpdatedEvent getLocalEvent() {
210 				return new BombInfoLocalImpl.BombInfoLocalUpdate
211     ((BombInfoLocal)object.getLocal(), time);
212 			}
213 	
214 			@Override
215 			public ISharedWorldObjectUpdatedEvent getSharedEvent() {
216 				return new BombInfoSharedImpl.BombInfoSharedUpdate
217     ((BombInfoShared)object.getShared(), time, teamId);
218 			}
219 	
220 			@Override
221 			public IStaticWorldObjectUpdatedEvent getStaticEvent() {
222 				return new BombInfoStaticImpl.BombInfoStaticUpdate
223     ((BombInfoStatic)object.getStatic(), time);
224 			}
225 			
226 		}
227     
228  		
229  	    public String toString() {
230             return
231             	super.toString() + "[" +
232             	
233 		              			"Id = " + String.valueOf(getId()
234  	) + " | " + 
235 		              		
236 		              			"Velocity = " + String.valueOf(getVelocity()
237  	) + " | " + 
238 		              		
239 		              			"Location = " + String.valueOf(getLocation()
240  	) + " | " + 
241 		              		
242 		              			"Holder = " + String.valueOf(getHolder()
243  	) + " | " + 
244 		              		
245 		              			"HolderTeam = " + String.valueOf(getHolderTeam()
246  	) + " | " + 
247 		              		
248 		              			"Visible = " + String.valueOf(isVisible()
249  	) + " | " + 
250 		              		
251 		              			"State = " + String.valueOf(getState()
252  	) + " | " + 
253 		              		
254 				"]";           		
255         }
256  	
257  		
258  		public String toHtmlString() {
259  			return super.toString() + "[<br/>" +
260             	
261 		              			"<b>Id</b> = " + String.valueOf(getId()
262  	) + " <br/> " + 
263 		              		
264 		              			"<b>Velocity</b> = " + String.valueOf(getVelocity()
265  	) + " <br/> " + 
266 		              		
267 		              			"<b>Location</b> = " + String.valueOf(getLocation()
268  	) + " <br/> " + 
269 		              		
270 		              			"<b>Holder</b> = " + String.valueOf(getHolder()
271  	) + " <br/> " + 
272 		              		
273 		              			"<b>HolderTeam</b> = " + String.valueOf(getHolderTeam()
274  	) + " <br/> " + 
275 		              		
276 		              			"<b>Visible</b> = " + String.valueOf(isVisible()
277  	) + " <br/> " + 
278 		              		
279 		              			"<b>State</b> = " + String.valueOf(getState()
280  	) + " <br/> " + 
281 		              		
282 				"<br/>]";     
283 		}
284  	 
285  	    public String toJsonLiteral() {
286             return "BombInfo(null, "
287             		
288                    + ")";
289         }
290  	
291  		
292  		// --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=all]) ---
293         	
294 		// --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=all]) ---
295 		
296 	    // --- Extra Java from XML BEGIN (extra/code/java/javapart/classcategory[@name=base+classtype[@name=abstract]) ---
297 	        
298 	    // --- Extra Java from XML END (extra/code/java/javapart/classcategory[@name=base+classtype[@name=abstract]) ---        	            	
299  	
300 		}
301