X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;ds=sidebyside;f=src%2Fapp%2FApplication.cpp;h=d798b37c757f89b75aab6b41a524ed727caaa076;hb=3694504331ca888f2cacbcb841a83c402d26934a;hp=e1ac2018958cec7c0a70f67519f788ae2797b1a8;hpb=587986123da991c9d640d43f26a8c7035cd7cec5;p=gworm.git diff --git a/src/app/Application.cpp b/src/app/Application.cpp index e1ac201..d798b37 100644 --- a/src/app/Application.cpp +++ b/src/app/Application.cpp @@ -2,6 +2,7 @@ #include "../graphics/Canvas.h" #include "../graphics/Color.h" +#include "../world/Entity.h" #include "../world/World.h" #include @@ -15,7 +16,7 @@ namespace gworm { Application::Application(Canvas &c, World &w) : canvas(c) , world(w) -, focus(Vector(5, 5), 25) +, focus(Vector(250, 250), 25) , cam(c.Size(), focus.Pos()) , last(SDL_GetTicks()) , running(false) @@ -37,16 +38,28 @@ void Application::Run() { void Application::Loop(int delta) { cout << "delta: " << delta << endl << endl; + auto enter = chrono::system_clock::now(); + HandleEvents(); + auto event = chrono::system_clock::now(); + cout << " event: " << duration_cast(event - enter).count() << endl; + if (delta == 0) { SDL_Delay(1); return; } + auto update = event; if (!paused) { Update(delta); + update = chrono::system_clock::now(); + cout << " update: " << duration_cast(update - event).count() << endl; } + Render(); + auto render = chrono::system_clock::now(); + cout << " render: " << duration_cast(render - update).count() << endl; + canvas.Present(); } @@ -131,19 +144,10 @@ void Application::Update(int dt) { void Application::Render() { - auto enter = chrono::system_clock::now(); RenderBackground(); - auto background = chrono::system_clock::now(); - cout << " background: " << duration_cast(background - enter).count() << endl; RenderWorld(); - auto world = chrono::system_clock::now(); - cout << " world: " << duration_cast(world - background).count() << endl; RenderEntities(); - auto entities = chrono::system_clock::now(); - cout << " entities: " << duration_cast(entities - world).count() << endl; RenderUI(); - auto ui = chrono::system_clock::now(); - cout << " UI: " << duration_cast(ui - entities).count() << endl; } void Application::RenderBackground() { @@ -190,22 +194,33 @@ void Application::RenderWorld() { } void Application::RenderEntities() { + constexpr Color entityColor(0x00, 0xFA, 0x00); + canvas.SetColor(entityColor); + for (const Entity &e : world.Entities()) { + canvas.Cross(cam.ToScreen(e.pos), 10); + } } void Application::RenderUI() { constexpr Color focusColor(0xFA, 0xFA, 0x00); constexpr Color forceColor(0xFA, 0x00, 0x00); + constexpr Color speedColor(0x00, 0xFA, 0x00); canvas.SetColor(focusColor); canvas.Cross(cam.ToScreen(focus.Pos()), 15); - const Vector force = world.ForceAt(focus.Pos(), 1); - const Vector screenFocus = cam.ToScreen(focus.Pos()); + for (const Entity &e : world.Entities()) { + const Vector screenPos = cam.ToScreen(e.pos); + + canvas.SetColor(forceColor); + canvas.Arrow(screenPos, screenPos + Vector(e.acc * e.mass * 10.0f)); - canvas.SetColor(forceColor); - canvas.Arrow(screenFocus, screenFocus + Vector(force * 10.0f)); - cout << "force on 1kg at " << focus.Pos() << ": " << force << endl; + canvas.SetColor(speedColor); + canvas.Arrow(screenPos, screenPos + Vector(e.vel * 10.0f)); + + cout << "entity: pos " << e.pos << ", vel " << e.vel << ", acc " << e.acc << endl; + } } }