#include "../graphics/Canvas.h"
#include "../graphics/Color.h"
+#include "../world/Character.h"
#include "../world/Entity.h"
#include "../world/Tileset.h"
#include "../world/World.h"
? ctrl.Controlled().vbox.Center()
: target.Pos();
cam.Update(delta);
+
+ // testing arm rotation
+ //dynamic_cast<Character *>(*world.Entities().begin())->armAngle -= 3 * delta;
}
canvas.Fill();
canvas.SetColor(outlineColor);
- canvas.Grid(cam.ToScreen(Vector<int>(0, 0)), cam.ToScale(world.Size()), cam.ToScale(Vector<float>(1, 1)));
+ canvas.Grid(cam.ToScreen(Vector<int>(0, 0)), cam.ToScale(world.Size()), cam.ToScale(world.TileSize()));
}
void Application::RenderWorld() {
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()) {
+ for (const Entity *e : world.Entities()) {
canvas.SetColor(boundsColor);
canvas.OutlineRect(
- cam.ToScreen(Vector<float>(e.bounds.Left(), e.bounds.Top())),
- cam.ToScale(Vector<float>(e.bounds.Size()))
+ cam.ToScreen(e->bounds.LeftTop()),
+ cam.ToScale(e->bounds.Size())
);
+ if (const Character *c = dynamic_cast<const Character *>(e)) {
+ if (c->orient == Entity::LOOKS_LEFT) {
+ canvas.OutlineRectRot(
+ Rect<float>(
+ 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<float>(
+ 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.Line(
- cam.ToScreen(Vector<float>(e.vbox.Left(), e.vbox.Top())),
- cam.ToScreen(Vector<float>(e.vbox.Right(), e.vbox.Top()))
- );
- canvas.Line(
- cam.ToScreen(Vector<float>(e.vbox.Left(), e.vbox.Bottom())),
- cam.ToScreen(Vector<float>(e.vbox.Right(), e.vbox.Bottom()))
+ canvas.OutlineRect(
+ cam.ToScreen(e->vbox.LeftTop()),
+ cam.ToScale(e->vbox.Size())
);
canvas.SetColor(hboxColor);
- canvas.Line(
- cam.ToScreen(Vector<float>(e.hbox.Left(), e.hbox.Top())),
- cam.ToScreen(Vector<float>(e.hbox.Left(), e.hbox.Bottom()))
- );
- canvas.Line(
- cam.ToScreen(Vector<float>(e.hbox.Right(), e.hbox.Top())),
- cam.ToScreen(Vector<float>(e.hbox.Right(), e.hbox.Bottom()))
+ canvas.OutlineRect(
+ cam.ToScreen(e->hbox.LeftTop()),
+ cam.ToScale(e->hbox.Size())
);
}
}