Viewport::Viewport()
: cam()
, canv()
-, center(1.0f)
+, cursor(1.0f)
, chunk_prog()
, entity_prog()
, sprite_prog()
cam.Aspect(fw, fh);
canv.Resize(fw, fh);
- center = glm::translate(glm::vec3(fw * 0.5f, fh * 0.5f, 0.0f));
-
chunk_prog.SetProjection(Perspective());
if (active_prog == HUD) {
entity_prog.SetProjection(Ortho());
}
+void Viewport::SetCursor(const glm::vec3 &pos) {
+ cursor[3].x = pos.x;
+ cursor[3].y = pos.y;
+ cursor[3].z = pos.z;
+}
+
+void Viewport::SetCursor(const glm::vec3 &pos, Gravity grav) {
+ glm::vec2 p(align(grav, canv.Size(), glm::vec2(pos) + canv.Offset()));
+ cursor[3].x = p.x;
+ cursor[3].y = p.y;
+ cursor[3].z = pos.z;
+}
+
+void Viewport::MoveCursor(const glm::vec3 &d) {
+ cursor[3].x += d.x;
+ cursor[3].y += d.y;
+ cursor[3].z += d.z;
+}
+
+
BlockLighting &Viewport::ChunkProgram() noexcept {
if (active_prog != CHUNK) {
chunk_prog.Activate();
return entity_prog;
}
+PlainColor &Viewport::WorldOutlineProgram() noexcept {
+ if (active_prog != OUTLINE_WORLD) {
+ outline_prog.Activate();
+ outline_prog.SetVP(cam.View(), cam.Projection());
+ active_prog = OUTLINE_WORLD;
+ }
+ return outline_prog;
+}
+
+PlainColor &Viewport::HUDOutlineProgram() noexcept {
+ if (active_prog != OUTLINE_HUD) {
+ outline_prog.Activate();
+ outline_prog.SetVP(canv.View(), canv.Projection());
+ active_prog = OUTLINE_HUD;
+ }
+ return outline_prog;
+}
+
BlendedSprite &Viewport::SpriteProgram() noexcept {
if (active_prog != SPRITE) {
sprite_prog.Activate();