summaryrefslogtreecommitdiff
path: root/src/content_cao.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-11-12 11:59:56 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-11-29 19:13:39 +0200
commit526eedf98e45fc3b0ad768ecb1d0cbc1968def2f (patch)
tree0b972c05ad7609f1f0d8df269c2255223940499f /src/content_cao.cpp
parentdcedfdacd1ba77591cdc0aa2b8c123c6a5ef2f5d (diff)
downloadminetest-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.cpp107
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();
}