From 2fb4653f582ce986638fc646e95592751dd5cf38 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 14 Sep 2022 18:40:43 +0200 Subject: a --- anim/serialize.cpp | 3 ++- corrade | 2 +- fake-json.hpp | 30 ++++++++++++++++++++++++++++++ magnum | 2 +- magnum-integration | 2 +- magnum-plugins | 2 +- main.cpp | 35 +++++++++++++++++++++++------------ tile-shader.cpp | 6 ++++-- tile-shader.hpp | 6 +++++- 9 files changed, 68 insertions(+), 20 deletions(-) create mode 100644 fake-json.hpp diff --git a/anim/serialize.cpp b/anim/serialize.cpp index 8743f41d..b0082c3c 100644 --- a/anim/serialize.cpp +++ b/anim/serialize.cpp @@ -7,7 +7,8 @@ #include #include -#include + +#include "../fake-json.hpp" using Corrade::Utility::Error; diff --git a/corrade b/corrade index 481cdeb5..e6b4d952 160000 --- a/corrade +++ b/corrade @@ -1 +1 @@ -Subproject commit 481cdeb5e06bcd36b940203d3f88cbbe83e9d16d +Subproject commit e6b4d952e757ab99a0b67e516235b7f91904dca0 diff --git a/fake-json.hpp b/fake-json.hpp new file mode 100644 index 00000000..5965fbbc --- /dev/null +++ b/fake-json.hpp @@ -0,0 +1,30 @@ +#pragma once +#ifndef __CLION_IDE__ +# include +#else + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunknown-pragmas" +#pragma ide diagnostic ignored "NotImplementedFunctions" + +namespace nlohmann { + struct json { + template operator t() const; + const json& dump(int) const; + template json(const t&); + json(); + }; + template json& operator>>(const t&, json&); + template json& operator<<(t&, const json&); + template struct adl_serializer { + static void to_json(json&, const t&); + static void from_json(const json&, t&); + }; + template void from_json(const json&, t&); + template void to_json(const json&, const t&); +} // namespace nlohmann + +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(...) + +#pragma clang diagnostic pop +#endif diff --git a/magnum b/magnum index e8e9aeec..cd2a674e 160000 --- a/magnum +++ b/magnum @@ -1 +1 @@ -Subproject commit e8e9aeec7faee941620a39ee016cdd0df880ddfc +Subproject commit cd2a674ef29919e566b93b778ec1449e68883e8f diff --git a/magnum-integration b/magnum-integration index fa603040..2c273762 160000 --- a/magnum-integration +++ b/magnum-integration @@ -1 +1 @@ -Subproject commit fa603040834aa2346af280a707578598011c8c3d +Subproject commit 2c2737621f3f7bb17bba4e5342f68e68476a5677 diff --git a/magnum-plugins b/magnum-plugins index 2fadb319..1c9d360a 160000 --- a/magnum-plugins +++ b/magnum-plugins @@ -1 +1 @@ -Subproject commit 2fadb319fc8675347e5f949b24cf39b20ce972f5 +Subproject commit 1c9d360aa21a3788f32b2d94ad45c39841702a39 diff --git a/main.cpp b/main.cpp index e8bd09b5..83af9e24 100644 --- a/main.cpp +++ b/main.cpp @@ -27,6 +27,17 @@ namespace Magnum::Examples { +template +struct enum_bitset : std::bitset<(std::size_t)enum_type::MAX> { + static_assert(std::is_same_v>>); + static_assert(std::is_same_v>); + using std::bitset<(std::size_t)enum_type::MAX>::bitset; + constexpr bool operator[](enum_type x) const { return operator[]((std::size_t)x); } + constexpr decltype(auto) operator[](enum_type x) { + return std::bitset<(std::size_t)enum_type::MAX>::operator[]((std::size_t)x); + } +}; + struct app final : Platform::Application { using dpi_policy = Platform::Implementation::Sdl2DpiScalingPolicy; @@ -41,7 +52,7 @@ struct app final : Platform::Application void keyReleaseEvent(KeyEvent& event) override; void do_key(KeyEvent::Key k, KeyEvent::Modifiers m, bool pressed, bool repeated); - enum class key { + enum class key : int { camera_up, camera_left, camera_right, camera_down, camera_reset, quit, MAX @@ -59,7 +70,7 @@ struct app final : Platform::Application std::uint64_t time_ticks = 0, time_freq = SDL_GetPerformanceFrequency(); Vector2 camera_offset; - std::bitset<(std::size_t)key::MAX> keys{0ul}; + enum_bitset keys; float get_dt(); static constexpr Vector3 TILE_SIZE = { 50, 50, 50 }; @@ -191,21 +202,19 @@ void app::drawEvent() { void app::do_camera(float dt) { constexpr float pixels_per_second = 100; - if (keys[(int)key::camera_up]) + if (keys[key::camera_up]) camera_offset += Vector2(0, 1) * dt * pixels_per_second; - else if (keys[(int)key::camera_down]) + else if (keys[key::camera_down]) camera_offset += Vector2(0, -1) * dt * pixels_per_second; - if (keys[(int)key::camera_left]) + if (keys[key::camera_left]) camera_offset += Vector2(1, 0) * dt * pixels_per_second; - else if (keys[(int)key::camera_right]) + else if (keys[key::camera_right]) camera_offset += Vector2(-1, 0) * dt * pixels_per_second; - if (keys[(int)key::camera_reset]) - reset_camera_offset(); - if (keys[(int)key::quit]) - Platform::Sdl2Application::exit(0); - _shader.set_camera_offset(camera_offset); + + if (keys[key::camera_reset]) + reset_camera_offset(); } void app::reset_camera_offset() @@ -216,6 +225,8 @@ void app::reset_camera_offset() void app::update(float dt) { do_camera(dt); + if (keys[key::quit]) + Platform::Sdl2Application::exit(0); } void app::do_key(KeyEvent::Key k, KeyEvent::Modifiers m, bool pressed, bool repeated) @@ -239,7 +250,7 @@ void app::do_key(KeyEvent::Key k, KeyEvent::Modifiers m, bool pressed, bool repe }); if (x != key::MAX) - keys[(std::size_t)x] = pressed; + keys[x] = pressed; } float app::get_dt() diff --git a/tile-shader.cpp b/tile-shader.cpp index ec6c8751..d00a1ed9 100644 --- a/tile-shader.cpp +++ b/tile-shader.cpp @@ -42,14 +42,16 @@ tile_shader& tile_shader::set_scale(const Vector2& scale) } tile_shader& tile_shader::set_camera_offset(Vector2 camera_offset) { + CORRADE_INTERNAL_ASSERT(std::fabs(camera_offset[0]) <= std::scalbn(1.f, std::numeric_limits::digits)); + CORRADE_INTERNAL_ASSERT(std::fabs(camera_offset[1]) <= std::scalbn(1.f, std::numeric_limits::digits)); camera_offset_ = camera_offset; setUniform(OffsetUniform, camera_offset); return *this; } -Vector2 tile_shader::project(Vector3 pt) const +Vector2 tile_shader::project(Vector3 pt) { float x = pt[1], y = pt[0], z = pt[2]; - return { x-y+camera_offset_[0], (x+y+z*2)*.75f - camera_offset_[1] }; + return { x-y, (x+y+z*2)*.75f }; } } // namespace Magnum::Examples diff --git a/tile-shader.hpp b/tile-shader.hpp index f2aa169f..34348814 100644 --- a/tile-shader.hpp +++ b/tile-shader.hpp @@ -13,10 +13,14 @@ struct tile_shader : GL::AbstractShaderProgram typedef GL::Attribute<1, Vector2> TextureCoordinates; explicit tile_shader(); + Vector2 scale() const { return scale_; } - Vector2 project(Vector3 pt) const; tile_shader& set_scale(const Vector2& scale); + Vector2 camera_offset() const { return camera_offset_; } tile_shader& set_camera_offset(Vector2 camera_offset); + + static Vector2 project(Vector3 pt); + tile_shader& bindTexture(GL::Texture2D& texture); private: -- cgit v1.2.3