ARGoS  3
A parallel, multi-engine simulator for swarm robotics
plugins/simulator/entities/rab_equipped_entity.h
Go to the documentation of this file.
00001 
00007 #ifndef RAB_EQUIPPED_ENTITY_H
00008 #define RAB_EQUIPPED_ENTITY_H
00009 
00010 namespace argos {
00011    class CRABEquippedEntity;
00012 }
00013 
00014 #include <argos3/core/utility/datatypes/byte_array.h>
00015 #include <argos3/core/utility/datatypes/set.h>
00016 #include <argos3/core/simulator/entity/embodied_entity.h>
00017 #include <argos3/core/utility/math/vector3.h>
00018 #include <argos3/core/simulator/space/positional_indices/space_hash.h>
00019 #include <argos3/core/simulator/space/positional_indices/grid.h>
00020 
00021 namespace argos {
00022 
00023    class CRABEquippedEntity : public CPositionalEntity {
00024 
00025    public:
00026 
00027       ENABLE_VTABLE();
00028 
00029       typedef std::vector<CRABEquippedEntity*> TVector;
00030       typedef CSet<CRABEquippedEntity*> TSet;
00031 
00032    public:
00033 
00034       CRABEquippedEntity(CComposableEntity* pc_parent);
00035 
00036       CRABEquippedEntity(CComposableEntity* pc_parent,
00037                          const std::string& str_id,
00038                          size_t un_msg_size,
00039                          Real f_range,
00040                          CEmbodiedEntity& c_reference,
00041                          const CVector3& c_position = CVector3(),
00042                          const CQuaternion& c_orientation = CQuaternion());
00043 
00044       virtual void Init(TConfigurationNode& t_tree);
00045 
00046       virtual ~CRABEquippedEntity() {}
00047 
00048       virtual void Reset();
00049 
00050       virtual void Update();
00051 
00052       inline size_t GetMsgSize() const {
00053          return m_cData.Size();
00054       }
00055 
00056       inline CByteArray& GetData() {
00057          return m_cData;
00058       }
00059 
00060       void SetData(const CByteArray& c_data);
00061 
00062       void ClearData();
00063 
00064       inline Real GetRange() const {
00065          return m_fRange;
00066       }
00067 
00068       inline CEmbodiedEntity& GetReference() {
00069          return *m_pcReference;
00070       }
00071 
00072       virtual std::string GetTypeDescription() const {
00073          return "rab";
00074       }
00075 
00076    protected:
00077 
00078       CEmbodiedEntity* m_pcReference;
00079       CVector3 m_cPosOffset;
00080       CQuaternion m_cRotOffset;
00081       CByteArray m_cData;
00082       Real m_fRange;
00083 
00084    };
00085 
00086    /****************************************/
00087    /****************************************/
00088 
00089    class CRABEquippedEntitySpaceHashUpdater : public CSpaceHashUpdater<CRABEquippedEntity> {
00090 
00091    public:
00092 
00093       virtual void operator()(CAbstractSpaceHash<CRABEquippedEntity>& c_space_hash,
00094                               CRABEquippedEntity& c_element);
00095 
00096    private:
00097 
00098       SInt32 m_nCenterI, m_nCenterJ, m_nCenterK;
00099 
00100    };
00101 
00102    /****************************************/
00103    /****************************************/
00104 
00105    class CRABEquippedEntityGridCellUpdater : public CGrid<CRABEquippedEntity>::CCellOperation {
00106 
00107    public:
00108 
00109       CRABEquippedEntityGridCellUpdater(CGrid<CRABEquippedEntity>& c_grid);
00110 
00111       virtual bool operator()(SInt32 n_i,
00112                               SInt32 n_j,
00113                               SInt32 n_k,
00114                               CGrid<CRABEquippedEntity>::SCell& s_cell);
00115 
00116       void SetEntity(CRABEquippedEntity& c_entity);
00117 
00118    private:
00119 
00120       CGrid<CRABEquippedEntity>& m_cGrid;
00121       CRABEquippedEntity* m_pcEntity;
00122    };
00123 
00124    class CRABEquippedEntityGridEntityUpdater : public CGrid<CRABEquippedEntity>::COperation {
00125 
00126    public:
00127 
00128       CRABEquippedEntityGridEntityUpdater(CGrid<CRABEquippedEntity>& c_grid);
00129       virtual bool operator()(CRABEquippedEntity& c_entity);
00130 
00131    private:
00132 
00133       CGrid<CRABEquippedEntity>& m_cGrid;
00134       CRABEquippedEntityGridCellUpdater m_cCellUpdater;
00135    };
00136 
00137    /****************************************/
00138    /****************************************/
00139 
00140 }
00141 
00142 #endif