X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FApplication.cpp;h=048ec263a4c56be5a779e90e793a0c6602044022;hb=4c12267c6727caa3522ac5e38b4f8c17d544ef3e;hp=b6a08f115cc48b66d57367297380afad1b1a43a4;hpb=962405ec344818a7f6850d243feca7989ae5d41b;p=orbi.git diff --git a/src/app/Application.cpp b/src/app/Application.cpp index b6a08f1..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" @@ -154,9 +155,12 @@ void Application::Update(int dt) { } target.Update(delta); focus = ctrl.Controlling() - ? ctrl.Controlled().bounds.Center() + ? ctrl.Controlled().vbox.Center() : target.Pos(); cam.Update(delta); + + // testing arm rotation + //dynamic_cast(*world.Entities().begin())->armAngle -= 3 * delta; } @@ -175,7 +179,7 @@ void Application::RenderBackground() { canvas.Fill(); canvas.SetColor(outlineColor); - canvas.Grid(cam.ToScreen(Vector(0, 0)), cam.ToScale(world.Size()), cam.ToScale(Vector(1, 1))); + canvas.Grid(cam.ToScreen(Vector(0, 0)), cam.ToScale(world.Size()), cam.ToScale(world.TileSize())); } void Application::RenderWorld() { @@ -190,13 +194,52 @@ 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()) + ); } }