ARGoS
3
A parallel, multi-engine simulator for swarm robotics
|
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