aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2018-03-27 22:42:57 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2018-03-27 22:42:57 -0400
commit6cf098e3450ba99c238cf0499c6cecaa246f4d50 (patch)
tree175b84e32a3cf24f3fb7356825827f6611bab1ed /src/client/lua_api
parent2831e232b886c5e3b0791ea5192f9e5194e6abf3 (diff)
downloadbrokengine-6cf098e3450ba99c238cf0499c6cecaa246f4d50.tar.gz
brokengine-6cf098e3450ba99c238cf0499c6cecaa246f4d50.tar.bz2
brokengine-6cf098e3450ba99c238cf0499c6cecaa246f4d50.zip
Fixed the procedural textures
Procedural textures are now completely working.
Diffstat (limited to 'src/client/lua_api')
-rw-r--r--src/client/lua_api/gui/iguielement.cpp10
-rw-r--r--src/client/lua_api/gui/iguielement.hpp1
-rw-r--r--src/client/lua_api/gui/iguigeneric.cpp27
-rw-r--r--src/client/lua_api/gui/iguigeneric.hpp11
-rw-r--r--src/client/lua_api/gui/iguiimage.cpp1
-rw-r--r--src/client/lua_api/gui/iguiwindow.cpp31
-rw-r--r--src/client/lua_api/load_gui.cpp2
-rw-r--r--src/client/lua_api/phys/cbphysbox.cpp22
-rw-r--r--src/client/lua_api/scene/igeneric.cpp17
-rw-r--r--src/client/lua_api/scene/imesh.cpp26
-rw-r--r--src/client/lua_api/video/smaterial.cpp36
11 files changed, 96 insertions, 88 deletions
diff --git a/src/client/lua_api/gui/iguielement.cpp b/src/client/lua_api/gui/iguielement.cpp
index cb395af..c01fa70 100644
--- a/src/client/lua_api/gui/iguielement.cpp
+++ b/src/client/lua_api/gui/iguielement.cpp
@@ -9,6 +9,7 @@ extern "C" {
using namespace irr;
using namespace core;
+using namespace gui;
static LIGUIElement* toiguielement(lua_State* L,int index){
LIGUIElement* ret = (LIGUIElement*)lua_touserdata(L,index);
@@ -91,3 +92,12 @@ int guisethandeler(lua_State* L){
}
return 0;
}
+
+//ud_iguielement
+int guigetid(lua_State* L){
+ IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);
+ lua_pop(L,1);
+ int id = el->getID();
+ lua_pushnumber(L,id);
+ return 1;
+}
diff --git a/src/client/lua_api/gui/iguielement.hpp b/src/client/lua_api/gui/iguielement.hpp
index 5756a34..a036fd5 100644
--- a/src/client/lua_api/gui/iguielement.hpp
+++ b/src/client/lua_api/gui/iguielement.hpp
@@ -13,3 +13,4 @@ int setiguitext(lua_State* L);
int removeiguielement(lua_State* L);
int guigethandeler(lua_State* L);
int guisethandeler(lua_State* L);
+int guigetid(lua_State* L);
diff --git a/src/client/lua_api/gui/iguigeneric.cpp b/src/client/lua_api/gui/iguigeneric.cpp
deleted file mode 100644
index 7f39fdc..0000000
--- a/src/client/lua_api/gui/iguigeneric.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <vector>
-#include <memory>
-#include <map>
-#include <string>
-#include <functional>
-extern "C" {
- #include <lua.h>
- #include <lauxlib.h>
- #include <lualib.h>
-}
-#include <irrlicht.h>
-#include "../guiparts.hpp"
-#include "iguielement.hpp"
-#include "../../callbackhandeler.hpp"
-#include "../../util/hashmap.h"
-
-using namespace irr;
-using namespace gui;
-
-extern IrrlichtDevice* device;
-
-int iguigeneric_register(lua_State* L, IrrlichtDevice* d){
-
- return 0;
-}
diff --git a/src/client/lua_api/gui/iguigeneric.hpp b/src/client/lua_api/gui/iguigeneric.hpp
deleted file mode 100644
index 287fb4e..0000000
--- a/src/client/lua_api/gui/iguigeneric.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <vector>
-extern "C" {
- #include <lua.h>
- #include <lauxlib.h>
- #include <lualib.h>
-}
-#include <irrlicht.h>
-
-int iguigeneric_register(lua_State* L, irr::IrrlichtDevice* d);
diff --git a/src/client/lua_api/gui/iguiimage.cpp b/src/client/lua_api/gui/iguiimage.cpp
index c349c3e..fea283b 100644
--- a/src/client/lua_api/gui/iguiimage.cpp
+++ b/src/client/lua_api/gui/iguiimage.cpp
@@ -86,6 +86,7 @@ static const luaL_reg iguiimage_m[] = {
void iguiimage_register(lua_State* L){
printf("Loading iguiimage\n");
luaL_newmetatable(L,"iguiimage");//{m_iguiimg}
+ printf("made meta table\n");
lua_newtable(L);//{m_iguiimg},{}
luaL_register(L,NULL,iguiimage_m);//{m_iguiimg},{iguiimg_m}
printf("About to set field\n");
diff --git a/src/client/lua_api/gui/iguiwindow.cpp b/src/client/lua_api/gui/iguiwindow.cpp
index 038c9f7..9a42dff 100644
--- a/src/client/lua_api/gui/iguiwindow.cpp
+++ b/src/client/lua_api/gui/iguiwindow.cpp
@@ -59,9 +59,12 @@ static bool iguiwindowevent(irr::SEvent e){
return false;
}
-//new({posx,posy},{width,height}[,"title"][,parent])
+//new({width,height},{posx,posy},"title"[,parent])
static int newiguiwindow(lua_State* L){
printf("Creating window\n");
+
+ int numargs = lua_gettop(L);
+
int parentid = lua_tointeger(L,-1);
lua_pop(L,1);
@@ -97,15 +100,11 @@ static int newiguiwindow(lua_State* L){
return 1;
}
-static const luaL_reg iguiwindow_f[] = {
- {"new", newiguiwindow},
- {0,0},
-};
-
static const luaL_reg iguiwindow_m[] = {
{"move", moveiguielement},
{"settext", setiguitext},
{"remove", removeiguielement},
+ {"getid", guigetid},
{0, 0},
};
@@ -116,27 +115,9 @@ int iguiwindow_register(lua_State* L, IrrlichtDevice* d){
lua_pop(L,1);//
lua_getglobal(L,"gui");
- lua_pushstring(L,"newwindow");
lua_pushcfunction(L,newiguiwindow);
- lua_settable(L,-3);
+ lua_setfield(L,-2,"newwindow");
lua_pop(L,1);
return 0;
- //luaL_newmetatable(L, "gui.iguiwindow");
-
- //luaL_register(L,"iguiwindow",iguiwindow_f);
-
- //lua_pushstring(L,"__index");
- //lua_pushstring(L,"gethandeler");
- //lua_gettable(L,-3);
- //lua_settable(L,-4);
-
- //lua_pushstring(L,"__newindex");
- //lua_pushstring(L,"sethandeler");
- //lua_gettable(L,-3);
- //lua_settable(L,-4);
-
- //luaL_register(L, NULL, iguiwindow_m);
-
- //return 1;
}
diff --git a/src/client/lua_api/load_gui.cpp b/src/client/lua_api/load_gui.cpp
index 86c95cc..b2e941b 100644
--- a/src/client/lua_api/load_gui.cpp
+++ b/src/client/lua_api/load_gui.cpp
@@ -11,7 +11,6 @@ extern "C" {
#include "gui/iguibutton.hpp"
#include "gui/iguilabel.hpp"
-#include "gui/iguigeneric.hpp"
#include "gui/iguiwindow.hpp"
#include "gui/iguiskin.hpp"
#include "gui/iguicheckbox.hpp"
@@ -43,7 +42,6 @@ void load_guifuncs(lua_State* L){
iguibutton_register(L,device);
iguilabel_register(L,device);
- iguigeneric_register(L,device);
lua_pop(L, 1);
//Various enums
diff --git a/src/client/lua_api/phys/cbphysbox.cpp b/src/client/lua_api/phys/cbphysbox.cpp
index 6cbd749..3e72672 100644
--- a/src/client/lua_api/phys/cbphysbox.cpp
+++ b/src/client/lua_api/phys/cbphysbox.cpp
@@ -13,6 +13,7 @@ extern "C" {
#include "cbphysbox.hpp"
#include "../scene/imesh.hpp"
#include "../../../shared/lua_api/phys/bphysbox.hpp"
+#include "../scene/igeneric.hpp"
using namespace irr;
using namespace scene;
@@ -134,11 +135,32 @@ int cbphysapplygravity(lua_State* L){
return 0;
}
+//setMaterial(self,material)
+int cbsetmaterial(lua_State* L){
+ printf("Call to setmaterial\n");
+ //SMaterial* mat = (SMaterial*)lua_touserdata(L,-1);//{node=ud_ISceneNode},ud_IMaterial
+ ITexture* tex = (ITexture*)lua_touserdata(L,-1);
+ lua_pop(L,1);//{node=ud_ISceneNode}
+ printf("About to get field node\n");
+ lua_getfield(L,-1,"node");//{node=ud_ISceneNode},ud_ISceneNode
+ printf("After call to field node\n");
+ ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//{node=ud_ISceneNode},ud_ISceneNode
+ lua_pop(L,2);//
+
+ lua_pushlightuserdata(L,i);
+ lua_pushlightuserdata(L,tex);
+ printf("Finished getting everything for setmaterial\n");
+ iscenesetmaterial(L);
+
+ return 0;
+}
+
static const luaL_reg cbphysbox_m[] = {
{"setcpos", cbphyssetpos},//overload
{"getcpos", cbphysgetpos},
{"getgravity", cbphysgetgravity},
{"applygravity",cbphysapplygravity},
+ {"setMaterial", cbsetmaterial},
// {"delete", delbphysbox},//client side delete needs to delete the visual representation
{0, 0},
};
diff --git a/src/client/lua_api/scene/igeneric.cpp b/src/client/lua_api/scene/igeneric.cpp
index 8280008..c016788 100644
--- a/src/client/lua_api/scene/igeneric.cpp
+++ b/src/client/lua_api/scene/igeneric.cpp
@@ -66,14 +66,15 @@ int iscenesetangle(lua_State* L){//{node=ud_ISceneNode},{x,y,z}
return 0;
}
-/*
+//iscenesetmaterial(ud_ISceneNode,ud_itexture)
int iscenesetmaterial(lua_State* L){
- ISceneNode* i = toiscenenode(L,1)->n;
- const char* s = luaL_optstring(L,2,"error.png");
- printf("Setting material to %s",s);
- IVideoDriver* driver = device->getVideoDriver();
- i->setMaterialTexture(0, driver->getTexture(s));
+ printf("Calling generic iscenesetmaterial function\n");
+ ITexture* txt = (ITexture*)lua_touserdata(L,-1);//ud_ISceneNode,ud_itexture
+ lua_pop(L,1);//ud_ISceneNode
+ ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//ud_ISceneNode
+ lua_pop(L,2);//
+
+ i->setMaterialTexture(0,txt);
- return 0;
+ return 0;
}
-*/
diff --git a/src/client/lua_api/scene/imesh.cpp b/src/client/lua_api/scene/imesh.cpp
index f391431..2760067 100644
--- a/src/client/lua_api/scene/imesh.cpp
+++ b/src/client/lua_api/scene/imesh.cpp
@@ -91,19 +91,19 @@ int newiscenecube(lua_State* L){//{v3 size}, {v3 origin}
}
// self:setMaterial("path/to/material")
-int iscenesetmaterial(lua_State* L){//self,"path/to"
- ISceneNode* node = (IMeshSceneNode*)lua_touserdata(L,-2);
- const char* s = lua_tostring(L,-1);
- //ISceneNode* i = toiscenenode(L,1)->n;
- //const char* s = luaL_optstring(L,2,"error.png");
- //printf("Setting material to %s",s);
-
- IVideoDriver* driver = device->getVideoDriver();
- node->setMaterialTexture(0, driver->getTexture(s));
-
- lua_pop(L,2);
- return 0;
-}
+//int iscenesetmaterial(lua_State* L){//self,"path/to"
+ //ISceneNode* node = (IMeshSceneNode*)lua_touserdata(L,-2);
+ //const char* s = lua_tostring(L,-1);
+ ////ISceneNode* i = toiscenenode(L,1)->n;
+ ////const char* s = luaL_optstring(L,2,"error.png");
+ ////printf("Setting material to %s",s);
+
+ //IVideoDriver* driver = device->getVideoDriver();
+ //node->setMaterialTexture(0, driver->getTexture(s));
+
+ //lua_pop(L,2);
+ //return 0;
+//}
static const luaL_reg imesh_m[] = {
{"setMaterial", iscenesetmaterial},
diff --git a/src/client/lua_api/video/smaterial.cpp b/src/client/lua_api/video/smaterial.cpp
index e5b9eff..c72d4ca 100644
--- a/src/client/lua_api/video/smaterial.cpp
+++ b/src/client/lua_api/video/smaterial.cpp
@@ -10,18 +10,48 @@ extern "C" {
using namespace irr::video;
/*This probably needs a _gc metamethod*/
+//newsmaterial()
int newsmaterial(lua_State* L){
+
SMaterial* mat = new SMaterial();
- lua_pushlightuserdata(L,mat);
+ lua_pushlightuserdata(L,mat);//ud_smaterial
+
+ luaL_getmetatable(L,"smaterial");//ud_smaterial,{m_smaterial}
+ lua_setmetatable(L,-2);//ud_smaterial
+ return 1;
+}
+
+//setMaterial(self,int_num,{ITexture texture})
+int setTexture(lua_State* L){
+ ITexture* tex = (ITexture*)lua_touserdata(L,-1);
+ lua_pop(L,1);
+ double num = lua_tonumber(L,-1);
+ lua_pop(L,1);
+ SMaterial* self = (SMaterial*)lua_touserdata(L,-1);
+ lua_pop(L,1);
return 0;
}
+static const luaL_reg smaterial_m[] = {
+ {"setTexture", setTexture},
+ {0,0},
+};
+
#define set_const(l,x) lua_pushstring(l,#x);lua_pushinteger(l,x);lua_settable(l,-3);
void smaterial_register(lua_State* L){
//Add globals dealing with material flags
+ luaL_newmetatable(L,"smaterial");//{m_smaterial}
+
+ lua_newtable(L);//{m_smaterial},{}
+ luaL_register(L,NULL,smaterial_m);//{m_smaterial},{smaterial}
+
+ lua_setfield(L,-2,"__index");//{m_smaterial}
+
+ lua_pop(L,1);//
+
lua_getglobal(L,"video");//{}
set_const(L,EMF_WIREFRAME);
@@ -46,6 +76,8 @@ void smaterial_register(lua_State* L){
set_const(L,EMF_POLYGON_OFFSET);
lua_pushcfunction(L,newsmaterial);//{},newsmaterial
- lua_setfield(L,-2,"newsmaterial");
+ lua_setfield(L,-2,"newsmaterial");//{}
+
+ lua_pop(L,1);//
}