diff options
23 files changed, 488 insertions, 551 deletions
@@ -41,28 +41,6 @@ BINS+= $(foreach part,$(EX_PARTS),$(BIN_DIR)/$(part)/bin/$(EX_PRE)$(part)$(EXE_E BUILDS = $(EX_PARTS:%=$(BUILD_DIR)/%) SRC_DIRS = $(EX_PARTS:%=$(SRC_DIR)/%) -#Run with mingw32-make -#CLIENT_NAME=brokengine -#CLIENT_EXE=$(CLIENT_NAME)$(EXE_EXT) -#CLIENT_DIR=$(BIN_DIR)/client/bin -#CLIENT_PATH=$(CLIENT_DIR)/$(CLIENT_EXE) -#CLIENT_SRC=$(SRC_DIR)/client -#CLIENT_BUILD_DIR=$(BUILD_DIR)/client - -#SERVER_NAME=brokeserver -#SERVER_EXE=$(SERVER_NAME)$(EXE_EXT) -#SERVER_DIR=bin/server/bin -#SERVER_PATH=$(SERVER_DIR)/$(SERVER_EXE) -#SERVER_SRC=src/server/ -#SERVER_BUILD=build/server/ - -#SHARED_SRC=src/shared/ - -#TEST_PATH=bin/test/ -#TEST_SRC=src/test/ - -#MASTER_EXE=borkmaster.exe - CXX?=g++ MKDIR?=mkdir RM?=rm -f @@ -84,12 +62,12 @@ INCLUDE_PATHS=-I$(ILUADIR) -I$(IIRRDIR) -I$(IBULDIR) -I$(INANDIR) -I$(ISHADIR) CXXFLAGS+=$(INCLUDE_PATHS) -LDFLAGS+=-Llib +CXXFLAGS+=-Llib #Libraries #static libs LIB_S_LUA=lib/libluajit.a -LIB_S_IRR=lib/Irrlicht.a +LIB_S_IRR=lib/libIrrlicht.a LIB_S_BCO=lib/libBulletCollision.a LIB_S_BDY=lib/libBulletDynamics.a LIB_S_BLM=lib/libLinearMath.a @@ -113,15 +91,6 @@ else LIB_OBJS = $(LIB_S_LUA) $(LIB_S_IRR) $(LIB_S_BCO) $(LIB_S_BDY) $(LIB_S_BLM) $(LIB_S_NAN) endif -#LIBLUA=lib/libluajit.a -#LIBIRR=lib/libIrrlicht.a -#LIBBCO=lib/libBulletCollision.a -#LIBBDY=lib/libBulletDynamics.a -#LIBBLM=lib/libLinearMath.a -#LIBNAN=lib/libnanomsg.a - -#DLLIRR=$(LIRRDIR)/Irrlicht.dll - # Libraries #order matters! LIBS=-lBulletDynamics -lBulletCollision -lLinearMath -lIrrlicht -lnanomsg @@ -137,7 +106,6 @@ else endif #can't compile with -std=c++11 because irrlicht will complain -CXXFLAGS+=-Wall LDFLAGS+=$(LIBS) ifeq ($(DEBUG), true) @@ -145,22 +113,23 @@ else CXXFLAGS += -static $(INCLUDE_PATHS) -D_IRR_STATIC_LIB_ -DNN_STATIC_LIB endif +C_LDFLAGS= ifeq ($(UNAME),Windows) - LDFLAGS+=-mwindows -lwinmm #-Wl,-subsystem,windows + LDFLAGS+=-mwindows -lwinmm STATIC_LIBS+=-lws2_32 -lmswsock -ladvapi32 endif ifeq ($(DEBUG),true) ifeq ($(UNAME),Windows) - LDFLAGS+=-Wl,-subsystem,console + C_LDFLAGS+=-Wl,-subsystem,console endif endif ifeq ($(DEBUG),true) CXXFLAGS+=-O0 -g -Wall -Werror else - CXXFLAGS+=-O3 -Wnone - LDFLAGS+=--strip-all + CXXFLAGS+=-O3 + LDFLAGS+=#--strip-all endif FSYSTEM_FOLDERS = lua_api phys util lua_api/irr lua_api/phys lua_api/gui lua_api/scene lua_api/video @@ -186,124 +155,20 @@ CLIENT_OBJS = $(BUILD_DIR)/$(CLIENTNAME)/main.o $(CLIENT_SRCS) $(SHARED_CLIENT_O #Compile the client $(BIN_DIR)/$(CLIENTNAME)/bin/$(EX_PRE)$(CLIENTNAME)$(EXE_EXT) : $(CLIENT_OBJS) $(LIB_OBJS) - $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) + @echo "Building binary $^" + @$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(C_LDFLAGS) $(LIB_OBJS) # -Wl,--verbose # does not have .hpp associated $(BUILD_DIR)/$(CLIENTNAME)/main.o : $(SRC_DIR)/client/main.cpp - $(CXX) $(CXXFLAGS) -c -o $@ $^ + @$(CXX) $(CXXFLAGS) -c -o $@ $^ $(CLIENT_SRCS) : $(BUILD_DIR)/$(CLIENTNAME)/%.o : src/client/%.cpp $(SRC_DIR)/client/%.hpp @echo "Building client $^" - $(CXX) $(CXXFLAGS) -c -o $@ $< + @$(CXX) $(CXXFLAGS) -c -o $@ $< $(SHARED_CLIENT_OBJS) : $(BUILD_DIR)/$(CLIENTNAME)/%.o : src/shared/%.cpp $(SRC_DIR)/shared/%.hpp @echo "Building shared $<" - $(CXX) $(CXXFLAGS) -c -o $@ $< - -#$(BUILD_DIR)/$(CLIENTNAME)/lua_api/common.o : $(SRC_DIR)/shared/lua_api/common.c $(SRC_DIR)/shared/lua_api/common.h - #$(CXX) $(CXXFLAGS) -c -o $@ $^ -#$(CLIENT_OBJS) : build/%.o : src/%.cpp - #$(CXX) $(CXXFLAGS) -c -o $@ $^ - -#$(CLIENT_BUILD)main.o : $(CLIENT_SRC)main.cpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)main.o $(CLIENT_SRC)main.cpp - -#$(CLIENT_BUILD)physcommon.o : $(SHARED_SRC)phys/physcommon.cpp $(SHARED_SRC)phys/physcommon.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)physcommon.o $(SHARED_SRC)phys/physcommon.cpp - -#$(CLIENT_BUILD)load_net.o : $(SHARED_SRC)lua_api/load_net.cpp $(SHARED_SRC)lua_api/load_net.hpp $(CLIENT_BUILD)stream.o - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_net.o $(SHARED_SRC)lua_api/load_net.cpp - -#$(CLIENT_BUILD)stream.o : $(SHARED_SRC)lua_api/stream.cpp $(SHARED_SRC)lua_api/stream.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)stream.o $(SHARED_SRC)lua_api/stream.cpp - -#$(CLIENT_BUILD)common.o : $(SHARED_SRC)lua_api/common.c $(SHARED_SRC)lua_api/common.h - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)common.o $(SHARED_SRC)lua_api/common.c - -#$(CLIENT_BUILD)initdevice.o : $(CLIENT_SRC)initdevice.cpp $(CLIENT_SRC)initdevice.hpp - #$(CC) $(CFLAGS) -c -static -o $(CLIENT_BUILD)initdevice.o $(CLIENT_SRC)initdevice.cpp - -#$(CLIENT_BUILD)menuhandeler.o : $(CLIENT_SRC)menuhandeler.cpp $(CLIENT_SRC)menuhandeler.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)menuhandeler.o $(CLIENT_SRC)menuhandeler.cpp - -#$(CLIENT_BUILD)load_game.o : $(CLIENT_SRC)lua_api/load_game.cpp $(CLIENT_SRC)lua_api/load_game.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_game.o $(CLIENT_SRC)lua_api/load_game.cpp - -#$(CLIENT_BUILD)load_gui.o : $(CLIENT_BUILD)iguibutton.o $(CLIENT_BUILD)iguilabel.o $(CLIENT_BUILD)iguielement.o $(CLIENT_BUILD)iguiwindow.o $(CLIENT_BUILD)iguiskin.o $(CLIENT_BUILD)iguicheckbox.o $(CLIENT_BUILD)common.o $(CLIENT_BUILD)iguiimage.o $(CLIENT_SRC)lua_api/load_gui.cpp $(CLIENT_SRC)lua_api/load_gui.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_gui.o $(CLIENT_SRC)lua_api/load_gui.cpp - -#$(CLIENT_BUILD)iguiimage.o : $(CLIENT_SRC)lua_api/gui/iguiimage.cpp $(CLIENT_SRC)lua_api/gui/iguiimage.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiimage.o $(CLIENT_SRC)lua_api/gui/iguiimage.cpp - -#$(CLIENT_BUILD)iguiwindow.o : $(CLIENT_BUILD)iguiutil.o $(CLIENT_SRC)lua_api/gui/iguiwindow.cpp $(CLIENT_SRC)lua_api/gui/iguiwindow.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiwindow.o $(CLIENT_SRC)lua_api/gui/iguiwindow.cpp - -#$(CLIENT_BUILD)iguiutil.o : $(CLIENT_SRC)lua_api/gui/iguiutil.cpp $(CLIENT_SRC)lua_api/gui/iguiutil.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiutil.o $(CLIENT_SRC)lua_api/gui/iguiutil.cpp - -#$(CLIENT_BUILD)load_video.o : $(CLIENT_SRC)lua_api/load_video.cpp $(CLIENT_SRC)lua_api/load_video.hpp $(CLIENT_BUILD)smaterial.o $(CLIENT_BUILD)itexture.o $(CLIENT_BUILD)iimage.o - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_video.o $(CLIENT_SRC)lua_api/load_video.cpp - -#$(CLIENT_BUILD)smaterial.o : $(CLIENT_SRC)lua_api/video/smaterial.cpp $(CLIENT_SRC)lua_api/video/smaterial.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)smaterial.o $(CLIENT_SRC)lua_api/video/smaterial.cpp - -#$(CLIENT_BUILD)itexture.o : $(CLIENT_SRC)lua_api/video/itexture.cpp $(CLIENT_SRC)lua_api/video/itexture.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)itexture.o $(CLIENT_SRC)lua_api/video/itexture.cpp - -#$(CLIENT_BUILD)iimage.o : $(CLIENT_SRC)lua_api/video/iimage.cpp $(CLIENT_SRC)lua_api/video/iimage.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iimage.o $(CLIENT_SRC)lua_api/video/iimage.cpp - -#$(CLIENT_BUILD)load_phys.o : $(CLIENT_BUILD)cbphysbox.o $(CLIENT_BUILD)bphysmodel.o $(CLIENT_SRC)lua_api/load_phys.cpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_phys.o $(CLIENT_SRC)lua_api/load_phys.cpp - -#$(CLIENT_BUILD)load_scene.o : $(CLIENT_BUILD)icamera.o $(CLIENT_BUILD)ilight.o $(CLIENT_BUILD)imesh.o $(CLIENT_BUILD)cbphysbox.o $(CLIENT_SRC)/lua_api/load_scene.cpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_scene.o $(CLIENT_SRC)lua_api/load_scene.cpp - -#$(CLIENT_BUILD)ilight.o : $(CLIENT_SRC)lua_api/scene/ilight.cpp $(CLIENT_SRC)lua_api/scene/ilight.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)ilight.o $(CLIENT_SRC)lua_api/scene/ilight.cpp - -#$(CLIENT_BUILD)iguibutton.o : $(CLIENT_SRC)lua_api/gui/iguibutton.cpp $(CLIENT_SRC)lua_api/gui/iguibutton.hpp $(CLIENT_SRC)lua_api/guiparts.hpp $(CLIENT_SRC)callbackhandeler.hpp $(CLIENT_SRC)util/hashmap.h $(SHARED_SRC)lua_api/common.c $(SHARED_SRC)lua_api/common.h - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguibutton.o $(CLIENT_SRC)lua_api/gui/iguibutton.cpp - -#$(CLIENT_BUILD)iguilabel.o : $(CLIENT_SRC)lua_api/gui/iguilabel.cpp $(CLIENT_SRC)lua_api/gui/iguilabel.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguilabel.o $(CLIENT_SRC)lua_api/gui/iguilabel.cpp - -#$(CLIENT_BUILD)iguicheckbox.o : $(CLIENT_SRC)lua_api/gui/iguicheckbox.cpp $(CLIENT_SRC)lua_api/gui/iguicheckbox.hpp $(SHARED_SRC)lua_api/common.h - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguicheckbox.o $(CLIENT_SRC)lua_api/gui/iguicheckbox.cpp - -#$(CLIENT_BUILD)iguielement.o : $(CLIENT_BUILD)hashmap.o $(CLIENT_SRC)lua_api/gui/iguielement.cpp $(CLIENT_SRC)lua_api/gui/iguielement.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguielement.o $(CLIENT_SRC)lua_api/gui/iguielement.cpp - -#$(CLIENT_BUILD)iguiskin.o : $(CLIENT_SRC)lua_api/gui/iguiskin.cpp $(CLIENT_SRC)lua_api/gui/iguiskin.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiskin.o $(CLIENT_SRC)lua_api/gui/iguiskin.cpp - -#$(CLIENT_BUILD)icamera.o : $(CLIENT_BUILD)igeneric.o $(CLIENT_SRC)lua_api/scene/icamera.cpp $(CLIENT_SRC)lua_api/scene/icamera.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)icamera.o $(CLIENT_SRC)lua_api/scene/icamera.cpp - -#$(CLIENT_BUILD)imesh.o : $(CLIENT_SRC)lua_api/scene/imesh.cpp $(CLIENT_SRC)lua_api/scene/imesh.hpp $(CLIENT_SRC)lua_api/scene/igeneric.cpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)imesh.o $(CLIENT_SRC)lua_api/scene/imesh.cpp - -#$(CLIENT_BUILD)igeneric.o: $(CLIENT_SRC)lua_api/scene/igeneric.cpp $(CLIENT_SRC)lua_api/scene/igeneric.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)igeneric.o $(CLIENT_SRC)lua_api/scene/igeneric.cpp - -#$(CLIENT_BUILD)cbphysbox.o: $(CLIENT_SRC)lua_api/phys/cbphysbox.cpp $(CLIENT_SRC)lua_api/phys/cbphysbox.hpp $(CLIENT_SRC)lua_api/scene/igeneric.cpp $(CLIENT_BUILD)bphysbox.o - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)cbphysbox.o $(CLIENT_SRC)lua_api/phys/cbphysbox.cpp - -#$(CLIENT_BUILD)bphysbox.o: $(SHARED_SRC)lua_api/phys/bphysbox.cpp $(SHARED_SRC)lua_api/phys/bphysbox.hpp $(CLIENT_BUILD)common.o - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)bphysbox.o $(SHARED_SRC)lua_api/phys/bphysbox.cpp - -#$(CLIENT_BUILD)bphysmodel.o: $(CLIENT_SRC)lua_api/phys/bphysmodel.cpp $(CLIENT_SRC)lua_api/phys/bphysmodel.hpp $(CLIENT_SRC)lua_api/scene/igeneric.cpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)bphysmodel.o $(CLIENT_SRC)lua_api/phys/bphysmodel.cpp - -#$(CLIENT_BUILD)callbackhandeler.o : $(CLIENT_SRC)callbackhandeler.cpp $(CLIENT_SRC)callbackhandeler.hpp - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)callbackhandeler.o $(CLIENT_SRC)callbackhandeler.cpp - -#$(CLIENT_BUILD)hashmap.o : $(CLIENT_SRC)util/hashmap.c $(CLIENT_SRC)util/hashmap.h - #$(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)hashmap.o $(CLIENT_SRC)util/hashmap.c - -#end compile client - - + @$(CXX) $(CXXFLAGS) -c -o $@ $< #compile server SERVER_FILES = @@ -318,40 +183,9 @@ $(BIN_DIR)/$(SERVERNAME)/bin/$(EX_PRE)$(SERVERNAME)$(EXE_EXT) : $(SERVER_OBJS) $ $(BUILD_DIR)/$(SERVERNAME)/main.o : $(SRC_DIR)/server/main.cpp $(CXX) $(CXXFLAGS) -c -o $@ $^ -#$(SERVER_PATH) : $(SERVER_BUILD)main.o $(SERVER_BUILD)hashmap.o $(SERVER_BUILD)common.o $(SERVER_BUILD)physcommon.o $(SERVER_BUILD)load_net.o $(SERVER_BUILD)load_phys.o - #$(CC) $(CFLAGS) -o $(SERVER_PATH) $(SERVER_BUILD)*.o $(STATIC_LIBS) $(SLIBS) $(LDFLAGS) - $(SHARED_SERVER_OBJS) : $(BUILD_DIR)/$(SERVERNAME)/%.o : $(SRC_DIR)/shared/%.cpp $(SRC_DIR)/shared/%.hpp $(CXX) $(CXXFLAGS) -c -o $@ $< -#$(SERVER_BUILD)main.o : $(SERVER_SRC)main.cpp $(SERVER_SRC)testclient.cpp - #$(CC) $(CFLAGS) -c -o $(SERVER_BUILD)main.o $(SERVER_SRC)main.cpp - -#$(SERVER_BUILD)physcommon.o : $(SHARED_SRC)phys/physcommon.cpp $(SHARED_SRC)phys/physcommon.hpp - #$(CC) $(CFLAGS) -c -o $(SERVER_BUILD)physcommon.o $(SHARED_SRC)phys/physcommon.cpp - -#$(SERVER_BUILD)hashmap.o : $(SHARED_SRC)util/hashmap.c $(SHARED_SRC)util/hashmap.h - #$(CC) $(CFLAGS) -c -o $(SERVER_BUILD)hashmap.o $(SHARED_SRC)util/hashmap.c - -#$(SERVER_BUILD)common.o : $(SHARED_SRC)lua_api/common.c $(SHARED_SRC)lua_api/common.h - #$(CC) $(CFLAGS) -c -o $(SERVER_BUILD)common.o $(SHARED_SRC)lua_api/common.c - -## Net -#$(SERVER_BUILD)load_net.o : $(SHARED_SRC)lua_api/load_net.cpp $(SHARED_SRC)lua_api/load_net.hpp $(SERVER_BUILD)stream.o - #$(CC) $(CFLAGS) -c -o $(SERVER_BUILD)load_net.o $(SHARED_SRC)lua_api/load_net.cpp - -#$(SERVER_BUILD)stream.o : $(SHARED_SRC)lua_api/stream.cpp $(SHARED_SRC)lua_api/stream.hpp - #$(CC) $(CFLAGS) -c -o $(SERVER_BUILD)stream.o $(SHARED_SRC)lua_api/stream.cpp -## Phys -#$(SERVER_BUILD)load_phys.o: $(SHARED_SRC)lua_api/load_phys.cpp $(SHARED_SRC)lua_api/load_phys.hpp $(SERVER_BUILD)bphysbox.o - #$(CC) $(CFLAGS) -c -o $(SERVER_BUILD)load_phys.o $(SHARED_SRC)lua_api/load_phys.cpp - -#$(SERVER_BUILD)bphysbox.o : $(SHARED_SRC)lua_api/phys/bphysbox.cpp $(SHARED_SRC)lua_api/phys/bphysbox.hpp - #$(CC) $(CFLAGS) -c -o $(SERVER_BUILD)bphysbox.o $(SHARED_SRC)lua_api/phys/bphysbox.cpp - - -#end compile server - #compile libraries $(LIBLUA) : $(ILUADIR)/Makefile @echo "Could not find $(LIBLUA), rebuilding" @@ -395,26 +229,20 @@ $(BIN_DIR)/$(CLIENTNAME)/bin/lua51$(DYN_LIB_EXT) : $(LLUADIR)/src/lua51$(DYN_LIB $(BIN_DIR)/$(SERVERNAME)/bin/lua51$(DYN_LIB_EXT) : $(LLUADIR)/src/lua51$(DYN_LIB_EXT) cp $^ $@ +$(LIB_S_LUA) : $(LLUADIR)/src/libluajit.a + cp $^ $@ + $(LIB_D_LUA) : $(LLUADIR)/src/Makefile @echo "Could not find $(LLUADIR)/src/lua51$(DYN_LIB_EXT), rebuilding" cd $(LLUADIR)/src && make "BUILDMODE= dynamic" # Library - Bullet -#$(LIB_D_BCO) : $(LBULDIR)/src/BulletCollision/libBulletCollision.a - #cp $^ $@ - $(LIB_D_BCO) : $(LBULDIR)/Makefile cd $(LBULDIR) && make BulletCollision -#$(LIB_D_BDY) : $(LBULDIR)/src/BulletDynamics/libBulletDynamics.a - #cp $^ $@ - $(LIB_D_DY) : $(LBULDIR)/Makefile cd $(LBULDIR) && make BulletDynamics -#$(LIB_D_BLM) : $(LBULDIR)/src/LinearMath/libLinearMath.a - #cp $^ $@ - $(LIB_D_BLM) : $(LBULDIR)/Makefile cd $(LBULDIR) && make LinearMath @@ -434,6 +262,9 @@ $(LNANDIR)/dyn_lib/Makefile : $(LNANDIR)/CMakeLists.txt $(LNANDIR)/dyn_lib $(LNANDIR)/dyn_lib : mkdir $(LNANDIR)/dyn_lib +$(LIB_S_NAN) : $(LNANDIR)/dyn_lib/libnanomsg.dll.a + cp $^ $@ + #compile & run tests test: $(TEST_PATH)test_stream $(TEST_PATH)test_phys @$(ECHO) "Testing stream : " 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){ |
