gears meshing, machines of gears, machines of MADNESS
[antikythera] / src / machine.h
diff --git a/src/machine.h b/src/machine.h
new file mode 100644 (file)
index 0000000..f222cd7
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef MACHINE_H_
+#define MACHINE_H_
+
+#include <vector>
+#include "gear.h"
+
+struct Motor {
+       float speed;    /* signed to denote direction, in Hz */
+       int drive;              /* which gear it drives */
+};
+
+class Machine {
+private:
+       std::vector<Gear*> gears;
+       bool **meshing;
+       bool *visited;  /* used for update_gear */
+
+       std::vector<Motor> motors;
+
+       void update_gear(int idx, float angle);
+
+public:
+       Machine();
+       ~Machine();
+
+       void add_gear(Gear *g); /* takes ownership */
+       void add_motor(int gearidx, float speed_hz);
+
+       void calc_meshing();
+
+       void update(float dt);
+       void draw() const;
+};
+
+#endif // MACHINE_H_