View Javadoc

1   package cz.cuni.amis.pogamut.usar2004.communication.messages.usarinfomessages;
2   
3   import java.util.*;
4   import cz.cuni.amis.pogamut.base.communication.worldview.event.*;
5   import cz.cuni.amis.pogamut.base.communication.translator.event.*;
6   import cz.cuni.amis.pogamut.usar2004.communication.messages.*;
7   import cz.cuni.amis.pogamut.usar2004.communication.messages.datatypes.CustomTypes.*;
8   
9   /**
10   *
11   * A State message is the message class that reports the robot or mission
12   * package’s state. State message reports the robot's actual state. Please note
13   * that the robot state message parameters depend on the type of robot that you
14   * are driving. For example, a robot of type “GroundVehicle” will not have the
15   * same state message as a robot of type “AerialVehicle.” A robot state message
16   * looks like (for a ground vehicle): STA {Type string} {Time float} {FrontSteer
17   * float} {RearSteer float}{LightToggle bool} {LightIntensity int} {Battery int}
18   *
19   * Corresponding GameBots message is STA.
20   *
21   */
22  public class StateMessage extends GBEvent implements IWorldEvent, IWorldChangeEvent
23  {
24      public StateMessage(String Type, double Time, double FrontSteer, double RearSteer, double SternPlaneAngle, double RudderAngle, boolean LightToggle, int LightIntensity, int Battery)
25      {
26          this.Type = Type;
27          this.Time = Time;
28          this.FrontSteer = FrontSteer;
29          this.RearSteer = RearSteer;
30          this.SternPlaneAngle = SternPlaneAngle;
31          this.RudderAngle = RudderAngle;
32          this.LightToggle = LightToggle;
33          this.LightIntensity = LightIntensity;
34          this.Battery = Battery;
35      }
36      /**
37       * Example how the message looks like - used during parser tests.
38       */
39      public static final String PROTOTYPE = "STA {Type text} {Time 0} {FrontSteer 0} {RearSteer 0} {SternPlaneAngle 0,0,0} {RudderAngle 0} {LightToggle False} {LightIntensity 0} {Battery 0}";
40      /////// Properties BEGIN
41      /**
42       *
43       * Type describes the vehicle type. It will be one of the following values:
44       * "GroundVehicle”, “LeggedRobot”, “NauticVehicle”, or “AerialVehicle”.
45       */
46      protected String Type = null;
47  
48      /**
49       * Type will be one of the following values: "GroundVehicle”, “LeggedRobot”,
50       * “NauticVehicle”, or “AerialVehicle”.
51       *
52       * @return Returns Type of the vehicle.
53       */
54      public String getType()
55      {
56          return Type;
57      }
58      /**
59       * Timestamp form the UT since server start in seconds.
60       */
61      protected double Time = 0;
62  
63      /**
64       * Timestamp form the UT since server start in seconds.
65       *
66       * @return Returns seconds elapsed from the start of the server.
67       */
68      public double getTime()
69      {
70          return Time;
71      }
72      protected double FrontSteer = 0;
73  
74      /**
75       * Note: parameter only available for robots of “GroundVehicle” type.
76       * Current front steer angle of the robot, in radians.
77       *
78       * @return Returns front steer angle value
79       */
80      public double getFrontSteer()
81      {
82          return FrontSteer;
83      }
84      protected double RearSteer = 0;
85  
86      /**
87       * Note: parameter only available for robots of “GroundVehicle” type.
88       * Current rear steer angle of the robot, in radians.
89       *
90       * @return Returns rear steer angle value.
91       */
92      public double getRearSteer()
93      {
94          return RearSteer;
95      }
96      //protected Location SternPlaneAngle = null;
97      protected double SternPlaneAngle = 0;
98  
99      /**
100      * Note: parameter only available for robots of “NauticVehicle” type.
101      * Current stern plane angle of the robot, in radians.
102      *
103      * @return Returns sern plane angle.
104      */
105     public double getSternPlaneAngle()
106     {
107         return SternPlaneAngle;
108     }
109     protected double RudderAngle = 0;
110 
111     /**
112      * Note: parameter only available for robots of “NauticVehicle” type.
113      * Current rudder angle of the robot, in radians.
114      *
115      * @return Returns rudder angle.
116      */
117     public double getRudderAngle()
118     {
119         return RudderAngle;
120     }
121     protected boolean LightToggle = false;
122 
123     /**
124      * Indicate whether the headlight has been turned on.
125      *
126      * @return Returns wether the Headlight is on or not.
127      */
128     public boolean isLightToggle()
129     {
130         return LightToggle;
131     }
132     protected int LightIntensity = 0;
133 
134     /**
135      * Light intensity of the headlight. Right now, it always is 100.
136      *
137      * @return Returns the intensity of the Headlight.
138      */
139     public int getLightIntensity()
140     {
141         return LightIntensity;
142     }
143     protected int Battery = 0;
144 
145     /**
146      * Power state of the battery. It is the battery lifetime in second. It’s
147      * the total time remaining for the robot to run.
148      *
149      * @return Returns remaining battery life.
150      */
151     public int getBattery()
152     {
153         return Battery;
154     }
155     //added-UT2004 aerial vehicle
156     protected int View = 0;
157 
158     /**
159      * This was added for UT2004 version. Represents number of views when
160      * Multiview(Multiple Cameras) is used.
161      *
162      * @return Returns number of views if MultiView used, else -1;
163      */
164     public int getView()
165     {
166         return View;
167     }
168     //added-UT2004 kenaf
169     protected Map<String, String> PartsValues = new HashMap<String, String>();
170 
171     /**
172      * Kenaf robot uses these to describe state of its Flippers.
173      *
174      * @return Returns a map containing data about Kenafs flippers.
175      */
176     public Map<String, String> getPartsValues()
177     {
178         return PartsValues;
179     }
180 
181     /**
182      * Cloning constructor.
183      */
184     public StateMessage(StateMessage original)
185     {
186         this.Type = original.Type;
187         this.Time = original.Time;
188         this.FrontSteer = original.FrontSteer;
189         this.RearSteer = original.RearSteer;
190         this.SternPlaneAngle = original.SternPlaneAngle;
191         this.RudderAngle = original.RudderAngle;
192         this.LightToggle = original.LightToggle;
193         this.LightIntensity = original.LightIntensity;
194         this.Battery = original.Battery;
195         this.View = original.View;
196         this.PartsValues.putAll(original.PartsValues);
197     }
198 
199     /**
200      * Used by Yylex to create empty message then to fill it's protected fields
201      * (Yylex is in the same package).
202      */
203     public StateMessage()
204     {
205     }
206 
207     @Override
208     public String toString()
209     {
210         StringBuilder buf = new StringBuilder();
211         buf.append(super.toString() + " | "
212                 + "Type = "
213                 + String.valueOf(Type) + " | "
214                 + "Time = "
215                 + String.valueOf(Time) + " | "
216                 + "FrontSteer = "
217                 + String.valueOf(FrontSteer) + " | "
218                 + "RearSteer = "
219                 + String.valueOf(RearSteer) + " | "
220                 + "SternPlaneAngle = "
221                 + String.valueOf(SternPlaneAngle) + " | "
222                 + "RudderAngle = "
223                 + String.valueOf(RudderAngle) + " | "
224                 + "LightToggle = "
225                 + String.valueOf(LightToggle) + " | "
226                 + "LightIntensity = "
227                 + String.valueOf(LightIntensity) + " | "
228                 + "Battery = "
229                 + String.valueOf(Battery) + " | "
230                 + "View = "
231                 + String.valueOf(View) + " | "
232                 + "");
233         if(!PartsValues.isEmpty())
234         {
235             Iterator it = PartsValues.entrySet().iterator();
236             while(it.hasNext())
237             {
238                 Map.Entry en = (Map.Entry) it.next();
239                 buf.append(" ").append(en.getKey()).append(" ").append(en.getValue()).append(",");
240             }
241             buf.append(" | ");
242         }
243 
244         return buf.toString();
245 
246     }
247 
248     /**
249      * Gets all properties and values to create a HTML formated string;
250      *
251      * @return Returns all properties in HTML format
252      */
253     public String toHtmlString()
254     {
255         StringBuilder buf = new StringBuilder();
256         buf.append(super.toString()
257                 + "<b>Type</b> : "
258                 + String.valueOf(Type)
259                 + " <br/> "
260                 + "<b>Time</b> : "
261                 + String.valueOf(Time)
262                 + " <br/> "
263                 + "<b>FrontSteer</b> : "
264                 + String.valueOf(FrontSteer)
265                 + " <br/> "
266                 + "<b>RearSteer</b> : "
267                 + String.valueOf(RearSteer)
268                 + " <br/> "
269                 + "<b>SternPlaneAngle</b> : "
270                 + String.valueOf(SternPlaneAngle)
271                 + " <br/> "
272                 + "<b>RudderAngle</b> : "
273                 + String.valueOf(RudderAngle)
274                 + " <br/> "
275                 + "<b>LightToggle</b> : "
276                 + String.valueOf(LightToggle)
277                 + " <br/> "
278                 + "<b>LightIntensity</b> : "
279                 + String.valueOf(LightIntensity)
280                 + " <br/> "
281                 + "<b>Battery</b> : "
282                 + String.valueOf(Battery)
283                 + " <br/> "
284                 + "<b>View</b> : "
285                 + String.valueOf(View)
286                 + " <br/> "
287                 + "");
288 
289         if(!PartsValues.isEmpty())
290         {
291             Iterator it = PartsValues.entrySet().iterator();
292             while(it.hasNext())
293             {
294                 Map.Entry en = (Map.Entry) it.next();
295                 buf.append("<b>").append(en.getKey()).append("</b> : ").append(en.getValue()).append(",");
296             }
297         }
298 
299         buf.append(" <br/> ");
300         return buf.toString();
301     }
302 }