april  1.0.0
...
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
actor.h
Go to the documentation of this file.
1 /* ========================================================================= */
2 /* ------------------------------------------------------------------------- *//*
12 
13 
14  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15  Please read COPYING and README files in root folder
16  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17 */
18 /* ------------------------------------------------------------------------- */
19 /* ========================================================================= */
20 #ifndef __ACTOR_INC__
21 #define __ACTOR_INC__
22 //
23 //
24 //
25 //
26 /* INCLUDES ------------------------------------------------------------ */
27 
28 #include <april/april.h>
29 #include <april/logic/component.h>
30 #include <april/logic/dna.h>
31 
32 /* INCLUDES ============================================================ */
33 //
34 //
35 //
36 //
37 /* DEFINITIONS --------------------------------------------------------- */
38 
39 namespace april {
40 
41 class World;
42 class Sensor;
43 class Actuator;
44 class Brain;
45 class Actor;
46 class Reflex;
47 class Director;
48 
49 /* DEFINITIONS ========================================================= */
50 //
51 //
52 //
53 //
54 /* CLASS --------------------------------------------------------------- */
55 
78 class
80  Actor : public Component {
81  BBM_TRACK( Actor );
82 
83  //
84  //
85  //
86  //
87  /* DEFINITIONS ----------------------------------------------------- */
88 
89  friend class Director;
90  friend class Sensor;
91  friend class Actuator;
92  friend class World;
93  friend class Reflex;
94  friend class Brain;
95  friend class ActorFactory;
96 
97  /* DEFINITIONS ===================================================== */
98  //
99  //
100  //
101  //
102  /* DATA ------------------------------------------------------------ */
103 
104 private:
105 
107  World * world_;
108 
110  List2Dh sensors_;
111 
113  List2Dh actuators_;
114 
116  List2Dh reflexes_;
117 
119  List2Dh brains_;
120 
122  DNA dna_;
123 
125  ID kind_;
126 
128  quint64 birth_;
129 
131  quint64 death_;
132 
134  quint64 age_;
135 
137  quint64 energy_;
138 
140 
143  quint64 cost_;
144 
146  bool alive_;
147 
148 
149 
150 
151  /* DATA ============================================================ */
152  //
153  //
154  //
155  //
156  /* FUNCTIONS ------------------------------------------------------- */
157 
158 public:
159 
160 
165  Actor ( World * w );
166 
168  Q_REQUIRED_RESULT
169  static Actor * fromStg ( World * w, QSettings & s );
170 
171 protected:
172 
176  virtual ~Actor ( void );
177 
178 public:
179 
181  virtual bool save ( QSettings & s ) const;
182 
184  virtual bool load ( QSettings & s );
185 
187  virtual ID identificator ( void ) const
188  { return kind(); }
189 
191  virtual Factory * factory ( void ) const;
192 
193 protected:
194 
196 
200  void killMe ( void );
201 
202 
203  /* OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO */
206 
207 
208 public:
209 
211  Sensor * firstSensor ( void ) const;
212 
214  Actuator * firstActuator ( void ) const;
215 
217  Reflex * firstReflex ( void ) const;
218 
220  Brain * firstBrain ( void ) const;
221 
223  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
224 
225 
226  /* OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO */
229 
230 
231 public:
232 
234  Sensor * findSensor ( ID id ) const;
235 
237  Actuator * findActuator ( ID id ) const;
238 
240  Reflex * findReflex ( ID id ) const;
241 
243  Brain * findBrain ( ID id ) const;
244 
246  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
247 
248 
249  /* OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO */
252 
253 
254 public:
255 
257  inline World * world ( void ) const
258  { return world_; }
259 
261  inline ID kind ( void ) const
262  { return kind_; }
263 
265  QString kindName ( void ) const;
266 
268  const DNA & dna ( void ) const
269  { return dna_; }
270 
272  inline quint64 birth ( void ) const
273  { return birth_; }
274 
276  inline quint64 death ( void ) const
277  { return death_; }
278 
280  inline quint64 age ( void ) const
281  { return age_; }
282 
284  inline quint64 toLive ( void ) const
285  { return death_-birth_; }
286 
288  quint64 energy ( void ) const
289  { return energy_; }
290 
292  quint64 totalEnergy ( void ) const;
293 
295  quint64 cost ( void ) const
296  { return cost_; }
297 
299  bool isAlive ( void ) const
300  { return alive_; }
301 
303  inline bool dies ( void ) const
304  { return (birth_+age_ >= death_); }
305 
307  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
308 
309 
310  /* OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO */
313 
314 
315 protected:
316 
318  inline void setDNA ( const DNA & src )
319  { dna_ = src; }
320 
322  bool decodeDNA ( void );
323 
325  bool addActuator ( Actuator * act );
326 
328  bool addSensor ( Sensor * act );
329 
331  bool addReflex ( Reflex * act );
332 
334  bool addBrain ( Brain * act );
335 
337  bool remActuator ( Actuator * act );
338 
340  bool remSensor ( Sensor * act );
341 
343  bool remReflex ( Reflex * act );
344 
346  bool remBrain ( Brain * act );
347 
349  void doSteps ( int steps = 1 );
350 
352  void makeAlive ( void );
353 
355  void setEnergy ( quint64 new_val )
356  { energy_ = new_val; }
357 
359  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
360 
361 
362  /* FUNCTIONS ======================================================= */
363  //
364  //
365  //
366  //
367 
368 }; /* class Actor */
369 
370 /* CLASS =============================================================== */
371 //
372 //
373 //
374 //
375 
376 } // namespace april
377 
378 #endif // __ACTOR_INC__
379 /* ------------------------------------------------------------------------- */
380 /* ========================================================================= */