ARGoS  3
A parallel, multi-engine simulator for swarm robotics
plugins/simulator/entities/light_sensor_equipped_entity.h
Go to the documentation of this file.
00001 
00007 #ifndef LIGHT_SENSOR_EQUIPPED_ENTITY_H
00008 #define LIGHT_SENSOR_EQUIPPED_ENTITY_H
00009 
00010 namespace argos {
00011    class CLightSensorEquippedEntity;
00012 }
00013 
00014 #include <argos3/core/utility/math/vector3.h>
00015 #include <argos3/core/simulator/entity/entity.h>
00016 #include <map>
00017 
00018 namespace argos {
00019 
00020    class CLightSensorEquippedEntity : public CEntity {
00021 
00022    public:
00023 
00024       ENABLE_VTABLE();
00025 
00026       struct SSensor {
00027          CVector3 Position;
00028          CVector3 Direction;
00029          SSensor(const CVector3& c_position,
00030                  const CVector3& c_direction,
00031                  Real f_range) :
00032             Position(c_position),
00033             Direction(c_direction) {
00034             Direction.Normalize();
00035             Direction *= f_range;
00036          }
00037       };
00038 
00039       typedef std::vector<SSensor*> TSensors;
00040 
00041    public:
00042 
00043       CLightSensorEquippedEntity(CComposableEntity* pc_parent);
00044 
00045       CLightSensorEquippedEntity(CComposableEntity* pc_parent,
00046                                      const std::string& str_id);
00047 
00048       virtual ~CLightSensorEquippedEntity();
00049 
00050       virtual void Init(TConfigurationNode& t_tree);
00051 
00052       virtual std::string GetTypeDescription() const {
00053          return "light_sensors";
00054       }
00055 
00056       inline size_t GetNumSensors() const {
00057          return m_tSensors.size();
00058       }
00059 
00060       inline SSensor& GetSensor(size_t un_idx) {
00061          return *m_tSensors[un_idx];
00062       }
00063 
00064       inline TSensors& GetSensors() {
00065          return m_tSensors;
00066       }
00067 
00068       void AddSensor(const CVector3& c_position,
00069                      const CVector3& c_direction,
00070                      Real f_range);
00071 
00072       void AddSensorRing(const CVector3& c_center,
00073                          Real f_radius,
00074                          const CRadians& c_start_angle,
00075                          Real f_range,
00076                          UInt32 un_num_sensors);
00077 
00078    protected:
00079 
00081       TSensors m_tSensors;
00082 
00083    };
00084 
00085 }
00086 
00087 #endif