struct AABB { Point mCorners[2]; AABB(const float width, const float height, const float depth); }; class Node { public: void addChild(Node &child); void drawRecursive(); virtual void draw() = 0; virtual const AABB& aabb() const = 0; Matrix& matrix(); protected: virtual ~Node() {} std::vector < Node* > mChildren; }; class Fish: public Node { public: void draw(); const AABB& aabb() const; Vector& swimDirection(); }; class Animation { public: void addFish(Fish &fish); void step() { for (std::vector < Fish* > ::iterator it = mFishes.begin(); it != mFishes.end(); ++it) { Fish *fish = (*it); // .... hier regeln anwenden .... } } protected: std::vector < Fish* > mFishes; };