diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2023-02-24 21:25:51 +0100 |
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-02-24 21:25:51 +0100 |
| commit | 4251d32844db32330942ed49b38b28aad5dcc34e (patch) | |
| tree | dfd2611486456357f1ea06fcaeaefad185e46743 /serialize | |
| parent | fb0201967310fbaf4f6ddbeebb269acef8951363 (diff) | |
collision bbox WIP
Diffstat (limited to 'serialize')
| -rw-r--r-- | serialize/world-impl.hpp | 12 | ||||
| -rw-r--r-- | serialize/world-reader.cpp | 10 | ||||
| -rw-r--r-- | serialize/world-writer.cpp | 12 |
3 files changed, 28 insertions, 6 deletions
diff --git a/serialize/world-impl.hpp b/serialize/world-impl.hpp index 3403631d..5a43654e 100644 --- a/serialize/world-impl.hpp +++ b/serialize/world-impl.hpp @@ -17,14 +17,16 @@ * 3) Serialize scenery. Tile flag (1 << 6) added. * 4) Scenery dt now stored as fixed-point uint16_t. * 5) Serialize scenery pixel offset. + * 6) Serialize scenery bboxes. + * 7) Serialize scenery bbox_size offset. */ namespace floormat::Serialize { -using tilemeta = std::uint8_t; -using atlasid = std::uint16_t; -using chunksiz = std::uint16_t; -using proto_t = std::uint16_t; +using tilemeta = std::uint8_t; +using atlasid = std::uint16_t; +using chunksiz = std::uint16_t; +using proto_t = std::uint16_t; namespace { @@ -35,7 +37,7 @@ template<typename T> constexpr inline T int_max = std::numeric_limits<T>::max(); constexpr inline std::size_t atlas_name_max = 128; constexpr inline auto null_atlas = (atlasid)-1LL; -constexpr inline proto_t proto_version = 5; +constexpr inline proto_t proto_version = 7; constexpr inline proto_t min_proto_version = 1; constexpr inline auto chunk_magic = (std::uint16_t)~0xc0d3; constexpr inline auto scenery_magic = (std::uint16_t)~0xb00b; diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp index e108747e..4f31b88b 100644 --- a/serialize/world-reader.cpp +++ b/serialize/world-reader.cpp @@ -177,6 +177,16 @@ void reader_state::read_chunks(reader_t& s) sc.frame.offset[0] << s; sc.frame.offset[1] << s; } + if (PROTO >= 6) [[likely]] + { + sc.frame.bbox_size[0] << s; + sc.frame.bbox_size[1] << s; + } + if (PROTO >= 7) [[likely]] + { + sc.frame.bbox_offset[0] << s; + sc.frame.bbox_offset[1] << s; + } if (sc.frame.active) { if (PROTO >= 4) [[likely]] diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp index 2860a118..6d1a0e94 100644 --- a/serialize/world-writer.cpp +++ b/serialize/world-writer.cpp @@ -352,7 +352,11 @@ void writer_state::serialize_chunk(const chunk& c, chunk_coords coord) id |= meta_long_scenery_bit * sc_exact; id |= atlasid(scenery.r) << sizeof(atlasid)*8-1-rotation_BITS; s << id; - if (!sc_exact || !scenery.offset.isZero()) + if (constexpr struct scenery default_scenery; + !sc_exact || + scenery.offset != default_scenery.offset || + scenery.bbox_size != default_scenery.bbox_size || + scenery.bbox_offset != default_scenery.bbox_offset) { fm_assert(scenery.active || scenery.delta == 0); write_scenery_flags(s, scenery); @@ -363,6 +367,12 @@ void writer_state::serialize_chunk(const chunk& c, chunk_coords coord) s << scenery.offset[0]; s << scenery.offset[1]; + s << scenery.bbox_size[0]; + s << scenery.bbox_size[1]; + + s << scenery.bbox_offset[0]; + s << scenery.bbox_offset[1]; + if (scenery.active) s << scenery.delta; } |
