vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BoidsLogic.h
Go to the documentation of this file.
1 /*
2  Boids - virtualny krdel (roj, hejno) vtakov, ryb, hmyzu ...
3  Michal Pancik, 172460
4  Laborator interakci cloveka s pocitacem
5  2008
6 
7  Problematiku boidov rozpracoval Craig W. Reynolds
8  - http://www.red3d.com/cwr/
9  Uzitocne vysvetlenie a pseudokod napisal Conrad Parker
10  - http://www.metadecks.org/~conrad/boids/pseudocode.html
11  */
12 
13 #include <vrecko/Ability.h>
14 #include <vrecko/IOPins.h>
16 #include <vrecko/World.h>
17 #include <osg/Vec3>
18 #include <vector>
19 
20 using namespace vrecko;
21 
22 namespace boids {
23 
24 const float cycles_per_sec = 30.0f;
25 
26 class BoidsLogic: public Ability {
27  public:
28  BoidsLogic();
30 
31  void preInitialize(void);
32  void postInitialize(void);
33 // void processEvent(const std::string &input_name, void *value);
34  bool loadXMLParameters(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *parametersNode);
35  XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *saveXMLParameters(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *);
36  void update(void);
37 
38  protected:
39  bool rule0_in_sight(int other_boid, int boid);
40  osg::Vec3 rule1_centre_of_mass(int boid);
41  osg::Vec3 rule2_away_from_others(int boid);
42  osg::Vec3 rule3_match_velocity(int boid);
43  osg::Vec3 rule4_bound_position(int boid);
44  osg::Vec3 rule5_fly_to_waypoint(int boid);
45  osg::Vec3 rule6_fly_from_danger(int boid);
46  void limit_speed(int boid);
47  bool rest_on_land(int boid);
48 
49  std::vector<osg::Vec3> boids_position;
50  std::vector<osg::Vec3> boids_velocity;
51  std::vector<float> boids_rest_time;
52  std::vector<string> boids_position_output;
53  std::vector<string> boids_velocity_output;
54 
56  osg::Vec3 max_bound;
57  osg::Vec3 min_bound;
58  osg::Vec3 bound_velocity;
59  float move_factor;
62  float max_speed;
66  osg::Vec3 waypoint;
69  osg::Vec3 danger;
70  float land_level;
71  float takeoff_time;
72  float rest_time;
73  float sight_angle;
74 
75  std::string mesg;
76 
77  DECLARE_INPUT(Waypoint, MessageVec3);
78  DECLARE_INPUT(Danger, MessageVec3);
79  DECLARE_OUTPUT(NextWaypoint, MessageBool);
80 };
81 
82 }
83 
84