summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-09-14 18:40:43 +0200
committerStanislaw Halik <sthalik@misaki.pl>2022-09-14 18:40:43 +0200
commit2fb4653f582ce986638fc646e95592751dd5cf38 (patch)
tree84a34829ded520cd6eeb11ea307ba6934bb1e2f7
parent97cfca98bde2a74257e2fa0d9112b77e4fa824f1 (diff)
a
-rw-r--r--anim/serialize.cpp3
m---------corrade0
-rw-r--r--fake-json.hpp30
m---------magnum0
m---------magnum-integration0
m---------magnum-plugins0
-rw-r--r--main.cpp35
-rw-r--r--tile-shader.cpp6
-rw-r--r--tile-shader.hpp6
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
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<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: