diff options
author | MirceaKitsune <sonichedgehog_hyperblast00@yahoo.com> | 2012-10-23 20:03:06 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-11-25 18:14:14 +0200 |
commit | 0a020dbcc848ae2debec664846e08bd097d70320 (patch) | |
tree | 5c43fc7d023d002dc5fb637eea55022265bde0c8 | |
parent | ac97a7f70eefd4b8065e006c634a0a5baf236b62 (diff) | |
download | minetest-0a020dbcc848ae2debec664846e08bd097d70320.tar.gz minetest-0a020dbcc848ae2debec664846e08bd097d70320.tar.bz2 minetest-0a020dbcc848ae2debec664846e08bd097d70320.zip |
Properly read the mesh from LUA.
Players can now be set to meshes using the following test script:
function switch_player_visual()
prop = {
mesh="player.obj",
texture="player.png",
visual="mesh",
}
for _, obj in pairs(minetest.get_connected_players()) do
obj:set_properties(prop)
end
minetest.after(1.0, switch_player_visual)
end
minetest.after(1.0, switch_player_visual)
-rw-r--r-- | src/content_cao.cpp | 20 | ||||
-rw-r--r-- | src/content_sao.cpp | 5 | ||||
-rw-r--r-- | src/object_properties.cpp | 8 | ||||
-rw-r--r-- | src/scriptapi.cpp | 3 |
4 files changed, 25 insertions, 11 deletions
diff --git a/src/content_cao.cpp b/src/content_cao.cpp index e177fa15c..985f3cbbd 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -802,14 +802,18 @@ public: else if(m_prop.visual == "mesh"){ infostream<<"GenericCAO::addToScene(): mesh"<<std::endl; scene::IAnimatedMesh *mesh = smgr->getMesh(m_prop.mesh.c_str()); - m_animated_meshnode = smgr->addAnimatedMeshSceneNode(mesh, NULL); - mesh->drop(); - - m_animated_meshnode->setScale(v3f(m_prop.visual_size.X, - m_prop.visual_size.Y, - m_prop.visual_size.X)); - u8 li = m_last_light; - setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li)); + if(mesh) + { + m_animated_meshnode = smgr->addAnimatedMeshSceneNode(mesh, NULL); + + m_animated_meshnode->setScale(v3f(m_prop.visual_size.X, + m_prop.visual_size.Y, + m_prop.visual_size.X)); + u8 li = m_last_light; + setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li)); + } + else + errorstream<<"GenericCAO::addToScene(): Could not load mesh "<<m_prop.mesh<<std::endl; } else if(m_prop.visual == "wielditem"){ infostream<<"GenericCAO::addToScene(): node"<<std::endl; diff --git a/src/content_sao.cpp b/src/content_sao.cpp index a372b986f..6c2abf8f6 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -783,14 +783,14 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_, m_prop.weight = 75; m_prop.collisionbox = core::aabbox3d<f32>(-1/3.,-1.0,-1/3., 1/3.,1.0,1/3.); // start of default appearance, this should be overwritten by LUA - m_prop.visual = "upright-sprite"; + m_prop.visual = "upright_sprite"; m_prop.visual_size = v2f(1, 2); m_prop.textures.clear(); m_prop.textures.push_back("player.png"); m_prop.textures.push_back("player_back.png"); m_prop.spritediv = v2s16(1,1); // end of default appearance - m_prop.is_visible = (getHP() != 0); + m_prop.is_visible = (getHP() != 0); // TODO: Use a death animation instead for mesh players m_prop.makes_footstep_sound = true; } @@ -1138,7 +1138,6 @@ void PlayerSAO::disconnected() } } - std::string PlayerSAO::getPropertyPacket() { m_prop.is_visible = (getHP() != 0); diff --git a/src/object_properties.cpp b/src/object_properties.cpp index e67b78b52..3a36addc7 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -30,6 +30,8 @@ ObjectProperties::ObjectProperties(): weight(5), collisionbox(-0.5,-0.5,-0.5, 0.5,0.5,0.5), visual("sprite"), + mesh(""), + texture(""), visual_size(1,1), spritediv(1,1), initial_sprite_basepos(0,0), @@ -48,6 +50,8 @@ std::string ObjectProperties::dump() os<<", weight="<<weight; os<<", collisionbox="<<PP(collisionbox.MinEdge)<<","<<PP(collisionbox.MaxEdge); os<<", visual="<<visual; + os<<", mesh="<<mesh; + os<<", texture="<<texture; os<<", visual_size="<<PP2(visual_size); os<<", textures=["; for(u32 i=0; i<textures.size(); i++){ @@ -71,6 +75,8 @@ void ObjectProperties::serialize(std::ostream &os) const writeV3F1000(os, collisionbox.MinEdge); writeV3F1000(os, collisionbox.MaxEdge); os<<serializeString(visual); + os<<serializeString(mesh); + os<<serializeString(texture); writeV2F1000(os, visual_size); writeU16(os, textures.size()); for(u32 i=0; i<textures.size(); i++){ @@ -94,6 +100,8 @@ void ObjectProperties::deSerialize(std::istream &is) collisionbox.MinEdge = readV3F1000(is); collisionbox.MaxEdge = readV3F1000(is); visual = deSerializeString(is); + mesh = deSerializeString(is); + texture = deSerializeString(is); visual_size = readV2F1000(is); textures.clear(); u32 texture_count = readU16(is); diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 09900ce1f..7eda636e3 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -936,6 +936,9 @@ static void read_object_properties(lua_State *L, int index, lua_pop(L, 1); getstringfield(L, -1, "visual", prop->visual); + + getstringfield(L, -1, "mesh", prop->mesh); + getstringfield(L, -1, "texture", prop->texture); lua_getfield(L, -1, "visual_size"); if(lua_istable(L, -1)) |