diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-01-23 17:11:51 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-01-23 17:11:51 +0100 |
commit | 23afbcb7b32be0d3d64a6931a1f03034a4d62e1a (patch) | |
tree | 88241274ad31748e34fc6d2bcd6fbf296f0d69a1 | |
parent | 13e14ce288ce62b37f6bf5b587979a93a29ec2f8 (diff) |
a
-rw-r--r-- | serialize/scenery.cpp | 19 | ||||
-rw-r--r-- | src/scenery.cpp | 1 | ||||
-rw-r--r-- | src/scenery.hpp | 7 |
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: |