X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fobject_properties.cpp;h=2eebc27d684c7a9df8aa4db805d08bbdf0003629;hb=b2ab5fd1615ac5f907e43992d0905a56cddf798f;hp=ffb1ecb439e16f0fe4e136b63a724f7c30caa9b9;hpb=4c40e0775ca564296a56f72ff3adce50ba925b0c;p=minetest.git diff --git a/src/object_properties.cpp b/src/object_properties.cpp index ffb1ecb43..2eebc27d6 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -24,6 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/basic_macros.h" #include +static const video::SColor NULL_BGCOLOR{0, 1, 1, 1}; + ObjectProperties::ObjectProperties() { textures.emplace_back("unknown_object.png"); @@ -37,11 +39,10 @@ std::string ObjectProperties::dump() os << ", breath_max=" << breath_max; os << ", physical=" << physical; os << ", collideWithObjects=" << collideWithObjects; - os << ", weight=" << weight; os << ", collisionbox=" << PP(collisionbox.MinEdge) << "," << PP(collisionbox.MaxEdge); os << ", visual=" << visual; os << ", mesh=" << mesh; - os << ", visual_size=" << PP2(visual_size); + os << ", visual_size=" << PP(visual_size); os << ", textures=["; for (const std::string &texture : textures) { os << "\"" << texture << "\" "; @@ -63,56 +64,78 @@ std::string ObjectProperties::dump() os << ", nametag=" << nametag; os << ", nametag_color=" << "\"" << nametag_color.getAlpha() << "," << nametag_color.getRed() << "," << nametag_color.getGreen() << "," << nametag_color.getBlue() << "\" "; + + if (nametag_bgcolor) + os << ", nametag_bgcolor=" << "\"" << nametag_color.getAlpha() << "," << nametag_color.getRed() + << "," << nametag_color.getGreen() << "," << nametag_color.getBlue() << "\" "; + else + os << ", nametag_bgcolor=null "; + os << ", selectionbox=" << PP(selectionbox.MinEdge) << "," << PP(selectionbox.MaxEdge); os << ", pointable=" << pointable; - os << ", can_zoom=" << can_zoom; os << ", static_save=" << static_save; os << ", eye_height=" << eye_height; + os << ", zoom_fov=" << zoom_fov; + os << ", use_texture_alpha=" << use_texture_alpha; + os << ", damage_texture_modifier=" << damage_texture_modifier; + os << ", shaded=" << shaded; + os << ", show_on_minimap=" << show_on_minimap; return os.str(); } void ObjectProperties::serialize(std::ostream &os) const { - writeU8(os, 2); // version, protocol_version >= 36 - writeS16(os, hp_max); + writeU8(os, 4); // PROTOCOL_VERSION >= 37 + writeU16(os, hp_max); writeU8(os, physical); - writeF1000(os, weight); - writeV3F1000(os, collisionbox.MinEdge); - writeV3F1000(os, collisionbox.MaxEdge); - writeV3F1000(os, selectionbox.MinEdge); - writeV3F1000(os, selectionbox.MaxEdge); + writeF32(os, 0.f); // Removed property (weight) + writeV3F32(os, collisionbox.MinEdge); + writeV3F32(os, collisionbox.MaxEdge); + writeV3F32(os, selectionbox.MinEdge); + writeV3F32(os, selectionbox.MaxEdge); writeU8(os, pointable); - os << serializeString(visual); - writeV2F1000(os, visual_size); + os << serializeString16(visual); + writeV3F32(os, visual_size); writeU16(os, textures.size()); for (const std::string &texture : textures) { - os << serializeString(texture); + os << serializeString16(texture); } writeV2S16(os, spritediv); writeV2S16(os, initial_sprite_basepos); writeU8(os, is_visible); writeU8(os, makes_footstep_sound); - writeF1000(os, automatic_rotate); + writeF32(os, automatic_rotate); // Added in protocol version 14 - os << serializeString(mesh); + os << serializeString16(mesh); writeU16(os, colors.size()); for (video::SColor color : colors) { writeARGB8(os, color); } writeU8(os, collideWithObjects); - writeF1000(os, stepheight); + writeF32(os, stepheight); writeU8(os, automatic_face_movement_dir); - writeF1000(os, automatic_face_movement_dir_offset); + writeF32(os, automatic_face_movement_dir_offset); writeU8(os, backface_culling); - os << serializeString(nametag); + os << serializeString16(nametag); writeARGB8(os, nametag_color); - writeF1000(os, automatic_face_movement_max_rotation_per_sec); - os << serializeString(infotext); - os << serializeString(wield_item); - writeU8(os, can_zoom); + writeF32(os, automatic_face_movement_max_rotation_per_sec); + os << serializeString16(infotext); + os << serializeString16(wield_item); writeS8(os, glow); writeU16(os, breath_max); - writeF1000(os, eye_height); + writeF32(os, eye_height); + writeF32(os, zoom_fov); + writeU8(os, use_texture_alpha); + os << serializeString16(damage_texture_modifier); + writeU8(os, shaded); + writeU8(os, show_on_minimap); + + if (!nametag_bgcolor) + writeARGB8(os, NULL_BGCOLOR); + else if (nametag_bgcolor.value().getAlpha() == 0) + writeARGB8(os, video::SColor(0, 0, 0, 0)); + else + writeARGB8(os, nametag_bgcolor.value()); // Add stuff only at the bottom. // Never remove anything, because we don't want new versions of this @@ -121,49 +144,65 @@ void ObjectProperties::serialize(std::ostream &os) const void ObjectProperties::deSerialize(std::istream &is) { int version = readU8(is); - if (version != 2) + if (version != 4) throw SerializationError("unsupported ObjectProperties version"); - hp_max = readS16(is); + hp_max = readU16(is); physical = readU8(is); - weight = readF1000(is); - collisionbox.MinEdge = readV3F1000(is); - collisionbox.MaxEdge = readV3F1000(is); - selectionbox.MinEdge = readV3F1000(is); - selectionbox.MaxEdge = readV3F1000(is); + readU32(is); // removed property (weight) + collisionbox.MinEdge = readV3F32(is); + collisionbox.MaxEdge = readV3F32(is); + selectionbox.MinEdge = readV3F32(is); + selectionbox.MaxEdge = readV3F32(is); pointable = readU8(is); - visual = deSerializeString(is); - visual_size = readV2F1000(is); + visual = deSerializeString16(is); + visual_size = readV3F32(is); textures.clear(); u32 texture_count = readU16(is); for (u32 i = 0; i < texture_count; i++){ - textures.push_back(deSerializeString(is)); + textures.push_back(deSerializeString16(is)); } spritediv = readV2S16(is); initial_sprite_basepos = readV2S16(is); is_visible = readU8(is); makes_footstep_sound = readU8(is); - automatic_rotate = readF1000(is); - mesh = deSerializeString(is); + automatic_rotate = readF32(is); + mesh = deSerializeString16(is); + colors.clear(); u32 color_count = readU16(is); for (u32 i = 0; i < color_count; i++){ colors.push_back(readARGB8(is)); } collideWithObjects = readU8(is); - stepheight = readF1000(is); + stepheight = readF32(is); automatic_face_movement_dir = readU8(is); - automatic_face_movement_dir_offset = readF1000(is); + automatic_face_movement_dir_offset = readF32(is); backface_culling = readU8(is); - nametag = deSerializeString(is); + nametag = deSerializeString16(is); nametag_color = readARGB8(is); - automatic_face_movement_max_rotation_per_sec = readF1000(is); - infotext = deSerializeString(is); - wield_item = deSerializeString(is); - can_zoom = readU8(is); - + automatic_face_movement_max_rotation_per_sec = readF32(is); + infotext = deSerializeString16(is); + wield_item = deSerializeString16(is); + glow = readS8(is); + breath_max = readU16(is); + eye_height = readF32(is); + zoom_fov = readF32(is); + use_texture_alpha = readU8(is); try { - glow = readS8(is); - breath_max = readU16(is); - eye_height = readF1000(is); + damage_texture_modifier = deSerializeString16(is); + u8 tmp = readU8(is); + if (is.eof()) + return; + shaded = tmp; + tmp = readU8(is); + if (is.eof()) + return; + show_on_minimap = tmp; + + auto bgcolor = readARGB8(is); + if (bgcolor != NULL_BGCOLOR) + nametag_bgcolor = bgcolor; + else + nametag_bgcolor = nullopt; } catch (SerializationError &e) {} }