diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-18 00:08:33 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-18 00:08:33 +0100 |
commit | c7a342d71ee93586b073a8e9c73b8ba6b621266f (patch) | |
tree | 4fd99ee3db670fe9933e023d18d74f50abf1311c /src | |
parent | 2640db18223b6a93140dd8fdc57d607d4b777f08 (diff) |
a
Diffstat (limited to 'src')
-rw-r--r-- | src/character.cpp | 45 | ||||
-rw-r--r-- | src/character.hpp | 1 | ||||
-rw-r--r-- | src/entity.cpp | 30 | ||||
-rw-r--r-- | src/entity.hpp | 1 | ||||
-rw-r--r-- | src/scenery.cpp | 10 | ||||
-rw-r--r-- | src/scenery.hpp | 2 |
6 files changed, 53 insertions, 36 deletions
diff --git a/src/character.cpp b/src/character.cpp index 67b6ca72..9c69e061 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -51,17 +51,23 @@ constexpr auto arrows_to_dir(bool L, bool R, bool U, bool D) } // namespace -character::character(std::uint64_t id, struct chunk& c, entity_type type, const character_proto& proto) : - entity{id, c, type, proto}, - name{proto.name}, - playable{proto.playable} +character_proto::character_proto(const character_proto&) = default; +character_proto::character_proto() = default; +character_proto::~character_proto() noexcept = default; +character_proto& character_proto::operator=(const character_proto&) = default; +character::~character() = default; + +bool character_proto::operator==(const entity_proto& e0) const { - if (!atlas) - atlas = loader.anim_atlas("npc-walk", loader.ANIM_PATH); - entity::set_bbox_(offset, bbox_offset, Vector2ub(iTILE_SIZE2/2), pass); -} + if (type != e0.type) + return false; -character::~character() = default; + if (!entity_proto::operator==(e0)) + return false; + + const auto& s0 = static_cast<const character_proto&>(e0); + return name == s0.name && playable == s0.playable; +} int character::allocate_frame_time(float dt) { @@ -120,4 +126,25 @@ bool character::update(std::size_t i, float dt) return true; } +character::operator character_proto() const +{ + character_proto ret; + static_cast<entity_proto&>(ret) = entity::operator entity_proto(); + ret.name = name; + ret.playable = playable; + return ret; +} + +character::character(std::uint64_t id, struct chunk& c, entity_type type, const character_proto& proto) : + entity{id, c, type, proto}, + name{proto.name}, + playable{proto.playable} +{ + if (!name) + name = "(Unnamed)"_s; + if (!atlas) + atlas = loader.anim_atlas("npc-walk", loader.ANIM_PATH); + entity::set_bbox_(offset, bbox_offset, Vector2ub(iTILE_SIZE2/2), pass); +} + } // namespace floormat diff --git a/src/character.hpp b/src/character.hpp index af48b19a..751fc42e 100644 --- a/src/character.hpp +++ b/src/character.hpp @@ -19,7 +19,6 @@ struct character_proto : entity_proto ~character_proto() noexcept override; character_proto& operator=(const character_proto&); bool operator==(const entity_proto& proto) const override; - operator bool() const; }; struct character final : entity diff --git a/src/entity.cpp b/src/entity.cpp index 390cf18c..ad599a1c 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -203,6 +203,21 @@ void entity::set_bbox_(Vector2b offset_, Vector2b bbox_offset_, Vector2ub bbox_s const_cast<pass_mode&>(pass) = pass_; } +entity::operator entity_proto() const +{ + entity_proto ret; + ret.atlas = atlas; + ret.offset = offset; + ret.bbox_offset = bbox_offset; + ret.bbox_size = bbox_size; + ret.delta = delta; + ret.frame = frame; + ret.type = entity_type::character; + ret.r = r; + ret.pass = pass; + return ret; +} + void entity::set_bbox(Vector2b offset_, Vector2b bbox_offset_, Vector2ub bbox_size_, pass_mode pass) { chunk::bbox bb0, bb; @@ -212,21 +227,6 @@ void entity::set_bbox(Vector2b offset_, Vector2b bbox_offset_, Vector2ub bbox_si c->_replace_bbox(bb0, bb, b0, b); } -entity::operator entity_proto() const -{ - entity_proto x; - x.atlas = atlas; - x.offset = offset; - x.bbox_offset = bbox_offset; - x.bbox_size = bbox_size; - x.delta = delta; - x.frame = frame; - x.type = type; - x.r = r; - x.pass = pass; - return x; -} - bool entity::can_activate(std::size_t) const { return false; } bool entity::activate(std::size_t) { return false; } diff --git a/src/entity.hpp b/src/entity.hpp index c6edcf90..96e5477f 100644 --- a/src/entity.hpp +++ b/src/entity.hpp @@ -73,7 +73,6 @@ struct entity protected: entity(std::uint64_t id, struct chunk& c, entity_type type, const entity_proto& proto) noexcept; - void set_bbox_(Vector2b offset, Vector2b bbox_offset, Vector2ub bbox_size, pass_mode pass); }; diff --git a/src/scenery.cpp b/src/scenery.cpp index 694090a2..14bf691b 100644 --- a/src/scenery.cpp +++ b/src/scenery.cpp @@ -103,19 +103,11 @@ bool scenery_proto::operator==(const entity_proto& e0) const scenery::operator scenery_proto() const { scenery_proto ret; + static_cast<entity_proto&>(ret) = entity::operator entity_proto(); ret.sc_type = sc_type; ret.active = active; ret.closing = closing; ret.interactive = interactive; - ret.atlas = atlas; - ret.offset = offset; - ret.bbox_offset = bbox_offset; - ret.bbox_size = bbox_size; - ret.delta = delta; - ret.frame = frame; - ret.type = entity_type::character; - ret.r = r; - ret.pass = pass; return ret; } diff --git a/src/scenery.hpp b/src/scenery.hpp index 3fe5fa35..0c074e5e 100644 --- a/src/scenery.hpp +++ b/src/scenery.hpp @@ -37,7 +37,7 @@ struct scenery_proto : entity_proto struct scenery final : entity { - scenery_type sc_type : 3 = scenery_type::none; + scenery_type sc_type : 3 = scenery_type::none; unsigned char active : 1 = false; unsigned char closing : 1 = false; unsigned char interactive : 1 = false; |