aboutsummaryrefslogtreecommitdiff
path: root/src/clientobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/clientobject.cpp')
-rw-r--r--src/clientobject.cpp514
1 files changed, 0 insertions, 514 deletions
diff --git a/src/clientobject.cpp b/src/clientobject.cpp
index bbe108e15..61ceefbe3 100644
--- a/src/clientobject.cpp
+++ b/src/clientobject.cpp
@@ -47,12 +47,6 @@ ClientActiveObject* ClientActiveObject::create(u8 type)
<<"ACTIVEOBJECT_TYPE_TEST"<<std::endl;
return new TestCAO(0);
}
- else if(type == ACTIVEOBJECT_TYPE_LUA)
- {
- dstream<<"ClientActiveObject::create(): passed "
- <<"ACTIVEOBJECT_TYPE_LUA"<<std::endl;
- return new LuaCAO(0);
- }
else
{
dstream<<"ClientActiveObject::create(): passed "
@@ -166,512 +160,4 @@ void TestCAO::processMessage(const std::string &data)
}
}
-/*
- LuaCAO
-*/
-
-extern "C"{
-#include "lstring.h"
-}
-
-/*
- Callbacks in script:
-
- on_step(self, dtime)
- on_process_message(self, data)
- on_initialize(self, data)
- TODO:
- string on_get_info_text(self)
- on_block_removed_near({X=,Y=,Z=}, node)
- on_block_placed_near({X=,Y=,Z=}, node)
-*/
-
-/*
- object_set_position(self, p)
-*/
-static int lf_object_set_position(lua_State *L)
-{
- // 2: position
- assert(lua_istable(L, -1));
- lua_pushstring(L, "X");
- lua_gettable(L, -2);
- lua_Number x = lua_tonumber(L, -1);
- lua_pop(L, 1);
- lua_pushstring(L, "Y");
- lua_gettable(L, -2);
- lua_Number y = lua_tonumber(L, -1);
- lua_pop(L, 1);
- lua_pushstring(L, "Z");
- lua_gettable(L, -2);
- lua_Number z = lua_tonumber(L, -1);
- lua_pop(L, 1);
- lua_pop(L, 1);
- // 1: self
- LuaCAO *self = (LuaCAO*)lua_touserdata(L, -1);
- lua_pop(L, 1);
-
- assert(self);
-
- self->setPosition(v3f(x*BS,y*BS,z*BS));
-
- return 0; // Number of return values
-}
-
-/*
- object_set_rotation(self, p)
-*/
-static int lf_object_set_rotation(lua_State *L)
-{
- // 2: position
- assert(lua_istable(L, -1));
- lua_pushstring(L, "X");
- lua_gettable(L, -2);
- lua_Number x = lua_tonumber(L, -1);
- lua_pop(L, 1);
- lua_pushstring(L, "Y");
- lua_gettable(L, -2);
- lua_Number y = lua_tonumber(L, -1);
- lua_pop(L, 1);
- lua_pushstring(L, "Z");
- lua_gettable(L, -2);
- lua_Number z = lua_tonumber(L, -1);
- lua_pop(L, 1);
- lua_pop(L, 1);
- // 1: self
- LuaCAO *self = (LuaCAO*)lua_touserdata(L, -1);
- lua_pop(L, 1);
-
- assert(self);
-
- self->setRotation(v3f(x,y,z));
-
- return 0; // Number of return values
-}
-
-/*
- object_add_to_mesh(self, image, corners, backface_culling)
- corners is an array like this:
- {{x,y,z},{x,y,z},{x,y,z},{x,y,z}}
-*/
-static int lf_object_add_to_mesh(lua_State *L)
-{
- // 4: backface_culling
- bool backface_culling = lua_toboolean(L, -1);
- lua_pop(L, 1);
- // 3: corners
- if(lua_istable(L, -1) == false)
- {
- dstream<<"ERROR: object_add_to_mesh(): parameter 3 not a table"
- <<std::endl;
- return 0;
- }
- v3f corners[4];
- // Loop table
- for(int i=0; i<4; i++)
- {
- // Get child table
- lua_pushinteger(L, i+1);
- lua_gettable(L, -2);
- if(lua_istable(L, -1) == false)
- {
- dstream<<"ERROR: object_add_to_mesh(): parameter 3 not a"
- " table of tables"<<std::endl;
- return 0;
- }
-
- // Get x, y and z from the child table
-
- lua_pushinteger(L, 1);
- lua_gettable(L, -2);
- corners[i].X = lua_tonumber(L, -1) * BS;
- lua_pop(L, 1);
-
- lua_pushinteger(L, 2);
- lua_gettable(L, -2);
- corners[i].Y = lua_tonumber(L, -1) * BS;
- lua_pop(L, 1);
-
- lua_pushinteger(L, 3);
- lua_gettable(L, -2);
- corners[i].Z = lua_tonumber(L, -1) * BS;
- lua_pop(L, 1);
-
- // Pop child table
- lua_pop(L, 1);
- }
- lua_pop(L, 1);
- // 2: image
- const char *image = lua_tostring(L, -1);
- lua_pop(L, 1);
- // 1: self
- LuaCAO *self = (LuaCAO*)lua_touserdata(L, -1);
- lua_pop(L, 1);
-
- assert(self);
-
- self->addToMesh(image, corners, backface_culling);
-
- return 0; // Number of return values
-}
-
-/*
- object_clear_mesh(self)
-*/
-static int lf_object_clear_mesh(lua_State *L)
-{
- // 1: self
- LuaCAO *self = (LuaCAO*)lua_touserdata(L, -1);
- lua_pop(L, 1);
-
- assert(self);
-
- self->clearMesh();
-
- return 0;
-}
-
-LuaCAO::LuaCAO(u16 id):
- ClientActiveObject(id),
- L(NULL),
- m_smgr(NULL),
- m_node(NULL),
- m_mesh(NULL),
- m_position(v3f(0,10*BS,0))
-{
- dstream<<"LuaCAO::LuaCAO(): id="<<id<<std::endl;
- L = lua_open();
- assert(L);
-
- // Load libraries
- luaopen_base(L);
- luaopen_table(L);
- luaopen_string(L);
- luaopen_math(L);
-
- // Disable some stuff
- const char *to_disable[] = {
- "arg",
- "debug",
- "dofile",
- "io",
- "loadfile",
- "os",
- "package",
- "require",
- NULL
- };
- const char **td = to_disable;
- do{
- lua_pushnil(L);
- lua_setglobal(L, *td);
- }while(*(++td));
-
- // Add globals
- //lua_pushlightuserdata(L, this);
- //lua_setglobal(L, "self");
-
- // Register functions
- lua_register(L, "object_set_position", lf_object_set_position);
- lua_register(L, "object_set_rotation", lf_object_set_rotation);
- lua_register(L, "object_add_to_mesh", lf_object_add_to_mesh);
- lua_register(L, "object_clear_mesh", lf_object_clear_mesh);
-}
-
-LuaCAO::~LuaCAO()
-{
- lua_close(L);
-}
-
-void LuaCAO::step(float dtime)
-{
- /*
- Call step(self, dtime) from lua
- */
-
- const char *funcname = "on_step";
- lua_getglobal(L, funcname);
- if(!lua_isfunction(L,-1))
- {
- lua_pop(L,1);
- dstream<<"WARNING: LuaCAO: Function not found: "
- <<funcname<<std::endl;
- return;
- }
-
- // Parameters:
- // 1: self
- lua_pushlightuserdata(L, this);
- // 2: dtime
- lua_pushnumber(L, dtime);
-
- // Call (2 parameters, 0 result)
- if(lua_pcall(L, 2, 0, 0))
- {
- dstream<<"WARNING: LuaCAO: Error running function "
- <<funcname<<": "
- <<lua_tostring(L,-1)<<std::endl;
- return;
- }
-}
-
-void LuaCAO::processMessage(const std::string &data)
-{
- /*
- Call process_message(self, data) from lua
- */
-
- const char *funcname = "on_process_message";
- lua_getglobal(L, funcname);
- if(!lua_isfunction(L,-1))
- {
- lua_pop(L,1);
- dstream<<"WARNING: LuaCAO: Function not found: "
- <<funcname<<std::endl;
- return;
- }
-
- // Parameters:
- // 1: self
- lua_pushlightuserdata(L, this);
- // 2: data
- lua_pushlstring(L, data.c_str(), data.size());
-
- // Call (2 parameters, 0 results)
- if(lua_pcall(L, 2, 1, 0))
- {
- dstream<<"WARNING: LuaCAO: Error running function "
- <<funcname<<": "
- <<lua_tostring(L,-1)<<std::endl;
- return;
- }
-}
-
-void LuaCAO::initialize(const std::string &data)
-{
- dstream<<"LuaCAO::initialize(): id="<<getId()<<std::endl;
-
- std::istringstream is(data, std::ios::binary);
- std::string script = deSerializeLongString(is);
- std::string other = deSerializeLongString(is);
-
- /*dstream<<"=== script (size="<<script.size()<<")"<<std::endl
- <<script<<std::endl
- <<"==="<<std::endl;*/
- dstream<<"LuaCAO::initialize(): script size="<<script.size()<<std::endl;
-
- /*dstream<<"other.size()="<<other.size()<<std::endl;
- dstream<<"other=\""<<other<<"\""<<std::endl;*/
-
- // Load the script to lua
- loadScript(script);
-
- /*
- Call initialize(self, data) in the script
- */
-
- const char *funcname = "on_initialize";
- lua_getglobal(L, funcname);
- if(!lua_isfunction(L,-1))
- {
- lua_pop(L,1);
- dstream<<"WARNING: LuaCAO: Function not found: "
- <<funcname<<std::endl;
- return;
- }
-
- // Parameters:
- // 1: self
- lua_pushlightuserdata(L, this);
- // 2: data (other)
- lua_pushlstring(L, other.c_str(), other.size());
-
- // Call (2 parameters, 0 result)
- if(lua_pcall(L, 2, 0, 0))
- {
- dstream<<"WARNING: LuaCAO: Error running function "
- <<funcname<<": "
- <<lua_tostring(L,-1)<<std::endl;
- return;
- }
-
-}
-
-void LuaCAO::loadScript(const std::string script)
-{
- int ret;
- ret = luaL_loadstring(L, script.c_str());
- if(ret)
- {
- const char *message = lua_tostring(L, -1);
- lua_pop(L, 1);
- dstream<<"LuaCAO::loadScript(): lua_loadstring failed: "
- <<message<<std::endl;
- assert(0);
- return;
- }
- ret = lua_pcall(L, 0, 0, 0);
- if(ret)
- {
- const char *message = lua_tostring(L, -1);
- lua_pop(L, 1);
- dstream<<"LuaCAO::loadScript(): lua_pcall failed: "
- <<message<<std::endl;
- assert(0);
- return;
- }
-}
-
-void LuaCAO::addToScene(scene::ISceneManager *smgr)
-{
- if(m_smgr != NULL)
- {
- dstream<<"WARNING: LuaCAO::addToScene() called more than once"
- <<std::endl;
- return;
- }
-
- if(m_node != NULL)
- {
- dstream<<"WARNING: LuaCAO::addToScene(): m_node != NULL"
- <<std::endl;
- return;
- }
-
- m_smgr = smgr;
-
- if(m_mesh == NULL)
- {
- m_mesh = new scene::SMesh();
- m_node = smgr->addMeshSceneNode(m_mesh, NULL);
-
- /*v3f corners[4] = {
- v3f(-BS/2,-BS/4,0),
- v3f(BS/2,-BS/4,0),
- v3f(BS/2,BS/4,0),
- v3f(-BS/2,BS/4,0),
- };
- addToMesh("rat.png", corners, false);*/
- }
- else
- {
- dstream<<"WARNING: LuaCAO::addToScene(): m_mesh != NULL"
- <<std::endl;
- return;
- }
-
- updateNodePos();
-}
-
-void LuaCAO::addToMesh(const char *image, v3f *corners, bool backface_culling)
-{
- dstream<<"INFO: addToMesh called"<<std::endl;
-
- video::IVideoDriver* driver = m_smgr->getVideoDriver();
-
- assert(m_mesh);
-
- scene::IMeshBuffer *buf = new scene::SMeshBuffer();
- video::SColor c(255,255,255,255);
- video::S3DVertex vertices[4] =
- {
- video::S3DVertex(corners[0], v3f(0,0,0), c, v2f(0,1)),
- video::S3DVertex(corners[1], v3f(0,0,0), c, v2f(1,1)),
- video::S3DVertex(corners[2], v3f(0,0,0), c, v2f(1,0)),
- video::S3DVertex(corners[3], v3f(0,0,0), c, v2f(0,0)),
- /*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),*/
- };
- 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, backface_culling);
- buf->getMaterial().setTexture
- (0, driver->getTexture(porting::getDataPath(image).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
- m_mesh->addMeshBuffer(buf);
- buf->drop();
- // Reset mesh
- if(m_node)
- m_node->setMesh(m_mesh);
-}
-
-void LuaCAO::clearMesh()
-{
- if(m_node)
- {
- m_node->setMesh(NULL);
- }
-
- if(m_mesh)
- {
- m_mesh->drop();
- m_mesh = NULL;
- }
-}
-
-void LuaCAO::removeFromScene()
-{
- if(m_node == NULL)
- return;
-
- if(m_node)
- {
- m_node->remove();
- m_node = NULL;
- }
- if(m_mesh)
- {
- m_mesh->drop();
- m_mesh = NULL;
- }
-
- m_smgr = NULL;
-}
-
-void LuaCAO::updateLight(u8 light_at_pos)
-{
-}
-
-v3s16 LuaCAO::getLightPosition()
-{
- return floatToInt(m_position, BS);
-}
-
-void LuaCAO::updateNodePos()
-{
- if(m_node == NULL)
- return;
-
- m_node->setPosition(m_position);
- m_node->setRotation(m_rotation);
-}
-
-void LuaCAO::setPosition(v3f pos)
-{
- m_position = pos;
- updateNodePos();
-}
-
-v3f LuaCAO::getPosition()
-{
- return m_position;
-}
-
-void LuaCAO::setRotation(v3f rot)
-{
- m_rotation = rot;
- updateNodePos();
-}
-
-v3f LuaCAO::getRotation()
-{
- return m_rotation;
-}
-