#if !defined ATS_BOID_H #define ATS_BOID_H #include #include "ats_point.h" #include "ats_leaf.h" #include "ats_BoidGroup.h" #include "ats_BoundingFrame.h" #include namespace ats { // バードロイドの各個体 -------------------------------------------------- class Boid : public Leaf3DD { private: Boid(const Boid& boid); // コピー禁止 Boid& operator=(const Boid&); // コピー禁止 protected: // 見えない壁(Boidの動く範囲) static double m_box_left, m_box_right, m_box_top, m_box_bottom, m_box_front,m_box_back; static double m_box_max, m_box_min; BoidGroup* m_parent; // 親(所属するグループ) Point3D m_center; // 現在地 Point3D m_muki; // 向き(別に単位ベクトルって訳じゃなく、ルーズ) double m_speed; // 個体のスピード Boid* m_near; // ニアミスしそうな兄弟 int m_tail_num; // 尾数 std::vector m_tail; // 尾 std::vector::iterator m_tail_itr; public: // 引数 : 範囲、範囲、尻尾数、スピード Boid(int max = 5, int max2 = 2, int tail_num = 1, double speed = 1); virtual ~Boid(); //static void SetBox(double, double, double, double, double, double); virtual void Draw() = 0; // 描画関数 virtual void UpdateTime(double time); // 時間更新 virtual void SetNear(Boid*); virtual Boid* GetNear() const; virtual bool IsNear() const; virtual void SetParent(BoidGroup*); virtual BoidGroup* GetParent() const; virtual bool IsParent() const; // どっかに所属してる? virtual Point3D GetCenter() const; virtual void SetCenter(const Point3D&); virtual Point3D GetMuki() const; virtual void SetMuki(const Point3D&); virtual void SetTailNumber(const int); virtual int GetTailNumber() const; virtual void SetSpeed(const double); virtual double GetSpeed() const; virtual Point3D GetTailPoint(int) const; // 尻尾の座標ゲット }; } #endif // ATS_BOID_H