X-Git-Url: http://git.localhorst.tv/?p=space.git;a=blobdiff_plain;f=src%2Fentity%2FShip.h;fp=src%2Fentity%2FShip.h;h=a21f4b18e6855c849d0dad0351bbf600d76c3102;hp=8bcc4bcb6dfecb1f41ea4b658cfe4f6d3f0feeac;hb=699437a474de8b87ccb6749d44adf740e680d620;hpb=1129b8ac89f1e614f69793227ccec90157708aea diff --git a/src/entity/Ship.h b/src/entity/Ship.h index 8bcc4bc..a21f4b1 100644 --- a/src/entity/Ship.h +++ b/src/entity/Ship.h @@ -1,12 +1,52 @@ #ifndef SPACE_SHIP_H_ #define SPACE_SHIP_H_ +#include "../graphics/Vector.h" + +#include + namespace space { class Ship { -private: +public: + constexpr Ship() { } + +public: + float mass = 1; + float linForce = 1; + float revForce = 1; + float rotForce = 1; + + Vector area; + + Vector pos; + Vector vel; + Vector Dir() const { + return Vector::FromPolar(1, orient); + } + Vector 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; + } };