summaryrefslogtreecommitdiffhomepage
path: root/main/draw.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'main/draw.cpp')
-rw-r--r--main/draw.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/main/draw.cpp b/main/draw.cpp
new file mode 100644
index 00000000..b032e2a2
--- /dev/null
+++ b/main/draw.cpp
@@ -0,0 +1,105 @@
+#include "app.hpp"
+#include "tile-defs.hpp"
+#include <Magnum/Math/Vector3.h>
+#include <Magnum/GL/DefaultFramebuffer.h>
+#include <Magnum/GL/Renderer.h>
+#include <Magnum/Trade/AbstractImporter.h>
+
+namespace floormat {
+
+void app::drawEvent() {
+#if 0
+ GL::defaultFramebuffer.clear(GL::FramebufferClear::Color | GL::FramebufferClear::Depth);
+ GL::Renderer::setDepthMask(true);
+ GL::Renderer::setDepthFunction(GL::Renderer::DepthFunction::LessOrEqual);
+ GL::Renderer::enable(GL::Renderer::Feature::DepthTest);
+#else
+ GL::defaultFramebuffer.clear(GL::FramebufferClear::Color);
+ GL::Renderer::setDepthFunction(GL::Renderer::DepthFunction::Never);
+#endif
+
+ //update_window_scale(windowSize());
+ {
+ float dt = std::min(1.f/20, timeline.previousFrameDuration());
+ update(dt);
+ }
+
+ _shader.set_tint({1, 1, 1, 1});
+ draw_chunk(_chunk);
+ draw_cursor_tile();
+ display_menu();
+
+ swapBuffers();
+ redraw();
+ timeline.nextFrame();
+}
+
+void app::draw_chunk(chunk& c)
+{
+ {
+ int minx = 0, maxx = 0, miny = 0, maxy = 0;
+ auto fn = [&](int x, int y) {
+ const auto pos = pixel_to_tile({(float)x, (float)y}) / Vector2{TILE_MAX_DIM, TILE_MAX_DIM};
+ minx = std::min(minx, (int)std::floor(pos[0]));
+ maxx = std::max(maxx, (int)(pos[0]));
+ miny = std::min(miny, (int)std::floor(pos[1]));
+ maxy = std::max(maxy, (int)(pos[1]));
+ };
+ const auto sz = windowSize();
+ const auto x = sz[0], y = sz[1];
+ fn(0, 0);
+ fn(x, 0);
+ fn(0, y);
+ fn(x, y);
+
+ printf("%d %d -> %d %d\n", minx, miny, maxx, maxy);
+ fflush(stdout);
+ printf(""); // put breakpoint here
+ }
+
+ _shader.set_tint({1, 1, 1, 1});
+ _floor_mesh.draw(_shader, c);
+ _wall_mesh.draw(_shader, c);
+}
+
+void app::draw_wireframe_quad(local_coords pt)
+{
+ constexpr float LINE_WIDTH = 1;
+
+ constexpr auto X = TILE_SIZE[0], Y = TILE_SIZE[1];
+ const Vector3 center {X*pt.x, Y*pt.y, 0};
+ _shader.set_tint({1, 0, 0, 1});
+ _wireframe_quad.draw(_shader, {center, {TILE_SIZE[0], TILE_SIZE[1]}, LINE_WIDTH});
+}
+
+void app::draw_wireframe_box(local_coords pt)
+{
+ constexpr float LINE_WIDTH = 1.5;
+
+ constexpr auto X = TILE_SIZE[0], Y = TILE_SIZE[1];
+ constexpr Vector3 size{TILE_SIZE[0], TILE_SIZE[1], TILE_SIZE[2]*1.5f};
+ const Vector3 center1{X*pt.x, Y*pt.y, 0};
+ _shader.set_tint({0, 1, 0, 1});
+ _wireframe_box.draw(_shader, {center1, size, LINE_WIDTH});
+}
+
+} // namespace floormat
+
+MAGNUM_APPLICATION_MAIN(floormat::app)
+
+#ifdef _MSC_VER
+#include <cstdlib> // for __arg{c,v}
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wmain"
+#endif
+extern "C" int __stdcall WinMain(void*, void*, void*, int);
+
+extern "C" int __stdcall WinMain(void*, void*, void*, int)
+{
+ return main(__argc, __argv);
+}
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
+#endif