aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/callbackhandeler.cpp173
-rw-r--r--src/client/callbackhandeler.hpp3
-rw-r--r--src/client/lua_api/gui/iguibutton.cpp112
-rw-r--r--src/client/lua_api/gui/iguibutton.hpp2
-rw-r--r--src/client/lua_api/gui/iguicheckbox.cpp6
-rw-r--r--src/client/lua_api/gui/iguielement.cpp181
-rw-r--r--src/client/lua_api/gui/iguielement.hpp1
-rw-r--r--src/client/lua_api/gui/iguilabel.cpp144
-rw-r--r--src/client/lua_api/gui/iguilabel.hpp2
-rw-r--r--src/client/lua_api/gui/iguiwindow.cpp25
-rw-r--r--src/client/lua_api/load_gui.cpp47
-rw-r--r--src/client/lua_api/phys/cbphysbox.cpp4
-rw-r--r--src/client/lua_api/scene/icamera.cpp48
-rw-r--r--src/client/lua_api/scene/igeneric.cpp10
-rw-r--r--src/client/lua_api/scene/ilight.cpp18
-rw-r--r--src/client/lua_api/scene/imesh.cpp10
-rw-r--r--src/client/lua_api/video/smaterial.cpp19
-rw-r--r--src/client/main.cpp8
-rw-r--r--src/client/menuhandeler.cpp3
-rw-r--r--src/shared/lua_api/common.cpp11
-rw-r--r--src/shared/lua_api/common.hpp1
-rw-r--r--src/shared/lua_api/load_net.cpp6
22 files changed, 470 insertions, 364 deletions
diff --git a/src/client/callbackhandeler.cpp b/src/client/callbackhandeler.cpp
index 76fe693..1200074 100644
--- a/src/client/callbackhandeler.cpp
+++ b/src/client/callbackhandeler.cpp
@@ -17,102 +17,163 @@ using namespace std;
extern lua_State* L;
-std::map<IGUIElement*,std::map<EGUI_EVENT_TYPE, bool(*)(irr::SEvent)> > guifuncs;
+std::map<IGUIElement*, int> guielements;
//IrrlichtDevice* device;
-void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, bool (*func)(irr::SEvent)){
- printf("Callback registered\n");
- guifuncs[element][event] = func;
+//For basic events
+//{guielement}
+void registerguielement(lua_State* L){
+ int ref = luaL_ref(L,LUA_REGISTRYINDEX);//
+ lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement}
+ lua_getfield(L,-1,"guielement");//{guielement},ud_guielement
+ IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);//{guielement},ud_guielement
+ guielements[el] = ref;
+ lua_pop(L,1);//{guielement}
}
+//void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, bool (*func)(irr::SEvent)){
+ //printf("Callback registered\n");
+ //guifuncs[element][event] = func;
+//}
+////For objects that have overloaded ()
+//void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, std::function<bool(irr::SEvent)> obj){
+ //guifuncs[element][event] = obj;
+//}
GlobalEventReceiver::GlobalEventReceiver(IrrlichtDevice* d){
+
//device = d;
}
+
+void callMouse(lua_State* L, const char* funcname, double x, double y, double event){
+ lua_getglobal(L,"GAME");
+ lua_getfield(L,-1,funcname);
+ if(!lua_isnil(L,-1)){
+ lua_pushnumber(L,x);
+ lua_pushnumber(L,y);
+ lua_pushnumber(L,event);
+ lua_call(L,3,0);
+ lua_pop(L,1);
+ }else{
+ lua_pop(L,2);
+ }
+}
+
bool GlobalEventReceiver::OnEvent(const SEvent& e){
+ //lua_State* L = this->L;
EEVENT_TYPE type = e.EventType;
+ SEvent::SMouseInput se = e.MouseInput;
//printf("Onevent called:%d\n",(int)type);
switch (type){
case EET_GUI_EVENT:{
+ //printf("Gui event\n");
IGUIElement* caller = e.GUIEvent.Caller;
EGUI_EVENT_TYPE get = e.GUIEvent.EventType;
//printf("detected gui event: %d\n",get);
- bool callerregistered = guifuncs.find(caller) != guifuncs.end();
- bool callerhasfunc = guifuncs[caller].find(get) != guifuncs[caller].end();
- if (callerregistered && callerhasfunc){
- //printf("Found a callback for this event\n");
- return guifuncs[caller][get](e);
+ if(guielements.find(caller) == guielements.end())
+ return false;
+ int ref = guielements[caller];
+ lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement}
+ const char* fieldname;
+ switch(get){
+ case EGET_ELEMENT_FOCUSED: fieldname = "onFocus"; break;
+ case EGET_ELEMENT_FOCUS_LOST: fieldname = "onUnfocus"; break;
+ case EGET_ELEMENT_HOVERED: fieldname = "onHover"; break;
+ case EGET_ELEMENT_LEFT: fieldname = "onLeave"; break;
+ case EGET_ELEMENT_CLOSED: fieldname = "onClose"; break;
+ case EGET_BUTTON_CLICKED: fieldname = "onClick"; break;
+ case EGET_SCROLL_BAR_CHANGED: fieldname = "onScroll"; break;
+ case EGET_CHECKBOX_CHANGED: fieldname = "onCheck"; break;
+ case EGET_LISTBOX_CHANGED: fieldname = "onChange"; break;
+ case EGET_LISTBOX_SELECTED_AGAIN: fieldname = "onSame"; break;
+ case EGET_FILE_SELECTED: fieldname = "onFileSelect"; break;
+ case EGET_DIRECTORY_SELECTED: fieldname = "onDirectorySelect"; break;
+ case EGET_FILE_CHOOSE_DIALOG_CANCELLED: fieldname = "onFileChooserCancel"; break;
+ case EGET_MESSAGEBOX_YES: fieldname = "onYes"; break;
+ case EGET_MESSAGEBOX_NO: fieldname = "onNo"; break;
+ case EGET_MESSAGEBOX_OK: fieldname = "onOk"; break;
+ case EGET_MESSAGEBOX_CANCEL: fieldname = "onCancel"; break;
+ case EGET_EDITBOX_ENTER: fieldname = "onEneter"; break;
+ case EGET_EDITBOX_CHANGED: fieldname = "onChange"; break;
+ case EGET_EDITBOX_MARKING_CHANGED: fieldname = "onMarkChange"; break;
+ case EGET_TAB_CHANGED: fieldname = "onTabChange"; break;
+ case EGET_MENU_ITEM_SELECTED: fieldname = "onSelect"; break;
+ case EGET_COMBO_BOX_CHANGED: fieldname = "onChange"; break;
+ case EGET_SPINBOX_CHANGED: fieldname = "onChange"; break;
+ case EGET_TABLE_CHANGED: fieldname = "onChange"; break;
+ case EGET_TABLE_HEADER_CHANGED: fieldname = "onHeadersChange"; break;
+ case EGET_TABLE_SELECTED_AGAIN: fieldname = "onReselect"; break;
+ case EGET_TREEVIEW_NODE_DESELECT: fieldname = "onNodeDeselect"; break;
+ case EGET_TREEVIEW_NODE_SELECT: fieldname = "onNodeSelect"; break;
+ case EGET_TREEVIEW_NODE_EXPAND: fieldname = "onNodeExpand"; break;
+ case EGET_TREEVIEW_NODE_COLLAPSE: fieldname = "onNodeCollapse"; break;
+ case EGET_COUNT: break;
}
- return false;
- break;
+
+ //printf("got fieldname:%s\n",fieldname);
+ lua_getfield(L,-1,fieldname);//{guielement},func()
+ if(lua_isnil(L,-1)){
+ lua_pop(L,2);
+ return false;
+ }
+ lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement},func(),{guielement}
+ lua_call(L,1,0);//{guielement}
+ lua_pop(L,1);//
+ return true;
}
+ break;
case EET_MOUSE_INPUT_EVENT:{
- SEvent::SMouseInput se = e.MouseInput;
- //printf("X: %d Y: %d\n",se.X, se.Y);
+ //printf("Mouse event - X: %d Y: %d\n",se.X, se.Y);
switch(se.Event){
case EMIE_MOUSE_MOVED:{
+ //printf("Mouse moved...\n");
lua_getglobal(L,"GAME");//{}
lua_getfield(L,-1,"onMouseMove");//{},onMouseMove()
if(!lua_isnil(L,-1)){
- lua_pushnumber(L,se.X);
- lua_pushnumber(L,se.Y);
- lua_call(L,2,0);
- lua_pop(L,1);
+ lua_pushnumber(L,se.X);//{},onMouseMove(),X
+ lua_pushnumber(L,se.Y);//{},onMouseMove(),Y
+ lua_call(L,2,0);//{}
+ lua_pop(L,1);//
}else{
lua_pop(L,2);
}
- break;
}
+ break;
case EMIE_LMOUSE_PRESSED_DOWN:
case EMIE_RMOUSE_PRESSED_DOWN:
case EMIE_MMOUSE_PRESSED_DOWN:{
- lua_getglobal(L,"GAME");
- lua_getfield(L,-1,"onMouseDown");
- if(!lua_isnil(L,-1)){
- lua_pushnumber(L,se.X);
- lua_pushnumber(L,se.Y);
- lua_pushnumber(L,se.Event);
- lua_call(L,3,0);
- lua_pop(L,1);
- }else{
- lua_pop(L,2);
- }
- break;
+ printf("Mouse down\n");
+ callMouse(L,"onMouseDown",se.X,se.Y,se.Event);
}
+ break;
case EMIE_LMOUSE_LEFT_UP:
case EMIE_RMOUSE_LEFT_UP:
case EMIE_MMOUSE_LEFT_UP:{
- lua_getglobal(L,"GAME");
- lua_getfield(L,-1,"onMouseUp");
- if(!lua_isnil(L,-1)){
- lua_pushnumber(L,se.X);
- lua_pushnumber(L,se.Y);
- lua_pushnumber(L,se.Event);
- lua_call(L,3,0);
- lua_pop(L,1);
- }else{
- lua_pop(L,2);
- }
- break;
+ printf("Mouse up\n");
+ callMouse(L,"onMouseUp",se.X,se.Y,se.Event);
}
+ break;
case EMIE_MOUSE_WHEEL:{
- lua_getglobal(L,"GAME");
- lua_getfield(L,-1,"onMouseWheel");
- if(!lua_isnil(L,-1)){
- lua_pushnumber(L,se.X);
- lua_pushnumber(L,se.Y);
- lua_pushnumber(L,se.Wheel);
- lua_call(L,3,0);
- lua_pop(L,1);
- }else{
- lua_pop(L,2);
- }
+ callMouse(L,"onMouseWheel",se.X,se.Y,se.Wheel);
}
+ break;
+ case EMIE_RMOUSE_DOUBLE_CLICK:
+ case EMIE_MMOUSE_DOUBLE_CLICK:
+ case EMIE_LMOUSE_DOUBLE_CLICK:{
+ callMouse(L,"onDoubleClick",se.X,se.Y,se.Event);
}
-
break;
+ case EMIE_RMOUSE_TRIPLE_CLICK:
+ case EMIE_MMOUSE_TRIPLE_CLICK:
+ case EMIE_LMOUSE_TRIPLE_CLICK:{
+ callMouse(L,"onTripleClick",se.X,se.Y,se.Event);
+ }
+ break;
+ case EMIE_COUNT:break;
+ }
}
+ break;
case EET_KEY_INPUT_EVENT:{
//printf("Got input event\n");
SEvent::SKeyInput se = e.KeyInput;
@@ -130,8 +191,10 @@ bool GlobalEventReceiver::OnEvent(const SEvent& e){
}
break;
}
- default:
+ default:{
//printf("Called an unknown event\n");
return false;
}
+ }
+ return true;
}
diff --git a/src/client/callbackhandeler.hpp b/src/client/callbackhandeler.hpp
index 7bed591..a48213d 100644
--- a/src/client/callbackhandeler.hpp
+++ b/src/client/callbackhandeler.hpp
@@ -11,8 +11,9 @@ extern "C" {
using namespace irr;
using namespace gui;
-void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, bool (*func)(irr::SEvent));
+//void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, bool (*func)(irr::SEvent));
+void registerguielement(lua_State* L);
class GlobalEventReceiver : public irr::IEventReceiver{
public:
diff --git a/src/client/lua_api/gui/iguibutton.cpp b/src/client/lua_api/gui/iguibutton.cpp
index 86e6db8..25a30ed 100644
--- a/src/client/lua_api/gui/iguibutton.cpp
+++ b/src/client/lua_api/gui/iguibutton.cpp
@@ -24,53 +24,53 @@ using namespace gui;
extern IrrlichtDevice* device;
char lhashkey[20];
-static LIGUIElement* checkiguibutton(lua_State* L, int index){
- void* ud = luaL_checkudata(L,index,"gui.iguibutton");
- luaL_argcheck(L,ud != NULL, index, "'gui.iguibutton' expected");
- return (LIGUIElement*) ud;
-}
+//static LIGUIElement* checkiguibutton(lua_State* L, int index){
+ //void* ud = luaL_checkudata(L,index,"gui.iguibutton");
+ //luaL_argcheck(L,ud != NULL, index, "'gui.iguibutton' expected");
+ //return (LIGUIElement*) ud;
+//}
-static LIGUIElement* checkiguibutton(lua_State* L){
- return checkiguibutton(L,1);
-}
+//static LIGUIElement* checkiguibutton(lua_State* L){
+ //return checkiguibutton(L,1);
+//}
//The callback even for all gui buttons
-static bool iguibuttonevent(irr::SEvent e){
- IGUIElement* caller = (IGUIElement*)e.GUIEvent.Caller;
- printf("Some gui something somewhere was pressed\n");
- if(iguielements.find(caller) != iguielements.end()){
- printf("I know what reference is linked to that button: %d!\n",iguielements[caller]);
- int ref = iguielements[caller];
- EGUI_EVENT_TYPE etype = e.GUIEvent.EventType;
- if(etype == EGET_BUTTON_CLICKED){
- lua_rawgeti(tL,LUA_REGISTRYINDEX,ref);
- printf("getting raw, the thing on the top of stack is a %s\n",luaL_typename(tL,-1));
- LIGUIElement* tbut = checkiguibutton(tL,-1);
- int hashmapresponse;
- char* hashkey = (char*)"onpress";
- int terror = hashmap_get(tbut->funcmap,hashkey,(void**)&hashmapresponse);
- if(terror == MAP_OK){
- lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse);
- lua_call(tL,0,0);
- }else{
- printf("Tried to call onpress on something that dosen't have onpress\n");
- }
- }else if(etype == EGET_ELEMENT_HOVERED){
- printf("Trying to call onhovered!\n");
- lua_rawgeti(tL,LUA_REGISTRYINDEX,ref);
- LIGUIElement* tbut = (LIGUIElement*)lua_touserdata(tL,-1);
- int hashmapresponse;
- int terror = hashmap_get(tbut->funcmap,(char*)"onhovered",(void**)&hashmapresponse);
- if(terror == MAP_OK){
- lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse);
- lua_call(tL,0,0);
- }
- }
- }
- return false;
-}
-
-//gui.newbutton({x,y},{width,height},text[,parent])
+//static bool iguibuttonevent(irr::SEvent e){
+ //IGUIElement* caller = (IGUIElement*)e.GUIEvent.Caller;
+ //printf("Some gui something somewhere was pressed\n");
+ //if(iguielements.find(caller) != iguielements.end()){
+ //printf("I know what reference is linked to that button: %d!\n",iguielements[caller]);
+ //int ref = iguielements[caller];
+ //EGUI_EVENT_TYPE etype = e.GUIEvent.EventType;
+ //if(etype == EGET_BUTTON_CLICKED){
+ //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref);
+ //printf("getting raw, the thing on the top of stack is a %s\n",luaL_typename(tL,-1));
+ //LIGUIElement* tbut = checkiguibutton(tL,-1);
+ //int hashmapresponse;
+ //char* hashkey = (char*)"onpress";
+ //int terror = hashmap_get(tbut->funcmap,hashkey,(void**)&hashmapresponse);
+ //if(terror == MAP_OK){
+ //lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse);
+ //lua_call(tL,0,0);
+ //}else{
+ //printf("Tried to call onpress on something that dosen't have onpress\n");
+ //}
+ //}else if(etype == EGET_ELEMENT_HOVERED){
+ //printf("Trying to call onhovered!\n");
+ //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref);
+ //LIGUIElement* tbut = (LIGUIElement*)lua_touserdata(tL,-1);
+ //int hashmapresponse;
+ //int terror = hashmap_get(tbut->funcmap,(char*)"onhovered",(void**)&hashmapresponse);
+ //if(terror == MAP_OK){
+ //lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse);
+ //lua_call(tL,0,0);
+ //}
+ //}
+ //}
+ //return false;
+//}
+
+//gui.newbutton({{sx,sy},{ex,ey}},"text"[,parent])
static int newiguibutton(lua_State* L){
printf("Createing gui button!\n");
@@ -86,19 +86,21 @@ static int newiguibutton(lua_State* L){
const wchar_t* label_w = irr::core::stringw(label_c).c_str();
lua_pop(L,1);
- long x,y,w,h;
- popvector2i(L,&w,&h);
- popvector2i(L,&x,&y);
+ long sx,sy,ex,ey;
+ poprecti(L,&sx,&sy,&ex,&ey);
- rect<s32> dim = rect<s32>(x,y,x+w,y+h);
+ rect<s32> dim = rect<s32>(sx,sy,ex,ey);
IGUIEnvironment* env = device->getGUIEnvironment();
IGUIButton* but = env->addButton(dim,parent,-2,label_w,L"");
- lua_pushlightuserdata(L,but);//
- luaL_getmetatable(L,"gui.iguibutton");
- lua_setmetatable(L,-2);
-
- registerguicallback(but,EGET_BUTTON_CLICKED,iguibuttonevent);
+ lua_newtable(L);//{}
+ lua_pushlightuserdata(L,but);//{},ud_iguibutton
+ lua_setfield(L,-2,"guielement");//{guielement}
+ luaL_getmetatable(L,"gui.iguibutton");//{guielement},{m_iguibutton}
+ lua_setmetatable(L,-2);//{guielement}
+
+ setelementcallback(L,EGET_BUTTON_CLICKED,"onClicked");//
+
printf("Finished registering callback\n");
return 1;
@@ -106,8 +108,6 @@ static int newiguibutton(lua_State* L){
static const luaL_reg iguibutton_f[] = {
{"new", newiguibutton},
- {"gethandeler", guigethandeler},
- {"sethandeler", guisethandeler},
{0,0},
};
@@ -118,7 +118,7 @@ static const luaL_reg iguibutton_m[] = {
{0,0},
};
-int iguibutton_register(lua_State* L){
+void iguibutton_register(lua_State* L){
tL = L;
luaL_newmetatable(L, "gui.iguibutton");//{m_iguibutton}
diff --git a/src/client/lua_api/gui/iguibutton.hpp b/src/client/lua_api/gui/iguibutton.hpp
index abccbf0..b1595d3 100644
--- a/src/client/lua_api/gui/iguibutton.hpp
+++ b/src/client/lua_api/gui/iguibutton.hpp
@@ -8,4 +8,4 @@ extern "C" {
}
#include <irrlicht.h>
-int iguibutton_register(lua_State* L);
+void iguibutton_register(lua_State* L);
diff --git a/src/client/lua_api/gui/iguicheckbox.cpp b/src/client/lua_api/gui/iguicheckbox.cpp
index ec9cb93..8e1a643 100644
--- a/src/client/lua_api/gui/iguicheckbox.cpp
+++ b/src/client/lua_api/gui/iguicheckbox.cpp
@@ -20,11 +20,11 @@ int newiguicheckbox(lua_State* L){
IGUIElement* par = 0;
if(lua_gettop(L) > 3){
par = (IGUIElement*)lua_touserdata(L,-1);//{startx,starty},{endx,endy},"checkbox_name",ud_parent
- printf("Checkbox's parent was %s\n",par);
+ printf("Checkbox's parent was %p\n",par);
lua_pop(L,1);//{startx,starty},{endx,endy},"checkbox_name"
}
const char* text = lua_tostring(L,-1);
- int tlen = strlen(text);
+ //int tlen = strlen(text);
lua_pop(L,1);//{startx,starty},{endx,endy}
long startx,starty,endx,endy;
popvector2i(L,&endx,&endy);//{startx,starty}
@@ -40,7 +40,7 @@ int newiguicheckbox(lua_State* L){
static const luaL_reg iguicheckbox_m[] = {
{"move", moveiguielement},
{"setText", setiguitext},
- {"remove", guisethandeler},
+ //{"remove", guisethandeler},
{0,0},
};
diff --git a/src/client/lua_api/gui/iguielement.cpp b/src/client/lua_api/gui/iguielement.cpp
index d14c18e..bdc13df 100644
--- a/src/client/lua_api/gui/iguielement.cpp
+++ b/src/client/lua_api/gui/iguielement.cpp
@@ -9,21 +9,22 @@ extern "C" {
#include <shared/lua_api/common.hpp>
#include <irrlicht.h>
#include "../guiparts.hpp"
+#include <client/callbackhandeler.hpp>
using namespace irr;
using namespace core;
using namespace gui;
-static LIGUIElement* toiguielement(lua_State* L,int index){
- LIGUIElement* ret = (LIGUIElement*)lua_touserdata(L,index);
- if(ret == NULL)
- luaL_typerror(L,index,"LIGUIButton");
- return ret;
-}
+//static LIGUIElement* toiguielement(lua_State* L,int index){
+ //LIGUIElement* ret = (LIGUIElement*)lua_touserdata(L,index);
+ //if(ret == NULL)
+ //luaL_typerror(L,index,"LIGUIButton");
+ //return ret;
+//}
-static LIGUIElement* toiguielement(lua_State* L){
- return toiguielement(L,1);
-}
+//static LIGUIElement* toiguielement(lua_State* L){
+ //return toiguielement(L,1);
+//}
//move({element},{x,y}) -> nil
int moveiguielement(lua_State* L){
@@ -45,18 +46,16 @@ int moveiguielement(lua_State* L){
int getiguiclippingrect(lua_State* L){
printf("Getting iguiclipping elemnt\n");
lua_getfield(L,-1,"guielement");
- IGUIElement *el = (IGUIElement*)lua_touserdata(L,-1);
+ IGUIElement *el = (IGUIElement*)lua_touserdata(L,-1);//{element},ud_element
+ lua_pop(L,2);
core::rect<s32> rect = el->getAbsoluteClippingRect();
- position2d<s32> ul = rect.UpperLeftCorner;
- position2d<s32> lr = rect.LowerRightCorner;
- lua_newtable(L);
- lua_pushnumber(L,1);
- double sx,sy,ex,ey;
- pushvector2i(L,ul.X,ul.Y);
- lua_settable(L,-3);
- lua_pushnumber(L,2);
- pushvector2i(L,lr.X,lr.Y);
- lua_settable(L,-3);
+ pushrecti(
+ L,
+ rect.UpperLeftCorner.X,
+ rect.UpperLeftCorner.Y,
+ rect.LowerRightCorner.X,
+ rect.LowerRightCorner.Y
+ );
return 1;
}
/*
@@ -69,15 +68,19 @@ int moveiguielement(lua_State* L){
}
*/
+//setText({guielement},"text") :: nil
int setiguitext(lua_State* L){
- LIGUIElement* ele = toiguielement(L,1);
- const char* str = luaL_optstring(L,2,"");
- int size = strlen(str);
- wchar_t* al = (wchar_t*)malloc(sizeof(wchar_t)*size);
- mbstowcs(al,str,size);
- ele->e->setText(al);
- free(al);
- return 0;
+ const char* text = lua_tostring(L, -1);
+ lua_pop(L,1);//{guielement}
+ lua_getfield(L,-1,"guielement");//{guielement},ud_iguielement
+ IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);//{guielement},ud_iguielement
+ lua_pop(L,2);
+ int textlen = strlen(text);
+ wchar_t* wtext = (wchar_t*)malloc(sizeof(wchar_t)*textlen);
+ mbstowcs(wtext,text,textlen);
+ el->setText(wtext);
+ free(wtext);
+ return 0;
}
//remove({self})
@@ -89,50 +92,90 @@ int removeiguielement(lua_State* L){
return 0;
}
-int guigethandeler(lua_State* L){
- printf("Called the get index handeler!\n");
- LIGUIElement* button = toiguielement(L);
- if(!lua_isstring(L,2)){
- luaL_error(L,"index of iguibutton must be of type 'string'");
- }
- const char* lstr = lua_tostring(L,2);
- char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr));
- strcpy(hashkey,lstr);
- int ref;
- if(hashmap_get(button->funcmap,hashkey,(void**)&ref) == MAP_OK){
- //We found the value in our hashmap!
- lua_rawgeti(L,LUA_REGISTRYINDEX,ref);
- return 1;
- }else{
- //Could not find in hashmap, check parrent
- lua_getglobal(L,button->type);
- printf("Button's type is %s\n",button->type);
- lua_getfield(L,-1,lstr);
- return 1;
- }
-}
-int guisethandeler(lua_State* L){
- printf("Called the set index handeler\n");
- LIGUIElement* button = toiguielement(L);
- if(!lua_isstring(L,2)){
- luaL_error(L,"index of iguibutton must be of type 'string'");
- }
- const char* lstr = lua_tostring(L,2);
- char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr));
- strcpy(hashkey,lstr);
- int oldref;
- if(hashmap_get(button->funcmap,hashkey,(void**)&oldref) == MAP_OK){
- luaL_unref(L,LUA_REGISTRYINDEX,oldref);
- hashmap_remove(button->funcmap,hashkey);
- }
- int ref = luaL_ref(L,LUA_REGISTRYINDEX);
- if(hashmap_put(button->funcmap,hashkey,(void*)ref) != MAP_OK){
- luaL_error(L,"Error while setting the hashkey on iguibutton");
- }
- return 0;
+class guicallback{
+private:
+ int luaitem;
+ const char* funcname;
+ lua_State* L;
+public:
+ guicallback(lua_State* L, int lf, const char* fn){
+ this->luaitem = lf;
+ this->L = L;
+ this->funcname = fn;
+ }
+ bool operator () (SEvent e) {
+ lua_rawgeti(L,LUA_REGISTRYINDEX,this->luaitem);//{guielement}
+ lua_getfield(L,-1,this->funcname);//{guielement},func()
+ if(!lua_isnil(L,-1)){
+ lua_rawgeti(L,LUA_REGISTRYINDEX,this->luaitem);//{guielement},func(),{guielement}
+ lua_call(L,1,0);//{iguielement}
+ lua_pop(L,1);//{}
+ return true;
+ }else{
+ lua_pop(L,2);//{}
+ return false;
+ }
+ }
+};
+
+//{guielement}
+//popelementcallback(lua_State* L, gui::EGUI_EVENT_TYPE, char*)
+void setelementcallback(lua_State* L,gui::EGUI_EVENT_TYPE et, const char* funcname){
+ //lua_getfield(L,-1,"guielement");//{guielement}
+ //IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);//{guielement},ud_element
+ //lua_pop(L,1);//{guielement}
+ registerguielement(L);
+ //int ref = luaL_ref(L,LUA_REGISTRYINDEX);//
+ //guicallback* gc = new guicallback(L,ref,funcname);//TODO:Clean this up somehow
+ //popregisterguicallback(el,et, gc);
+ //lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement}
}
+//int guigethandeler(lua_State* L){
+ //printf("Called the get index handeler!\n");
+ //LIGUIElement* button = toiguielement(L);
+ //if(!lua_isstring(L,2)){
+ //luaL_error(L,"index of iguibutton must be of type 'string'");
+ //}
+ //const char* lstr = lua_tostring(L,2);
+ //char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr));
+ //strcpy(hashkey,lstr);
+ //int ref;
+ //if(hashmap_get(button->funcmap,hashkey,(void**)&ref) == MAP_OK){
+ ////We found the value in our hashmap!
+ //lua_rawgeti(L,LUA_REGISTRYINDEX,ref);
+ //return 1;
+ //}else{
+ ////Could not find in hashmap, check parrent
+ //lua_getglobal(L,button->type);
+ //printf("Button's type is %s\n",button->type);
+ //lua_getfield(L,-1,lstr);
+ //return 1;
+ //}
+//}
+
+//int guisethandeler(lua_State* L){
+ //printf("Called the set index handeler\n");
+ //LIGUIElement* button = toiguielement(L);
+ //if(!lua_isstring(L,2)){
+ //luaL_error(L,"index of iguibutton must be of type 'string'");
+ //}
+ //const char* lstr = lua_tostring(L,2);
+ //char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr));
+ //strcpy(hashkey,lstr);
+ //int oldref;
+ //if(hashmap_get(button->funcmap,hashkey,(void**)&oldref) == MAP_OK){
+ //luaL_unref(L,LUA_REGISTRYINDEX,oldref);
+ //hashmap_remove(button->funcmap,hashkey);
+ //}
+ //int ref = luaL_ref(L,LUA_REGISTRYINDEX);
+ //if(hashmap_put(button->funcmap,hashkey,(void*)ref) != MAP_OK){
+ //luaL_error(L,"Error while setting the hashkey on iguibutton");
+ //}
+ //return 0;
+//}
+
//ud_iguielement
int guigetid(lua_State* L){
IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);
diff --git a/src/client/lua_api/gui/iguielement.hpp b/src/client/lua_api/gui/iguielement.hpp
index 84fc2c9..f860d7e 100644
--- a/src/client/lua_api/gui/iguielement.hpp
+++ b/src/client/lua_api/gui/iguielement.hpp
@@ -12,6 +12,7 @@ int moveiguielement(lua_State* L);
int getiguiclippingrect(lua_State* L);
int setiguitext(lua_State* L);
int removeiguielement(lua_State* L);
+void setelementcallback(lua_State* L, irr::gui::EGUI_EVENT_TYPE et, const char* funcname);
int guigethandeler(lua_State* L);
int guisethandeler(lua_State* L);
int guigetid(lua_State* L);
diff --git a/src/client/lua_api/gui/iguilabel.cpp b/src/client/lua_api/gui/iguilabel.cpp
index 7c00e84..dce1b15 100644
--- a/src/client/lua_api/gui/iguilabel.cpp
+++ b/src/client/lua_api/gui/iguilabel.cpp
@@ -13,89 +13,64 @@ extern "C" {
#include <irrlicht.h>
#include "../guiparts.hpp"
#include "iguielement.hpp"
+#include "iguilabel.hpp"
#include "../../callbackhandeler.hpp"
+#include <shared/lua_api/common.hpp>
using namespace irr;
using namespace gui;
-//IrrlichtDevice* guidevice;
-
-static LIGUIElement* checkiguilabel(lua_State* L, int index){
- void* ud = luaL_checkudata(L,index,"gui.iguilabel");
- luaL_argcheck(L,ud != NULL, index, "'gui.iguilabel' expected");
- return (LIGUIElement*) ud;
-}
-
-static LIGUIElement* checkiguilabel(lua_State* L){
- return checkiguilabel(L,1);
-}
+extern IrrlichtDevice* device;
-static bool iguilabelevent(irr::SEvent e){
- printf("Oh no! an iguilabel generated an event!");
- return false;
-}
+//IrrlichtDevice* guidevice;
+//static bool iguilabelevent(irr::SEvent e){
+ //printf("Oh no! an iguilabel generated an event!");
+ //return false;
+//}
+//gui.newguilabel({{sx,sy},{ex,ey}},"text"[,parent]) :: {guielement}
static int newiguilabel(lua_State* L){
- printf("Createing label!\n");
- int nargs = lua_gettop(L);
- //The position of the text
- int startx = luaL_optint(L,1,0);
- int starty = luaL_optint(L,2,0);
- int endx = luaL_optint(L,3,startx+100);
- int endy = luaL_optint(L,4,starty+100);
-
- //Label and tooltip
- wchar_t* label;
- const char* labelopt = luaL_optstring(L,5,"Label");
- int bls = strlen(labelopt);
- label = (wchar_t*)malloc(sizeof(wchar_t)*(bls));
- mbstowcs(label,labelopt,bls);
- printf("Got the string option\n");
-
- //If the element has a parrent
- int parent = 0;
- if(nargs >= 6){
- parent = luaL_optint(L,6,0);
- printf("got the parrent\n");
- }
-
-
- //Create the button
- IGUIEnvironment* env = guidevice->getGUIEnvironment();
- //Create the label
- IGUIStaticText* llabel = (IGUIStaticText*) env->addStaticText(label,core::rect<s32>(startx,starty,endx,endy),false,false, guielements[parent], gui_elenum++, false);
- printf("Created the button\n");
-
- //Register it's callback
- registerguicallback(llabel,EGET_ELEMENT_HOVERED,iguilabelevent);
-
- //Create it's lua representation
- LIGUIElement* ltext = (LIGUIElement*)lua_newuserdata(L, sizeof(LIGUIElement));
- int tref = luaL_ref(L,LUA_REGISTRYINDEX);
- iguielements[llabel] = tref;
- lua_rawgeti(L,LUA_REGISTRYINDEX,tref);//Put it back on the stack since luaL_ref pops the object.
-
- //Set it's metatable
- luaL_getmetatable(L, "gui.iguilabel");
- lua_setmetatable(L, -2);
-
- //Create the struct
- ltext->e = llabel;
- ltext->funcmap = hashmap_new();
- ltext->type = "iguilabel";
-
- //Free up anything made in this function
- free(label);
-
- //Put it on top and return it
- lua_rawgeti(L,LUA_REGISTRYINDEX,tref);
- return 1;
+ printf("Createing label!\n");
+ int nargs = lua_gettop(L);
+ IGUIElement* parent = NULL;
+ if(nargs == 3){
+ lua_getfield(L,-1,"guielement");//{{sx,sy},{ex,ey}},"text",{guielemtn=parent},parent
+ parent = (IGUIElement*)lua_touserdata(L,-1);
+ lua_pop(L,2);//{{sx,sy},{ex,ey}},"text"
+ }
+ //{{sx,sy},{ex,ey}},"text"
+
+ const char* text = lua_tostring(L,-1);//{{sx,sy},{ex,ey}},"text"
+ int bls = strlen(text);
+ wchar_t* text_w = (wchar_t*)malloc(sizeof(wchar_t)*bls);
+ mbstowcs(text_w,text,bls);
+ lua_pop(L,1);//{{sx,sy},{ex,ey}}
+
+ long sx, sy, ex, ey;
+ poprecti(L,&sx,&sy,&ex,&ey);//
+
+ IGUIEnvironment* env = device->getGUIEnvironment();
+ IGUIStaticText* statictext = env->addStaticText(
+ text_w,
+ core::rect<s32>(sx,sy,ex,ey),
+ false,
+ false,
+ parent,
+ -1,
+ false
+ );
+
+ lua_newtable(L); //{}
+ lua_pushlightuserdata(L,statictext);//{},*statictext
+ lua_setfield(L,-2,"guielement");//{guielement}
+ luaL_getmetatable(L,"gui.iguilabel");//{guielement},{m_guielement}
+ lua_setmetatable(L,-2);//{guielement}
+ registerguielement(L);
+ return 1;
}
static const luaL_reg iguilabel_f[] = {
- {"new", newiguilabel},
- {"gethandeler", guigethandeler},
- {"sethandeler", guisethandeler},
+ {"newlabel", newiguilabel},
{0,0},
};
@@ -106,23 +81,16 @@ static const luaL_reg iguilabel_m[] = {
{0, 0},
};
-int iguilabel_register(lua_State* L, IrrlichtDevice* d){
-
- luaL_newmetatable(L, "gui.iguilabel");
-
- luaL_register(L,"iguilabel",iguilabel_f);
-
- lua_pushstring(L,"__index");
- lua_pushstring(L,"gethandeler");
- lua_gettable(L,-3);
- lua_settable(L,-4);
+void iguilabel_register(lua_State* L){
- lua_pushstring(L,"__newindex");
- lua_pushstring(L,"sethandeler");
- lua_gettable(L,-3);
- lua_settable(L,-4);
+ luaL_newmetatable(L, "gui.iguilabel");//{m_gui.iguilabel}
+ lua_newtable(L);//{m_gui.iguilabel},{}
- luaL_register(L, NULL, iguilabel_m);
+ luaL_register(L,"iguilabel",iguilabel_m);//{m_gui.iguilabel},{guilabel}
+ lua_setfield(L,-2,"__index");//{m_gui.iguilabel}
+ lua_pop(L,1);
- return 1;
+ lua_getglobal(L,"gui");//{gui}
+ luaL_register(L, NULL,iguilabel_f);//{gui}
+ lua_pop(L,1);//
}
diff --git a/src/client/lua_api/gui/iguilabel.hpp b/src/client/lua_api/gui/iguilabel.hpp
index c779c70..dba0dbf 100644
--- a/src/client/lua_api/gui/iguilabel.hpp
+++ b/src/client/lua_api/gui/iguilabel.hpp
@@ -8,4 +8,4 @@ extern "C" {
}
#include <irrlicht.h>
-int iguilabel_register(lua_State* L, irr::IrrlichtDevice* d);
+void iguilabel_register(lua_State* L);
diff --git a/src/client/lua_api/gui/iguiwindow.cpp b/src/client/lua_api/gui/iguiwindow.cpp
index 705af18..30af486 100644
--- a/src/client/lua_api/gui/iguiwindow.cpp
+++ b/src/client/lua_api/gui/iguiwindow.cpp
@@ -20,17 +20,17 @@ extern "C" {
using namespace irr;
using namespace gui;
-static bool iguiwindowevent(irr::SEvent e){
- int ref = iguielements[e.GUIEvent.Caller];
- lua_rawgeti(tL,LUA_REGISTRYINDEX,ref);
- lua_getfield(tL,-1,"close");
+//static bool iguiwindowevent(irr::SEvent e){
+ //int ref = iguielements[e.GUIEvent.Caller];
+ //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref);
+ //lua_getfield(tL,-1,"close");
- lua_rawgeti(tL,LUA_REGISTRYINDEX,ref);
- lua_call(tL,1,1);
+ //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref);
+ //lua_call(tL,1,1);
- int shouldclose = lua_toboolean(tL,-1);
- return shouldclose == 1;
-}
+ //int shouldclose = lua_toboolean(tL,-1);
+ //return shouldclose == 1;
+//}
//new({{sx,sy},{ex,ey}},"title"[,{guielement=parent}]) :: {guielement}
static int newiguiwindow(lua_State* L){
@@ -68,11 +68,12 @@ static int newiguiwindow(lua_State* L){
luaL_getmetatable(L,"gui.window");//{element=ud_window},{m_gui.window}
lua_setmetatable(L,-2);//{element=ud_window, __meta=gui.window}
- int ref = luaL_ref(L,LUA_REGISTRYINDEX);//ref
- lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//ref,{element=ud_window, __meta=gui.window}
+ int ref = luaL_ref(L,LUA_REGISTRYINDEX);//
+ lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{element=ud_window, __meta=gui.window}
+ registerguielement(L);
iguielements[wi] = ref;
- registerguicallback(wi,EGET_ELEMENT_CLOSED,iguiwindowevent);
+ //registerguicallback(wi,EGET_ELEMENT_CLOSED,iguiwindowevent);
return 1;
}
diff --git a/src/client/lua_api/load_gui.cpp b/src/client/lua_api/load_gui.cpp
index c90c8f5..598f842 100644
--- a/src/client/lua_api/load_gui.cpp
+++ b/src/client/lua_api/load_gui.cpp
@@ -27,38 +27,41 @@ extern IrrlichtDevice* device;
//Things from guiparts.hpp
std::map<irr::gui::IGUIElement*,int> iguielements;
IrrlichtDevice* guidevice;
-long gui_elenum;
-std::vector<irr::gui::IGUIElement*> guielements(1);
+//long gui_elenum;
+//std::vector<irr::gui::IGUIElement*> guielements(1);
lua_State* tL;
int screenwidth(lua_State* L);
int screenheight(lua_State* L);
void load_guifuncs(lua_State* L){
- tL = L;
- guidevice = device;
- gui_elenum = 0;
- guielements[0] = NULL;
+ printf("Started loading gui...\n");
+ tL = L;
+ guidevice = device;
+ //gui_elenum = 0;
+ //guielements[0] = NULL;
- iguilabel_register(L,device);
- lua_pop(L, 1);
-
- //Various enums
- register_skin(L);
+ //Various enums
+ register_skin(L);
- lua_newtable(L);
- lua_setglobal(L,"gui");
- iguicheckbox_register(L);
- iguiwindow_register(L,device);
- iguiimage_register(L);
- iguibutton_register(L);
-
- lua_pushcfunction(L,screenwidth);
- lua_setglobal(L,"scrw");
+ lua_newtable(L);
+ lua_setglobal(L,"gui");
+ //printf("Registering label...\n");
+ iguilabel_register(L);
+ //printf("Registering checkbox...\n");
+ iguicheckbox_register(L);
+ //printf("Registering window...\n");
+ iguiwindow_register(L,device);
+ //printf("Registering guiimage\n");
+ iguiimage_register(L);
+ //printf("Registering button\n");
+ iguibutton_register(L);
- lua_pushcfunction(L,screenheight);
- lua_setglobal(L,"scrh");
+ lua_pushcfunction(L,screenwidth);
+ lua_setglobal(L,"scrw");
+ lua_pushcfunction(L,screenheight);
+ lua_setglobal(L,"scrh");
}
diff --git a/src/client/lua_api/phys/cbphysbox.cpp b/src/client/lua_api/phys/cbphysbox.cpp
index 2935d21..0baf45a 100644
--- a/src/client/lua_api/phys/cbphysbox.cpp
+++ b/src/client/lua_api/phys/cbphysbox.cpp
@@ -100,8 +100,8 @@ int cbphyssetpos(lua_State* L){//{rigidbody=ud_btRigidbody,node=ud_iscenenode},{
r->activate(true);
- //i->setPosition(vector3df(x,y,z));
- //i->updateAbsolutePosition();
+ i->setPosition(vector3df(x,y,z));
+ i->updateAbsolutePosition();
return 0;
diff --git a/src/client/lua_api/scene/icamera.cpp b/src/client/lua_api/scene/icamera.cpp
index 654fc7b..0554ce1 100644
--- a/src/client/lua_api/scene/icamera.cpp
+++ b/src/client/lua_api/scene/icamera.cpp
@@ -22,11 +22,11 @@ using namespace core;
extern IrrlichtDevice* device;
-static LISceneNode* checkiscenecamera(lua_State* L, int index){
- void* ud = luaL_checkudata(L,index,"scene.iscenecamera");
- luaL_argcheck(L,ud != NULL, index, "'scene.iscenecamera' expected");
- return (LISceneNode*) ud;
-}
+//static LISceneNode* checkiscenecamera(lua_State* L, int index){
+ //void* ud = luaL_checkudata(L,index,"scene.iscenecamera");
+ //luaL_argcheck(L,ud != NULL, index, "'scene.iscenecamera' expected");
+ //return (LISceneNode*) ud;
+//}
/*
static LISceneNode* checkiscenecamera(lua_State* L){
@@ -34,11 +34,11 @@ static LISceneNode* checkiscenecamera(lua_State* L){
}
*/
-static LISceneNode* checkismayacamera(lua_State* L, int index){
- void* ud = luaL_checkudata(L,index,"scene.iscenemayacamera");
- luaL_argcheck(L,ud != NULL, index, "'scene.iscenemayacamera' expected");
- return (LISceneNode*) ud;
-}
+//static LISceneNode* checkismayacamera(lua_State* L, int index){
+ //void* ud = luaL_checkudata(L,index,"scene.iscenemayacamera");
+ //luaL_argcheck(L,ud != NULL, index, "'scene.iscenemayacamera' expected");
+ //return (LISceneNode*) ud;
+//}
/*
static LISceneNode* checkismayacamera(lua_State* L){
return checkismayacamera(L,1);
@@ -94,24 +94,28 @@ static int newiscenefpscamera(lua_State* L){//
return 1;
}
-//iscenecamera.new(Vector position, Vector lookat, parrent)
+//iscenecamera.new(Vector position, Vector lookat,{node=parent})
static int newiscenecamera(lua_State* L){
printf("Createing camera!\n");
int nargs = lua_gettop(L);
double px,py,pz;
double lx,ly,lz;
-
- int parent = lua_tonumber(L,-1);
- lua_pop(L,1);
+ ISceneNode* parent = NULL;
+ if(nargs == 3){
+ lua_getfield(L,-1,"node");//{position},{lookat},{parent},ud_ISceneNode
+ parent = (ISceneNode*)lua_touserdata(L,-1);
+ lua_pop(L,2);//{position},{lookat}
+ }
+ //{position},{lookat}
//The position of the camera
- popvector3d(L,&px,&py,&pz);
+ popvector3d(L,&px,&py,&pz);//{position}
printf("position of camera was %f,%f,%f\n",px,py,pz);
- popvector3d(L,&lx,&ly,&lz);
+ popvector3d(L,&lx,&ly,&lz);//
printf("lookat of camera was %f,%f,%f\n",lx,ly,lz);
//If the element has a parrent
if(nargs >= 3){
- printf("got the parrent\n");
+ printf("got the parrent, %p\n",parent);
}
@@ -119,11 +123,11 @@ static int newiscenecamera(lua_State* L){
ISceneManager* smgr = device->getSceneManager();
ICameraSceneNode* cam = smgr->addCameraSceneNode(0, vector3df(px,py,pz), vector3df(lx,ly,lz));
printf("Registered the camera!\n");
- lua_newtable(L);
- lua_pushlightuserdata(L,cam);
- lua_setfield(L,-2,"node");
- luaL_getmetatable(L,"scene.icamera");
- lua_setmetatable(L,-2);
+ lua_newtable(L);//{}
+ lua_pushlightuserdata(L,cam);//{},ud_cam
+ lua_setfield(L,-2,"node");//{node=ud_cam}
+ luaL_getmetatable(L,"scene.icamera");//{node=ud_cam},{scene.icamera}
+ lua_setmetatable(L,-2);//{cam}
return 1;
}
diff --git a/src/client/lua_api/scene/igeneric.cpp b/src/client/lua_api/scene/igeneric.cpp
index 4619064..c60aa90 100644
--- a/src/client/lua_api/scene/igeneric.cpp
+++ b/src/client/lua_api/scene/igeneric.cpp
@@ -35,14 +35,14 @@ int iscenegetpos(lua_State* L){//{node=ud_IMeshSceneNode}
return 1;
}
-int iscenesetpos(lua_State* L){//{node=ud_IMeshSceneNode},{x,y,z}
+int iscenesetpos(lua_State* L){//{node=ISceneNode},{x,y,z}
double x,y,z;
- popvector3d(L,&x,&y,&z);//{node=ud_IMeshSceneNode}
- lua_getfield(L,-1,"node");//{node=ud_IMeshSceneNode},ud_IMeshSceneNode
- ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//{node=ud_IMeshSceneNode},ud_IMeshSceneNode
+ popvector3d(L,&x,&y,&z);//{node=ud_ISceneNode}
+ lua_getfield(L,-1,"node");//{node=ud_ISceneNode},ud_ISceneNode
+ ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//{node=ud_ISceneNode},ud_ISceneNode
i->setPosition(vector3df(x,y,z));
i->updateAbsolutePosition();
- vector3df pos = i->getAbsolutePosition();
+ //vector3df pos = i->getAbsolutePosition();
//printf("After setting pos, new pos is %f %f %f",pos.X,pos.Y,pos.Z);
lua_pop(L,2);//
return 0;
diff --git a/src/client/lua_api/scene/ilight.cpp b/src/client/lua_api/scene/ilight.cpp
index 8f52f2d..7473bfa 100644
--- a/src/client/lua_api/scene/ilight.cpp
+++ b/src/client/lua_api/scene/ilight.cpp
@@ -22,15 +22,15 @@ using namespace core;
extern IrrlichtDevice* device;
-static LISceneNode* checkiscenelight(lua_State* L, int index){
- void* ud = luaL_checkudata(L,index,"scene.ilight");
- luaL_argcheck(L,ud != NULL, index, "'scene.ilight' expected");
- return (LISceneNode*) ud;
-}
-
-static LISceneNode* checkilight(lua_State* L){
- return checkiscenelight(L,1);
-}
+//static LISceneNode* checkiscenelight(lua_State* L, int index){
+ //void* ud = luaL_checkudata(L,index,"scene.ilight");
+ //luaL_argcheck(L,ud != NULL, index, "'scene.ilight' expected");
+ //return (LISceneNode*) ud;
+//}
+
+//static LISceneNode* checkilight(lua_State* L){
+ //return checkiscenelight(L,1);
+//}
//{} :: scene.newlight(radius, {v3 position})
static int newiscenelight(lua_State* L){
diff --git a/src/client/lua_api/scene/imesh.cpp b/src/client/lua_api/scene/imesh.cpp
index c72e83a..b5c8939 100644
--- a/src/client/lua_api/scene/imesh.cpp
+++ b/src/client/lua_api/scene/imesh.cpp
@@ -23,11 +23,11 @@ using namespace video;
extern IrrlichtDevice* device;
-static LISceneNode* checkismesh(lua_State* L, int index){
- void* ud = luaL_checkudata(L,index,"scene.imesh");
- luaL_argcheck(L,ud != NULL, index, "'scene.imesh' expected");
- return (LISceneNode*) ud;
-}
+//static LISceneNode* checkismesh(lua_State* L, int index){
+ //void* ud = luaL_checkudata(L,index,"scene.imesh");
+ //luaL_argcheck(L,ud != NULL, index, "'scene.imesh' expected");
+ //return (LISceneNode*) ud;
+//}
/*
static LISceneNode* checkismesh(lua_State* L){
diff --git a/src/client/lua_api/video/smaterial.cpp b/src/client/lua_api/video/smaterial.cpp
index c72d4ca..2ef7053 100644
--- a/src/client/lua_api/video/smaterial.cpp
+++ b/src/client/lua_api/video/smaterial.cpp
@@ -14,22 +14,27 @@ using namespace irr::video;
int newsmaterial(lua_State* L){
SMaterial* mat = new SMaterial();
- lua_pushlightuserdata(L,mat);//ud_smaterial
+ lua_newtable(L);//{}
+ lua_pushlightuserdata(L,mat);//{},ud_smaterial
+ lua_setfield(L,-2,"smaterial");//{smaterial}
- luaL_getmetatable(L,"smaterial");//ud_smaterial,{m_smaterial}
- lua_setmetatable(L,-2);//ud_smaterial
+ luaL_getmetatable(L,"video.smaterial");//{smaterial},{m_smaterial}
+ lua_setmetatable(L,-2);//{smaterial}
return 1;
}
-//setMaterial(self,int_num,{ITexture texture})
+//setTexture(self,int_num,{ITexture texture})
int setTexture(lua_State* L){
+ lua_getfield(L,-1,"texture");
ITexture* tex = (ITexture*)lua_touserdata(L,-1);
- lua_pop(L,1);
+ lua_pop(L,2);
double num = lua_tonumber(L,-1);
lua_pop(L,1);
+ lua_getfield(L,-1,"smaterial");
SMaterial* self = (SMaterial*)lua_touserdata(L,-1);
- lua_pop(L,1);
+ lua_pop(L,2);
+ self->setTexture(num,tex);
return 0;
}
@@ -43,7 +48,7 @@ static const luaL_reg smaterial_m[] = {
void smaterial_register(lua_State* L){
//Add globals dealing with material flags
- luaL_newmetatable(L,"smaterial");//{m_smaterial}
+ luaL_newmetatable(L,"video.smaterial");//{m_smaterial}
lua_newtable(L);//{m_smaterial},{}
luaL_register(L,NULL,smaterial_m);//{m_smaterial},{smaterial}
diff --git a/src/client/main.cpp b/src/client/main.cpp
index f764fe9..1fcc65d 100644
--- a/src/client/main.cpp
+++ b/src/client/main.cpp
@@ -117,6 +117,7 @@ int main(int argc, char *argv[]){
//Create a new lua state, this gets shared everywhere
lua_State *state = luaL_newstate();
L = state;
+ printf("Created lua state at %p\n",L);
//Load the lua libraries
loadLLibs(state);
//Defined in initdevice.cpp, creates the irrlicht device
@@ -133,12 +134,14 @@ int main(int argc, char *argv[]){
luaL_openlibs(state);
printf("Loadded irr libs...\n");
//Sets the global event handeler
+ printf("Creating event receiver\n");
GlobalEventReceiver ger = GlobalEventReceiver(device);
+ printf("Created event receiver\n");
device->setEventReceiver(&ger);
int iErr = luaL_dofile(state,"../data/init.lua");
if(iErr != 0){
+ printf("Failed to open lua file:../data/init.lua\n");
lua_error(state);
- printf("Failed to open lua file:../data/guitest.lua\n");
}
//Load some bullet physics stuff
@@ -160,6 +163,8 @@ int main(int argc, char *argv[]){
lua_pushcfunction(L,setbackgroundcolor);
lua_setfield(L,-2,"setbackgroundcolor");
lua_pop(L,1);
+ printf("About to check if device run\n");
+ printf("Device is %p\n",device);
while(device->run()){
gameloop_net(L);
gameloop_phys(UpdateElement);
@@ -192,6 +197,7 @@ int main(int argc, char *argv[]){
lua_call(state,0,0);
lua_pop(state,1);
}else{
+ printf("Tick was nil...\n");
lua_pop(state,2);
}
//lua_pop(state,2);
diff --git a/src/client/menuhandeler.cpp b/src/client/menuhandeler.cpp
index 53d38cc..b7c5f48 100644
--- a/src/client/menuhandeler.cpp
+++ b/src/client/menuhandeler.cpp
@@ -15,8 +15,7 @@ using namespace io;
using namespace gui;
void loadMenu(const char* name, IrrlichtDevice* device){
- IGUIEnvironment* env = device->getGUIEnvironment();
- IGUIWindow* window = env->addWindow(rect<s32>(0,0,200,200),true,L"Menu",0,-1);
+
}
void showMenu(const char* name, IrrlichtDevice* device){
diff --git a/src/shared/lua_api/common.cpp b/src/shared/lua_api/common.cpp
index 68bf203..b190bdb 100644
--- a/src/shared/lua_api/common.cpp
+++ b/src/shared/lua_api/common.cpp
@@ -190,6 +190,17 @@ int poprecti(lua_State* L, long *sx, long *sy, long *ex, long *ey){
return 0;
}
+int pushrecti(lua_State* L, long sx, long sy, long ex, long ey){
+ lua_newtable(L);//{}
+ lua_pushnumber(L,1);//{},1,{sx,sy}
+ pushvector2i(L,sx,sy);//{},1,{sx,sy}
+ lua_settable(L,-3);//{{sx,sy}}
+ lua_pushnumber(L,2);//{{sx,sy}},2
+ pushvector2i(L,ex,ey);//{{sx,sy}},2,{ex,ey}
+ lua_settable(L,-3);//{{sx,sy},{ex,ey}}
+ return 1;
+}
+
int popvector2i(lua_State* L, long* a, long* b){
lua_pushinteger(L,1);
lua_gettable(L,-2);
diff --git a/src/shared/lua_api/common.hpp b/src/shared/lua_api/common.hpp
index 6086065..66da29a 100644
--- a/src/shared/lua_api/common.hpp
+++ b/src/shared/lua_api/common.hpp
@@ -18,3 +18,4 @@ int popvector3d(lua_State*,double*,double*,double*);
int popvector2i(lua_State*,long*,long*);
int poprecti(lua_State* L,long*,long*,long*,long*);
+int pushrecti(lua_State* L,long,long,long,long);
diff --git a/src/shared/lua_api/load_net.cpp b/src/shared/lua_api/load_net.cpp
index 740d997..6fe8525 100644
--- a/src/shared/lua_api/load_net.cpp
+++ b/src/shared/lua_api/load_net.cpp
@@ -166,7 +166,7 @@ int send(lua_State* L){
//socket:receive(s_name,function(stream))
int netreceive(lua_State* L){
const char* name = lua_tostring(L,-2);
- int slen = strlen(name);
+ //int slen = strlen(name);
std::string s = std::string(name);
int func = luaL_ref(L,LUA_REGISTRYINDEX);
lua_pushstring(L,"fd");
@@ -178,8 +178,8 @@ int netreceive(lua_State* L){
}
int socketFactory(lua_State*L){
- int domain = luaL_optint(L,-1,0);
- int type = luaL_optint(L,-2,0);
+ //int domain = luaL_optint(L,-1,0);
+ //int type = luaL_optint(L,-2,0);
int c = nn_socket(AF_SP,NN_PAIR);
if(c < 0){