summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-01-23 17:11:51 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-01-23 17:11:51 +0100
commit23afbcb7b32be0d3d64a6931a1f03034a4d62e1a (patch)
tree88241274ad31748e34fc6d2bcd6fbf296f0d69a1
parent13e14ce288ce62b37f6bf5b587979a93a29ec2f8 (diff)
a
-rw-r--r--serialize/scenery.cpp19
-rw-r--r--src/scenery.cpp1
-rw-r--r--src/scenery.hpp7
3 files changed, 10 insertions, 17 deletions
diff --git a/serialize/scenery.cpp b/serialize/scenery.cpp
index 158b4773..b51fac74 100644
--- a/serialize/scenery.cpp
+++ b/serialize/scenery.cpp
@@ -128,9 +128,6 @@ void adl_serializer<scenery_proto>::from_json(const json& j, scenery_proto& f)
value = j[s];
};
- const generic_scenery_proto G;
- const door_scenery_proto D;
-
StringView atlas_name = j["atlas-name"];
fm_soft_assert(!atlas_name.isEmpty());
f = {};
@@ -139,8 +136,6 @@ void adl_serializer<scenery_proto>::from_json(const json& j, scenery_proto& f)
auto frame = f.frame; get("frame", frame);
auto r = f.atlas->first_rotation(); get("rotation", r);
pass_mode pass = f.pass; get("pass-mode", pass);
- bool active = G.active; get("active", active);
- bool interactive = G.interactive; get("interactive", interactive);
auto offset = Vector2i(f.offset); get("offset", offset);
auto bbox_offset = Vector2i(f.bbox_offset); get("bbox-offset", bbox_offset);
auto bbox_size = Vector2ui(f.bbox_size); get("bbox-size", bbox_size);
@@ -153,32 +148,34 @@ void adl_serializer<scenery_proto>::from_json(const json& j, scenery_proto& f)
default:
fm_throw("unhandled scenery type '{}'"_cf, (unsigned)type);
case scenery_type::generic: {
- auto s = generic_scenery_proto{};
+ constexpr generic_scenery_proto G;
+ auto s = G;
f.type = object_type::scenery;
f.r = r;
f.frame = frame;
f.pass = pass;
- s.active = active;
- s.interactive = interactive;
f.offset = Vector2b(offset);
f.bbox_offset = Vector2b(bbox_offset);
f.bbox_size = Vector2ub(bbox_size);
+ { bool interactive = G.interactive; get("interactive", interactive); s.interactive = interactive; }
+ { bool active = G.active; get("active", active); s.active = active; }
f.subtype = s;
break;
}
case scenery_type::door: {
fm_assert(f.atlas->info().fps > 0 && f.atlas->info().nframes > 0);
- auto s = door_scenery_proto{};
+ constexpr door_scenery_proto D;
+ auto s = D;
f.type = object_type::scenery;
f.r = r;
f.frame = uint16_t(f.atlas->group(r).frames.size()-1);
f.pass = pass_mode::blocked;
- s.active = false;
- s.interactive = true;
s.closing = false;
f.offset = Vector2b(offset);
f.bbox_offset = Vector2b(bbox_offset);
f.bbox_size = Vector2ub(bbox_size);
+ { bool interactive = D.interactive; get("interactive", interactive); s.interactive = interactive; }
+ { bool active = D.active; get("active", active); s.active = active; }
f.subtype = s;
break;
}
diff --git a/src/scenery.cpp b/src/scenery.cpp
index c3c0b7c1..004fd61b 100644
--- a/src/scenery.cpp
+++ b/src/scenery.cpp
@@ -41,7 +41,6 @@ void generic_scenery::update(scenery&, size_t, float) {}
Vector2 generic_scenery::ordinal_offset(const scenery&, Vector2b offset) const { return Vector2(offset); }
bool generic_scenery::can_activate(const scenery&, size_t) const { return interactive; }
bool generic_scenery::activate(floormat::scenery&, size_t) { return false; }
-object_type generic_scenery::type() const noexcept { return object_type::scenery; }
enum scenery_type generic_scenery::scenery_type() const { return scenery_type::generic; }
enum scenery_type scenery_proto::scenery_type() const
diff --git a/src/scenery.hpp b/src/scenery.hpp
index df5ac186..c462a433 100644
--- a/src/scenery.hpp
+++ b/src/scenery.hpp
@@ -34,7 +34,7 @@ struct generic_scenery_proto
struct door_scenery_proto
{
unsigned char active : 1 = false;
- unsigned char interactive : 1 = false;
+ unsigned char interactive : 1 = true;
unsigned char closing : 1 = false;
bool operator==(const door_scenery_proto& p) const;
@@ -68,7 +68,6 @@ struct generic_scenery
bool can_activate(const scenery& sc, size_t i) const;
bool activate(scenery& sc, size_t i);
- object_type type() const noexcept;
enum scenery_type scenery_type() const;
explicit operator generic_scenery_proto() const;
@@ -86,7 +85,6 @@ struct door_scenery
bool can_activate(const scenery& sc, size_t i) const;
bool activate(scenery& sc, size_t i);
- object_type type() const noexcept;
enum scenery_type scenery_type() const;
explicit operator door_scenery_proto() const;
@@ -109,8 +107,7 @@ struct scenery final : object
explicit operator scenery_proto() const;
enum scenery_type scenery_type() const;
- static scenery_variants subtype_from_proto(object_id id, struct chunk& c,
- const scenery_proto_variants& variants);
+ static scenery_variants subtype_from_proto(object_id id, struct chunk& c, const scenery_proto_variants& variants);
static scenery_variants subtype_from_scenery_type(object_id id, struct chunk& c, enum scenery_type type);
private: