summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-11-22 04:29:30 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-11-22 04:29:30 +0100
commitc81a7821034eba4bb7cdc1d68bade212b1aaff4d (patch)
tree22a06d59d35a95771794dea2a75a2930254f5558
parentdb35c09198d163ead63da76f22b1aa775c4a3b32 (diff)
add wall passability
-rw-r--r--serialize/wall-atlas.cpp6
-rw-r--r--src/wall-atlas.hpp2
-rw-r--r--test/json/wall-atlas-02_groups.json1
-rw-r--r--test/wall-atlas.cpp1
4 files changed, 10 insertions, 0 deletions
diff --git a/serialize/wall-atlas.cpp b/serialize/wall-atlas.cpp
index e3d8f0a9..6d711d6b 100644
--- a/serialize/wall-atlas.cpp
+++ b/serialize/wall-atlas.cpp
@@ -4,6 +4,7 @@
#include "corrade-string.hpp"
#include "compat/exception.hpp"
#include "loader/loader.hpp"
+#include "pass-mode.hpp"
#include <utility>
#include <string_view>
#include <Corrade/Containers/PairStl.h>
@@ -113,6 +114,9 @@ Direction read_direction_metadata(const json& jroot, Direction_ dir)
val.top.pixel_size = val.top.pixel_size.flipped();
+ if (jdir.contains("pass-mode"))
+ val.passability = jdir["pass-mode"];
+
return val;
}
@@ -180,6 +184,8 @@ void write_group_metadata(json& jgroup, const Group& val)
void write_direction_metadata(json& jdir, const Direction& dir)
{
+ jdir["pass-mode"] = dir.passability;
+
for (auto [s_, memfn, tag] : Direction::groups)
{
std::string_view s = {s_.data(), s_.size()};
diff --git a/src/wall-atlas.hpp b/src/wall-atlas.hpp
index d7ae5a46..6a0abf15 100644
--- a/src/wall-atlas.hpp
+++ b/src/wall-atlas.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "compat/defs.hpp"
#include "src/rotation.hpp"
+#include "src/pass-mode.hpp"
#include <array>
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/String.h>
@@ -49,6 +50,7 @@ struct Direction
Group wall, overlay, side, top;
Group corner_L, corner_R;
+ pass_mode passability = pass_mode::blocked;
static constexpr inline member_tuple groups[] = {
{ "wall"_s, &Direction::wall, Tag::wall },
diff --git a/test/json/wall-atlas-02_groups.json b/test/json/wall-atlas-02_groups.json
index 58ec0194..e3ff3fb3 100644
--- a/test/json/wall-atlas-02_groups.json
+++ b/test/json/wall-atlas-02_groups.json
@@ -20,6 +20,7 @@
"n": {
},
"w": {
+ "pass-mode": "shoot-through",
"wall": {
"default-tint": false,
"offset": 0,
diff --git a/test/wall-atlas.cpp b/test/wall-atlas.cpp
index 84b79094..7cd922ae 100644
--- a/test/wall-atlas.cpp
+++ b/test/wall-atlas.cpp
@@ -74,6 +74,7 @@ void test_read_groups(StringView filename)
fm_assert(read_direction_metadata(jroot, Direction_::S).is_empty());
const auto dir = read_direction_metadata(jroot, Direction_::W);
+ fm_assert(dir.passability == pass_mode::shoot_through);
fm_assert(dir.wall.pixel_size == Vector2ui{} );
fm_assert(dir.wall.default_tint == false );
fm_assert(dir.wall.mirrored == group_defaults.mirrored );