/* Minetest Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "genericobject.h" #include #include "util/serialize.h" std::string gob_cmd_set_properties(const ObjectProperties &prop) { std::ostringstream os(std::ios::binary); writeU8(os, GENERIC_CMD_SET_PROPERTIES); prop.serialize(os); return os.str(); } ObjectProperties gob_read_set_properties(std::istream &is) { ObjectProperties prop; prop.deSerialize(is); return prop; } std::string gob_cmd_update_position( v3f position, v3f velocity, v3f acceleration, f32 yaw, bool do_interpolate, bool is_movement_end, f32 update_interval ){ std::ostringstream os(std::ios::binary); // command writeU8(os, GENERIC_CMD_UPDATE_POSITION); // pos writeV3F1000(os, position); // velocity writeV3F1000(os, velocity); // acceleration writeV3F1000(os, acceleration); // yaw writeF1000(os, yaw); // do_interpolate writeU8(os, do_interpolate); // is_end_position (for interpolation) writeU8(os, is_movement_end); // update_interval (for interpolation) writeF1000(os, update_interval); return os.str(); } std::string gob_cmd_set_texture_mod(const std::string &mod) { std::ostringstream os(std::ios::binary); // command writeU8(os, GENERIC_CMD_SET_TEXTURE_MOD); // parameters os<first); writeS16(os, i->second); } return os.str(); } std::string gob_cmd_update_physics_override(float physics_override_speed, float physics_override_jump, float physics_override_gravity, bool sneak, bool sneak_glitch, bool new_move) { std::ostringstream os(std::ios::binary); // command writeU8(os, GENERIC_CMD_SET_PHYSICS_OVERRIDE); // parameters writeF1000(os, physics_override_speed); writeF1000(os, physics_override_jump); writeF1000(os, physics_override_gravity); // these are sent inverted so we get true when the server sends nothing writeU8(os, !sneak); writeU8(os, !sneak_glitch); writeU8(os, !new_move); return os.str(); } std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend, bool frame_loop) { std::ostringstream os(std::ios::binary); // command writeU8(os, GENERIC_CMD_SET_ANIMATION); // parameters writeV2F1000(os, frames); writeF1000(os, frame_speed); writeF1000(os, frame_blend); // these are sent inverted so we get true when the server sends nothing writeU8(os, !frame_loop); return os.str(); } std::string gob_cmd_update_bone_position(const std::string &bone, v3f position, v3f rotation) { std::ostringstream os(std::ios::binary); // command writeU8(os, GENERIC_CMD_SET_BONE_POSITION); // parameters os<