00001 #ifndef FLOCK_H 00002 #define FLOCK_H 00003 00004 #include "irrlicht.h" 00005 00006 class Boid; 00007 00009 00013 class Flock : public irr::scene::ISceneNode 00014 { 00015 public: 00016 00031 Flock(irr::IrrlichtDevice* d, 00032 irr::f32 size, 00033 const irr::c8* boidMeshFile, 00034 irr::scene::ISceneNode* parent, 00035 irr::s32 id = 0, 00036 const irr::core::vector3df& position = irr::core::vector3df(0,0,0) ); 00037 00040 ~Flock(); 00041 00045 void update(irr::u32 deltaTime); 00046 00052 Boid* addBoid(irr::core::vector3df position, const irr::c8* boidMeshFile); 00053 00058 void removeBoid(Boid* b); 00059 00063 void removeBoids(void); 00064 00066 irr::s32 getBoidCount(void); 00067 00070 virtual void OnPreRender(); 00071 00074 virtual void render(); 00075 00078 virtual const irr::core::aabbox3d<irr::f32>& getBoundingBox() const; 00079 00087 virtual irr::video::SMaterial& getMaterial(irr::s32 i); 00088 00092 virtual irr::s32 getMaterialCount(void); 00093 00096 void setScale(irr::f32 scale); 00097 00100 irr::core::list<Boid*>& getBoidList(void); 00101 00104 void setSeparationWeight(irr::s32 weight); 00105 00108 irr::s32 getSeparationWeight(void); 00109 00112 void setAlignmentWeight(irr::s32 weight); 00113 00116 irr::s32 getAlignmentWeight(void); 00117 00120 void setCohesionWeight(irr::s32 weight); 00121 00124 irr::s32 getCohesionWeight(void); 00125 00128 void setNeighborRadius(irr::s32 radius); 00129 00132 irr::s32 getNeighborRadius(void); 00133 00136 void setTarget(irr::core::vector3df target); 00137 00140 irr::core::vector3df getTarget(void); 00141 00144 void setSeekTargetWeight(irr::s32 weight); 00145 00148 irr::s32 getSeekTargetWeight(void); 00149 00152 void setTornadoWeight(irr::s32 weight); 00153 00156 irr::s32 getTornadoWeight(void); 00157 00158 protected: 00159 00160 private: 00161 00162 irr::IrrlichtDevice* device; 00163 irr::core::list<Boid*> boids; 00164 irr::core::aabbox3d<irr::f32> box; 00165 irr::video::SMaterial material; 00166 irr::s32 separationWeight; 00167 irr::s32 alignmentWeight; 00168 irr::s32 cohesionWeight; 00169 irr::s32 neighborRadius; 00170 irr::core::vector3df seekTarget; 00171 irr::s32 seekTargetWeight; 00172 irr::s32 tornadoWeight; 00173 }; 00174 00175 #endif // FLOCK_H