00001 #ifndef BILLIARDPHYSICS_H 00002 #define BILLIARDPHYSICS_H 00003 00004 00005 #include <vector> 00006 #include <cassert> 00007 #include <string> 00008 #include <fstream> 00009 00010 00011 class Object; 00012 class TableBorder; 00013 class Collision; 00014 00015 00020 class BilliardPhysics 00021 { 00022 public: 00025 BilliardPhysics(); 00026 00029 ~BilliardPhysics(); 00030 00033 void add(Object * obj) 00034 { 00035 mObjects.push_back(obj); 00036 } 00037 00040 void remove(Object * obj); 00041 00044 void step(); 00045 00050 void dumpToFile(const std::string & file); 00051 00056 void loadFromFile(const std::string & file); 00057 00058 private: 00060 std::vector<Object *> mObjects; 00061 00063 TableBorder * mBorders[4]; 00064 00066 std::vector<Collision *> mCollisions; 00067 00069 float mTime; 00070 00072 std::string mLoadFile; 00073 00075 std::ifstream mInFile; 00076 00078 std::string mSaveFile; 00079 00081 std::ofstream mOutFile; 00082 00083 00086 void createCollisionList(); 00087 00091 bool willCollide(float & time, const Object * o1, const Object * o2) const; 00092 00096 bool willHitBorder(float & time, const Object * obj, const TableBorder * border) const; 00097 00103 void updateCollisionList(const std::vector<Collision *> & clsns); 00104 00107 void dumpCollisions() const; 00108 }; 00109 00110 #endif 00111