diff options
Diffstat (limited to 'kue/physics.h')
-rw-r--r-- | kue/physics.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/kue/physics.h b/kue/physics.h new file mode 100644 index 00000000..e1affc8b --- /dev/null +++ b/kue/physics.h @@ -0,0 +1,76 @@ +#ifndef _PHYSICS_H +#define _PHYSICS_H + +#include "main.h" +#include "billiard.h" +#include "pocket.h" +#include "circle.h" +#include "point.h" +#include "vector.h" + +#include <ntqptrvector.h> + +const int TIME_CHUNK = 10; + +class KuePhysics : public TQObject { + TQ_OBJECT + + public: + KuePhysics(); + ~KuePhysics(); + + // Start the physics engine + void start() { _running = true; startTimer(TIME_CHUNK); } + // Full stop + void stop() { _running = false; killTimers(); } + + bool running() { return _running; } + + // Run the physics state for a set number of milliseconds + // You should really only pass this 0, to seperate billiards on demand + // If you can think of a clever use for it, go right ahead, though + bool run(int milliseconds); + + // Inserts a billard at a specific location + void insertBilliard(unsigned int billiard, const KueBilliard &b); + + // Removes a given billiard + void removeBilliard(unsigned int billiard) { _billiards.remove(billiard); } + + // Inserts pocket at a specific location + void insertPocket(unsigned int pocket, const KuePocket &p); + + // Removes a given pocket + void removePocket(unsigned int pocket) { _pockets.remove(pocket); } + + TQPtrVector<KueBilliard> & billiards() { return _billiards; } + TQPtrVector<KuePocket> & pockets() { return _pockets; } + + double fieldWidth() { return _field_width; } + double fieldHeight() { return _field_height; } + + void setFieldWidth(double field_width) { _field_width = field_width; } + void setFieldHeight(double field_height) { _field_height = field_height; } + + signals: + void billiardHit(unsigned int b1, unsigned int b2); + void billiardSunk(unsigned int b, unsigned int p); + void motionStopped(); + + protected: + void doPocketing(); + void timerEvent ( TQTimerEvent * ); + + bool _running; + void seperate(KueBilliard *a, KueBilliard *b); + + bool allStop(); + + TQPtrVector<KueBilliard> _billiards; + TQPtrVector<KuePocket> _pockets; + + double _field_width; + double _field_height; +}; + +#endif |