diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-11-12 11:59:56 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-11-29 19:13:39 +0200 |
commit | 526eedf98e45fc3b0ad768ecb1d0cbc1968def2f (patch) | |
tree | 0b972c05ad7609f1f0d8df269c2255223940499f /src/content_cao.cpp | |
parent | dcedfdacd1ba77591cdc0aa2b8c123c6a5ef2f5d (diff) | |
download | minetest-526eedf98e45fc3b0ad768ecb1d0cbc1968def2f.tar.gz minetest-526eedf98e45fc3b0ad768ecb1d0cbc1968def2f.tar.bz2 minetest-526eedf98e45fc3b0ad768ecb1d0cbc1968def2f.zip |
Scripting WIP
Diffstat (limited to 'src/content_cao.cpp')
-rw-r--r-- | src/content_cao.cpp | 107 |
1 files changed, 44 insertions, 63 deletions
diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 70bcbac18..28c2787e1 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1276,8 +1276,10 @@ LuaEntityCAO proto_LuaEntityCAO; LuaEntityCAO::LuaEntityCAO(): ClientActiveObject(0), m_selection_box(-BS/3.,0.0,-BS/3., BS/3.,BS*2./3.,BS/3.), - m_node(NULL), + m_meshnode(NULL), + m_spritenode(NULL), m_position(v3f(0,10*BS,0)), + m_yaw(0), m_prop(new LuaEntityProperties) { ClientActiveObject::registerType(getType(), create); @@ -1295,65 +1297,39 @@ ClientActiveObject* LuaEntityCAO::create() void LuaEntityCAO::addToScene(scene::ISceneManager *smgr) { - if(m_node != NULL) + if(m_meshnode != NULL || m_spritenode != NULL) return; - video::IVideoDriver* driver = smgr->getVideoDriver(); - - scene::SMesh *mesh = new scene::SMesh(); - scene::IMeshBuffer *buf = new scene::SMeshBuffer(); - video::SColor c(255,255,255,255); - video::S3DVertex vertices[4] = - { - /*video::S3DVertex(-BS/2,-BS/4,0, 0,0,0, c, 0,1), - video::S3DVertex(BS/2,-BS/4,0, 0,0,0, c, 1,1), - video::S3DVertex(BS/2,BS/4,0, 0,0,0, c, 1,0), - video::S3DVertex(-BS/2,BS/4,0, 0,0,0, c, 0,0),*/ - video::S3DVertex(BS/3.,0,0, 0,0,0, c, 0,1), - video::S3DVertex(-BS/3.,0,0, 0,0,0, c, 1,1), - video::S3DVertex(-BS/3.,0+BS*2./3.,0, 0,0,0, c, 1,0), - video::S3DVertex(BS/3.,0+BS*2./3.,0, 0,0,0, c, 0,0), - }; - u16 indices[] = {0,1,2,2,3,0}; - buf->append(vertices, 4, indices, 6); - // Set material - buf->getMaterial().setFlag(video::EMF_LIGHTING, false); - buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false); - //buf->getMaterial().setTexture(0, NULL); - // Initialize with the stick texture - buf->getMaterial().setTexture - (0, driver->getTexture(getTexturePath("mese.png").c_str())); - buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false); - buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true); - buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - // Add to mesh - mesh->addMeshBuffer(buf); - buf->drop(); - m_node = smgr->addMeshSceneNode(mesh, NULL); - mesh->drop(); - // Set it to use the materials of the meshbuffers directly. - // This is needed for changing the texture in the future - m_node->setReadOnlyMaterials(true); - updateNodePos(); + //video::IVideoDriver* driver = smgr->getVideoDriver(); + + if(m_prop->visual == "single_sprite"){ + } else if(m_prop->visual == "cube"){ + } else { + } } void LuaEntityCAO::removeFromScene() { - if(m_node == NULL) - return; - - m_node->remove(); - m_node = NULL; + if(m_meshnode){ + m_meshnode->remove(); + m_meshnode = NULL; + } + if(m_spritenode){ + m_spritenode->remove(); + m_spritenode = NULL; + } } void LuaEntityCAO::updateLight(u8 light_at_pos) { - if(m_node == NULL) - return; - u8 li = decode_light(light_at_pos); video::SColor color(255,li,li,li); - setMeshVerticesColor(m_node->getMesh(), color); + if(m_meshnode){ + setMeshVerticesColor(m_meshnode->getMesh(), color); + } + if(m_spritenode){ + m_spritenode->setColor(color); + } } v3s16 LuaEntityCAO::getLightPosition() @@ -1363,25 +1339,17 @@ v3s16 LuaEntityCAO::getLightPosition() void LuaEntityCAO::updateNodePos() { - if(m_node == NULL) - return; - - m_node->setPosition(m_position); + if(m_meshnode){ + m_meshnode->setPosition(pos_translator.vect_show); + } + if(m_spritenode){ + m_spritenode->setPosition(pos_translator.vect_show); + } } void LuaEntityCAO::step(float dtime, ClientEnvironment *env) { - if(m_node) - { - /*v3f rot = m_node->getRotation(); - rot.Y += dtime * 120; - m_node->setRotation(rot);*/ - LocalPlayer *player = env->getLocalPlayer(); - assert(player); - v3f rot = m_node->getRotation(); - rot.Y = 180.0 - (player->getYaw()); - m_node->setRotation(rot); - } + pos_translator.translate(dtime); } void LuaEntityCAO::processMessage(const std::string &data) @@ -1392,8 +1360,17 @@ void LuaEntityCAO::processMessage(const std::string &data) u8 cmd = readU8(is); if(cmd == 0) { + // do_interpolate + bool do_interpolate = readU8(is); // pos m_position = readV3F1000(is); + // yaw + m_yaw = readF1000(is); + + if(do_interpolate) + pos_translator.update(m_position); + else + pos_translator.init(m_position); updateNodePos(); } } @@ -1410,11 +1387,15 @@ void LuaEntityCAO::initialize(const std::string &data) return; // pos m_position = readV3F1000(is); + // yaw + m_yaw = readF1000(is); // properties std::istringstream prop_is(deSerializeLongString(is), std::ios::binary); m_prop->deSerialize(prop_is); infostream<<"m_prop: "<<m_prop->dump()<<std::endl; + + pos_translator.init(m_position); updateNodePos(); } |