void ObjectProperties::serialize(std::ostream &os) const { writeU8(os, 1); // version writeS16(os, hp_max); writeU8(os, physical); writeF1000(os, weight); writeV3F1000(os, collisionbox.MinEdge); writeV3F1000(os, collisionbox.MaxEdge); os<<serializeString(visual); writeV2F1000(os, visual_size); writeU16(os, textures.size()); for(u32 i=0; i<textures.size(); i++){ os<<serializeString(textures[i]); } writeV2S16(os, spritediv); writeV2S16(os, initial_sprite_basepos); writeU8(os, is_visible); writeU8(os, makes_footstep_sound); writeF1000(os, automatic_rotate); // Added in protocol version 14 os<<serializeString(mesh); writeU16(os, colors.size()); for(u32 i=0; i<colors.size(); i++){ writeARGB8(os, colors[i]); } writeU8(os, collideWithObjects); writeF1000(os,stepheight); writeU8(os, automatic_face_movement_dir); writeF1000(os, automatic_face_movement_dir_offset); // Add stuff only at the bottom. // Never remove anything, because we don't want new versions of this }
std::string gob_cmd_update_nametag_attributes(video::SColor color) { std::ostringstream os(std::ios::binary); // command writeU8(os, GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES); // parameters writeU8(os, 1); // version for forward compatibility writeARGB8(os, color); return os.str(); }
void TestSerialization::testStreamWrite() { std::ostringstream os(std::ios_base::binary); std::string data; writeU8(os, 0x11); writeU16(os, 0x2233); writeU32(os, 0x44556677); writeU64(os, 0x8899AABBCCDDEEFF); writeS8(os, -128); writeS16(os, 30000); writeS32(os, -6); writeS64(os, -43); writeF1000(os, 53.53467f); writeF1000(os, -300000.32f); writeF1000(os, F1000_MIN); writeF1000(os, F1000_MAX); os << serializeString("foobar!"); data = os.str(); UASSERT(data.size() < sizeof(test_serialized_data)); UASSERT(!memcmp(&data[0], test_serialized_data, data.size())); writeV2S16(os, v2s16(500, 500)); writeV3S16(os, v3s16(4207, 604, -30)); writeV2S32(os, v2s32(1920, 1080)); writeV3S32(os, v3s32(-400, 6400054, 290549855)); writeV2F1000(os, v2f(500.65661f, 350.34567f)); os << serializeWideString(L"\x02~woof~\x5455"); writeV3F1000(os, v3f(500, 10024.2f, -192.54f)); writeARGB8(os, video::SColor(255, 128, 50, 128)); os << serializeLongString("some longer string here"); writeU16(os, 0xF00D); data = os.str(); UASSERT(data.size() == sizeof(test_serialized_data)); UASSERT(!memcmp(&data[0], test_serialized_data, sizeof(test_serialized_data))); }
void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const { // protocol_version >= 36 u8 version = 5; writeU8(os, version); writeU8(os, type); os << serializeString(name); os << serializeString(description); os << serializeString(inventory_image); os << serializeString(wield_image); writeV3F1000(os, wield_scale); writeS16(os, stack_max); writeU8(os, usable); writeU8(os, liquids_pointable); std::string tool_capabilities_s; if(tool_capabilities){ std::ostringstream tmp_os(std::ios::binary); tool_capabilities->serialize(tmp_os, protocol_version); tool_capabilities_s = tmp_os.str(); } os << serializeString(tool_capabilities_s); writeU16(os, groups.size()); for (const auto &group : groups) { os << serializeString(group.first); writeS16(os, group.second); } os << serializeString(node_placement_prediction); os << serializeString(sound_place.name); writeF1000(os, sound_place.gain); writeF1000(os, range); os << serializeString(sound_place_failed.name); writeF1000(os, sound_place_failed.gain); os << serializeString(palette_image); writeARGB8(os, color); writeF1000(os, sound_place.pitch); writeF1000(os, sound_place_failed.pitch); os << serializeString(inventory_overlay); os << serializeString(wield_overlay); }
void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const { const u8 version = CONTENTFEATURES_VERSION; writeU8(os, version); // general os << serializeString(name); writeU16(os, groups.size()); for (const auto &group : groups) { os << serializeString(group.first); writeS16(os, group.second); } writeU8(os, param_type); writeU8(os, param_type_2); // visual writeU8(os, drawtype); os << serializeString(mesh); writeF32(os, visual_scale); writeU8(os, 6); for (const TileDef &td : tiledef) td.serialize(os, protocol_version); for (const TileDef &td : tiledef_overlay) td.serialize(os, protocol_version); writeU8(os, CF_SPECIAL_COUNT); for (const TileDef &td : tiledef_special) { td.serialize(os, protocol_version); } writeU8(os, alpha); writeU8(os, color.getRed()); writeU8(os, color.getGreen()); writeU8(os, color.getBlue()); os << serializeString(palette_name); writeU8(os, waving); writeU8(os, connect_sides); writeU16(os, connects_to_ids.size()); for (u16 connects_to_id : connects_to_ids) writeU16(os, connects_to_id); writeARGB8(os, post_effect_color); writeU8(os, leveled); // lighting writeU8(os, light_propagates); writeU8(os, sunlight_propagates); writeU8(os, light_source); // map generation writeU8(os, is_ground_content); // interaction writeU8(os, walkable); writeU8(os, pointable); writeU8(os, diggable); writeU8(os, climbable); writeU8(os, buildable_to); writeU8(os, rightclickable); writeU32(os, damage_per_second); // liquid writeU8(os, liquid_type); os << serializeString(liquid_alternative_flowing); os << serializeString(liquid_alternative_source); writeU8(os, liquid_viscosity); writeU8(os, liquid_renewable); writeU8(os, liquid_range); writeU8(os, drowning); writeU8(os, floodable); // node boxes node_box.serialize(os, protocol_version); selection_box.serialize(os, protocol_version); collision_box.serialize(os, protocol_version); // sound sound_footstep.serialize(os, version); sound_dig.serialize(os, version); sound_dug.serialize(os, version); // legacy writeU8(os, legacy_facedir_simple); writeU8(os, legacy_wallmounted); os << serializeString(node_dig_prediction); }