]> git.localhorst.tv Git - space.git/blobdiff - src/entity/Ship.h
force based movement
[space.git] / src / entity / Ship.h
index 8bcc4bcb6dfecb1f41ea4b658cfe4f6d3f0feeac..a21f4b18e6855c849d0dad0351bbf600d76c3102 100644 (file)
@@ -1,12 +1,52 @@
 #ifndef SPACE_SHIP_H_
 #define SPACE_SHIP_H_
 
+#include "../graphics/Vector.h"
+
+#include <cmath>
+
 
 namespace space {
 
 class Ship {
 
-private:
+public:
+       constexpr Ship() { }
+
+public:
+       float mass = 1;
+       float linForce = 1;
+       float revForce = 1;
+       float rotForce = 1;
+
+       Vector<int> area;
+
+       Vector<float> pos;
+       Vector<float> vel;
+       Vector<float> Dir() const {
+               return Vector<float>::FromPolar(1, orient);
+       }
+       Vector<float> Acc() const {
+               float force = (linThrottle < 0 ? revForce : linForce);
+               return Dir() * force / mass * linThrottle;
+       }
+
+       float orient = 0;
+       float rotVel = 0;
+       float RotAcc() const {
+               return rotForce / mass * rotThrottle;
+       }
+
+       float linThrottle = 0;
+       float rotThrottle = 0;
+
+public:
+       void Update(float delta) {
+               rotVel += RotAcc() * delta;
+               orient += rotVel * delta;
+               vel += Acc() * delta;
+               pos += vel * delta;
+       }
 
 };