X-Git-Url: http://git.localhorst.tv/?p=space.git;a=blobdiff_plain;f=src%2Fentity%2FShip.h;fp=src%2Fentity%2FShip.h;h=a373302904d760597e11228c7f7753586ea2ceba;hp=a21f4b18e6855c849d0dad0351bbf600d76c3102;hb=ffd31714f3edb64ebe16b65878750c6cc5c7e884;hpb=699437a474de8b87ccb6749d44adf740e680d620 diff --git a/src/entity/Ship.h b/src/entity/Ship.h index a21f4b1..a373302 100644 --- a/src/entity/Ship.h +++ b/src/entity/Ship.h @@ -1,6 +1,7 @@ #ifndef SPACE_SHIP_H_ #define SPACE_SHIP_H_ +#include "../graphics/const.h" #include "../graphics/Vector.h" #include @@ -19,22 +20,31 @@ public: float revForce = 1; float rotForce = 1; - Vector area; - Vector pos; Vector vel; Vector Dir() const { return Vector::FromPolar(1, orient); } + float MaxFwdAcc() const { + return linForce / mass; + } + float MaxRevAcc() const { + return revForce / mass; + } + float MaxLinAcc() const { + return (linThrottle < 0 ? MaxRevAcc() : MaxFwdAcc()); + } Vector Acc() const { - float force = (linThrottle < 0 ? revForce : linForce); - return Dir() * force / mass * linThrottle; + return Dir() * MaxLinAcc() * linThrottle; } float orient = 0; float rotVel = 0; + float MaxRotAcc() const { + return rotForce / mass; + } float RotAcc() const { - return rotForce / mass * rotThrottle; + return MaxRotAcc() * rotThrottle; } float linThrottle = 0; @@ -44,6 +54,8 @@ public: void Update(float delta) { rotVel += RotAcc() * delta; orient += rotVel * delta; + while (orient < 0) orient += PI2; + while (orient > PI2) orient -= PI2; vel += Acc() * delta; pos += vel * delta; }