summaryrefslogtreecommitdiffstats
path: root/kue/physics.h
diff options
context:
space:
mode:
Diffstat (limited to 'kue/physics.h')
-rw-r--r--kue/physics.h76
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