]> git.localhorst.tv Git - space.git/blobdiff - src/app/Application.cpp
force based movement
[space.git] / src / app / Application.cpp
index 488b952243b94880e12886185d0b612080466b81..5820c57ba3eb10aeea807893f3f384a7bc5438a9 100644 (file)
@@ -13,7 +13,7 @@ Application::Application(Canvas &c)
 , cam(c.Size(), focus.Pos())
 , last(SDL_GetTicks())
 , running(false) {
-       controlled = univ.AddEntity(Entity());
+       controlled = univ.AddShip(Ship());
 }
 
 
@@ -142,7 +142,8 @@ void Application::OnKeyUp(const SDL_KeyboardEvent &e) {
 
 void Application::Update(int dt) {
        const float delta = dt / 1e3;
-       controlled->acc = Vector<float>(control * 10);
+       controlled->rotThrottle = control.x;
+       controlled->linThrottle = -control.y;
        cam.Update(delta);
        univ.Update(delta);
        focus.SetSpeed(500 / cam.Zoom());
@@ -172,10 +173,14 @@ void Application::Render() {
        canvas.Cross(cam.ToScreen(focus.Pos()), 15);
 
        canvas.SetColor(entityColor);
-       for (const Entity &e : univ.Entities()) {
-               canvas.Cross(
-                       cam.ToScreen(Vector<float>(e.area * univ.areaSize) + e.pos),
-                       10);
+       for (const Ship &s : univ.Ships()) {
+               const Vector<float> direction = s.Dir();
+               const Vector<int> position = cam.ToScreen(Vector<float>(s.area * univ.areaSize) + s.pos);
+               const Vector<int> nose = position + Vector<int>(direction * 15.0f);
+               const Vector<int> left = position + Vector<int>((Rotate90(direction) * 8.0f) - (direction * 4.0f));
+               const Vector<int> right = position + Vector<int>((Rotate270(direction) * 8.0f) - (direction * 4.0f));
+               canvas.Line(position, nose);
+               canvas.Quad(nose, left, position, right);
        }
 }