diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2022-09-14 18:40:43 +0200 |
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-09-14 18:40:43 +0200 |
| commit | 2fb4653f582ce986638fc646e95592751dd5cf38 (patch) | |
| tree | 84a34829ded520cd6eeb11ea307ba6934bb1e2f7 | |
| parent | 97cfca98bde2a74257e2fa0d9112b77e4fa824f1 (diff) | |
a
| -rw-r--r-- | anim/serialize.cpp | 3 | ||||
| m--------- | corrade | 0 | ||||
| -rw-r--r-- | fake-json.hpp | 30 | ||||
| m--------- | magnum | 0 | ||||
| m--------- | magnum-integration | 0 | ||||
| m--------- | magnum-plugins | 0 | ||||
| -rw-r--r-- | main.cpp | 35 | ||||
| -rw-r--r-- | tile-shader.cpp | 6 | ||||
| -rw-r--r-- | tile-shader.hpp | 6 |
9 files changed, 64 insertions, 16 deletions
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 <Corrade/Utility/Debug.h> #include <Corrade/Utility/DebugStl.h> -#include <nlohmann/json.hpp> + +#include "../fake-json.hpp" using Corrade::Utility::Error; diff --git a/corrade b/corrade -Subproject 481cdeb5e06bcd36b940203d3f88cbbe83e9d16 +Subproject e6b4d952e757ab99a0b67e516235b7f91904dca 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 <nlohmann/json.hpp> +#else + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunknown-pragmas" +#pragma ide diagnostic ignored "NotImplementedFunctions" + +namespace nlohmann { + struct json { + template<typename t> operator t() const; + const json& dump(int) const; + template<typename t> json(const t&); + json(); + }; + template<typename t> json& operator>>(const t&, json&); + template<typename t> json& operator<<(t&, const json&); + template<typename t> struct adl_serializer { + static void to_json(json&, const t&); + static void from_json(const json&, t&); + }; + template<typename t> void from_json(const json&, t&); + template<typename t> 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 -Subproject e8e9aeec7faee941620a39ee016cdd0df880ddf +Subproject cd2a674ef29919e566b93b778ec1449e68883e8 diff --git a/magnum-integration b/magnum-integration -Subproject fa603040834aa2346af280a707578598011c8c3 +Subproject 2c2737621f3f7bb17bba4e5342f68e68476a567 diff --git a/magnum-plugins b/magnum-plugins -Subproject 2fadb319fc8675347e5f949b24cf39b20ce972f +Subproject 1c9d360aa21a3788f32b2d94ad45c39841702a3 @@ -27,6 +27,17 @@ namespace Magnum::Examples { +template<typename enum_type> +struct enum_bitset : std::bitset<(std::size_t)enum_type::MAX> { + static_assert(std::is_same_v<std::size_t, std::common_type_t<std::size_t, std::underlying_type_t<enum_type>>>); + static_assert(std::is_same_v<enum_type, std::decay_t<enum_type>>); + 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<key> 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<float>::digits)); + CORRADE_INTERNAL_ASSERT(std::fabs(camera_offset[1]) <= std::scalbn(1.f, std::numeric_limits<float>::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: |
