00001 #ifndef MASS_H 00002 #define MASS_H 00003 00004 #include <QVector2D> 00005 #include <QObject> 00006 #include <set> 00007 #include <Force.h> 00008 #include <Movable.h> 00009 #include <Constraint.h> 00010 #include <Node.h> 00011 00012 namespace Elve { 00013 00014 class System; 00015 00016 class Point 00017 { 00018 friend class Movable; 00019 public: 00020 Point(qreal mass,const NodeID& id, System& sys); 00021 bool moved() const; 00022 const QVector2D& pos() const; 00023 const QVector2D& speed() const; 00024 const qreal& mass() const; 00025 void setPos(const QVector2D& pos); 00026 void setSpeed(const QVector2D& speed); 00027 void setMass(qreal mass); 00028 void clearMovables(); 00029 void addMovable(Movable* m); 00030 void removeMovable(Movable* m); 00031 void addForce(Force* force); 00032 void addConstraint(Constraint* c); 00033 void clearContraints(); 00034 void removePConstraints(); 00035 void resetForce(); 00036 void computeForce(); 00037 void tick(float dt, bool update = true); 00038 void* containerData() const; 00039 void setContainerData(void* data) const; 00040 bool pinned() const; 00041 void pin(); 00042 void unpin(); 00043 void notify(); 00044 const NodeID& boundID() const; 00045 private: 00046 System& mSys; 00047 std::set<Movable*>& movables() {return mMovables;} 00048 NodeID mID; 00049 QVector2D mPos; 00050 QVector2D mSpeed; 00051 QVector2D mForce; 00052 std::set<Force*> mForces; 00053 std::set<Movable*> mMovables; 00054 std::set<Constraint*> mConstraints; 00055 qreal mM; 00056 mutable void* mContainerData; 00057 }; 00058 00059 } 00060 00061 #endif // MASS_H