52 [[nodiscard]] std::vector<uint8_t>
serialize()
const {
53 capnp::MallocMessageBuilder message;
59 auto stateBuilder = builder.initInitialState();
62 auto entitiesBuilder =
69 auto mapConfigBuilder = builder.initMapConfig();
75 auto bytes = capnp::messageToFlatArray(message);
76 auto byteArray = bytes.asBytes();
77 return std::vector<uint8_t>(byteArray.begin(), byteArray.end());
82 KJ_REQUIRE(data.size() %
sizeof(capnp::word) == 0,
83 "Serialized data size must be a multiple of capnp::word");
84 auto aligned = kj::heapArray<uint8_t>(data.size());
85 memcpy(aligned.begin(), data.data(), data.size());
86 kj::ArrayPtr<const capnp::word> words(
reinterpret_cast<const capnp::word *
>(aligned.begin()),
87 data.size() /
sizeof(capnp::word));
89 capnp::FlatArrayMessageReader message(words);
96 auto stateReader = reader.getInitialState();
97 result.initialState.serverTick = stateReader.getServerTick();
99 auto entitiesReader = stateReader.getEntities();
100 result.initialState.entities.reserve(entitiesReader.size());
101 for (
auto entityReader : entitiesReader) {
106 if (reader.hasMapConfig()) {
107 auto mapConfigReader = reader.getMapConfig();
108 result.mapConfig.background = mapConfigReader.getBackground();
109 result.mapConfig.parallaxBackground = mapConfigReader.getParallaxBackground();
110 result.mapConfig.scrollSpeed = mapConfigReader.getScrollSpeed();
111 result.mapConfig.parallaxSpeedFactor = mapConfigReader.getParallaxSpeedFactor();