X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FApplication.cpp;h=048ec263a4c56be5a779e90e793a0c6602044022;hb=4c12267c6727caa3522ac5e38b4f8c17d544ef3e;hp=cbfafd374537935625dbaad63955d4d7edacbcd6;hpb=dbc08d84d9de1a77cba0dd97e4701f4ac99d056e;p=orbi.git diff --git a/src/app/Application.cpp b/src/app/Application.cpp index cbfafd3..048ec26 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/Character.h" #include "../world/Entity.h" #include "../world/Tileset.h" #include "../world/World.h" @@ -148,15 +149,18 @@ void Application::OnKeyUp(const SDL_KeyboardEvent &e) { void Application::Update(int dt) { const float delta = dt / 1e3; - ctrl.Update(delta); + for (int i = 0; i < dt; ++i) { + ctrl.Update(1e-3); + world.Update(1e-3); + } target.Update(delta); focus = ctrl.Controlling() - ? ctrl.Controlled().bounds.Center() + ? ctrl.Controlled().vbox.Center() : target.Pos(); cam.Update(delta); - for (int i = 0; i < dt; ++i) { - world.Update(1e-3); - } + + // testing arm rotation + //dynamic_cast(*world.Entities().begin())->armAngle -= 3 * delta; } @@ -169,9 +173,13 @@ void Application::Render() { void Application::RenderBackground() { constexpr Color background(0x00, 0x00, 0x00); + constexpr Color outlineColor(0x00, 0x00, 0xFA); canvas.SetColor(background); canvas.Fill(); + + canvas.SetColor(outlineColor); + canvas.Grid(cam.ToScreen(Vector(0, 0)), cam.ToScale(world.Size()), cam.ToScale(world.TileSize())); } void Application::RenderWorld() { @@ -186,23 +194,58 @@ void Application::RenderWorld() { } void Application::RenderEntities() { - constexpr Color entityColor(0x00, 0xFA, 0x00); - canvas.SetColor(entityColor); - - for (const Entity &e : world.Entities()) { - const Vector pos(e.bounds.Left(), e.bounds.Top()); - const Vector size(e.bounds.Size()); - canvas.OutlineRect(cam.ToScreen(pos), cam.ToScale(size)); + constexpr Color boundsColor(0xFA, 0x00, 0x00); + constexpr Color vboxColor(0xFA, 0xFA, 0x00); + constexpr Color hboxColor(0x00, 0xFA, 0x00); + constexpr Color dotColor(0x00, 0xFA, 0xFA); + + for (const Entity *e : world.Entities()) { + canvas.SetColor(boundsColor); + canvas.OutlineRect( + cam.ToScreen(e->bounds.LeftTop()), + cam.ToScale(e->bounds.Size()) + ); + if (const Character *c = dynamic_cast(e)) { + if (c->orient == Entity::LOOKS_LEFT) { + canvas.OutlineRectRot( + Rect( + cam.ToScreen(c->bounds.LeftTop() + c->arm.LeftTop()), + cam.ToScale(c->arm.Size()) + ), + cam.ToScreen(c->bounds.LeftTop() + c->armOrigin), + c->armAngle + ); + //canvas.SetColor(dotColor); + //canvas.Cross(cam.ToScreen(c->bounds.LeftTop() + c->armOrigin), 5); + } else { + canvas.OutlineRectRot( + Rect( + cam.ToScreen(c->bounds.RightTop() + MirrorY(c->arm.RightTop())), + cam.ToScale(c->arm.Size()) + ), + cam.ToScreen(c->bounds.RightTop() + MirrorY(c->armOrigin)), + -c->armAngle + ); + //canvas.SetColor(dotColor); + //canvas.Cross(cam.ToScreen(c->bounds.RightTop() + MirrorY(c->armOrigin)), 5); + } + } + canvas.SetColor(vboxColor); + canvas.OutlineRect( + cam.ToScreen(e->vbox.LeftTop()), + cam.ToScale(e->vbox.Size()) + ); + canvas.SetColor(hboxColor); + canvas.OutlineRect( + cam.ToScreen(e->hbox.LeftTop()), + cam.ToScale(e->hbox.Size()) + ); } } void Application::RenderUI() { - constexpr Color outlineColor(0x00, 0x00, 0xFA); constexpr Color targetColor(0xFA, 0xFA, 0x00); - canvas.SetColor(outlineColor); - canvas.Grid(cam.ToScreen(Vector(0, 0)), cam.ToScale(world.Size()), cam.ToScale(Vector(1, 1))); - canvas.SetColor(targetColor); canvas.Cross(cam.ToScreen(target.Pos()), 15); }