diff --git a/client/scenes/in_world.hpp b/client/scenes/in_world.hpp index 7fb14c4..c6ecd72 100644 --- a/client/scenes/in_world.hpp +++ b/client/scenes/in_world.hpp @@ -88,7 +88,7 @@ protected: RasterFont font; //map - RegionPager mapPager; + RegionPager mapPager; //UI Button disconnectButton; diff --git a/common/makefile b/common/makefile index c1e25c2..645ac13 100644 --- a/common/makefile +++ b/common/makefile @@ -22,6 +22,7 @@ all: $(OBJ) $(OUT) ar -crs $(OUT) $(OBJ) $(MAKE) -C graphics $(MAKE) -C map + $(MAKE) -C script $(MAKE) -C network $(MAKE) -C ui diff --git a/common/map/map_file_format.cpp b/common/map/map_file_format.cpp index ee7f58d..ac1b79e 100644 --- a/common/map/map_file_format.cpp +++ b/common/map/map_file_format.cpp @@ -21,10 +21,27 @@ */ #include "map_file_format.hpp" -void MapFileFormat::Load(Region** const ptr, int x, int y) { +void DummyFormat::Load(Region** const ptr, int x, int y) { //TODO } -void MapFileFormat::Save(Region* const ptr) { +void DummyFormat::Save(Region* const ptr) { //TODO } +/* +void VerboseFormat::Load(Region** const ptr, int x, int y) { + //TODO +} + +void VerboseFormat::Save(Region* const ptr) { + //TODO +} + +void CompactFormat::Load(Region** const ptr, int x, int y) { + //TODO +} + +void CompactFormat::Save(Region* const ptr) { + //TODO +} +*/ \ No newline at end of file diff --git a/common/map/map_file_format.hpp b/common/map/map_file_format.hpp index 546003d..576dc50 100644 --- a/common/map/map_file_format.hpp +++ b/common/map/map_file_format.hpp @@ -24,7 +24,15 @@ #include "region.hpp" -class MapFileFormat { +class DummyFormat { +public: + void Load(Region** const, int x, int y); + void Save(Region* const); +private: + // +}; +/* +class VerboseFormat { public: void Load(Region** const, int x, int y); void Save(Region* const); @@ -32,4 +40,12 @@ private: // }; +class CompactFormat { +public: + void Load(Region** const, int x, int y); + void Save(Region* const); +private: + // +}; +*/ #endif diff --git a/common/map/map_generator.cpp b/common/map/map_generator.cpp index 2668ca5..d0fbbca 100644 --- a/common/map/map_generator.cpp +++ b/common/map/map_generator.cpp @@ -21,10 +21,31 @@ */ #include "map_generator.hpp" -void MapGenerator::Create(Region** const ptr, int width, int height, int depth, int x, int y) { +void BlankGenerator::Create(Region** const ptr, int width, int height, int depth, int x, int y) { (*ptr) = new Region(width, height, depth, x, y); } -void MapGenerator::Unload(Region* const ptr) { +void BlankGenerator::Unload(Region* const ptr) { + delete ptr; +} +/* +void PerlinGenerator::Create(Region** const ptr, int width, int height, int depth, int x, int y) { + (*ptr) = new Region(width, height, depth, x, y); +} + +void PerlinGenerator::Unload(Region* const ptr) { + delete ptr; +} +*/ +void LuaGenerator::Create(Region** const ptr, int width, int height, int depth, int x, int y) { + (*ptr) = new Region(width, height, depth, x, y); + + //generate the lua-driven maps + lua_getglobal(state, "CreateRegion"); + lua_pushlightuserdata(state, ptr); + lua_pcall(state, 1, 0, 0); +} + +void LuaGenerator::Unload(Region* const ptr) { delete ptr; } diff --git a/common/map/map_generator.hpp b/common/map/map_generator.hpp index 85121b9..f3eba56 100644 --- a/common/map/map_generator.hpp +++ b/common/map/map_generator.hpp @@ -24,12 +24,33 @@ #include "region.hpp" -class MapGenerator { +#include "lua/lua.hpp" + +class BlankGenerator { public: void Create(Region** const, int width, int height, int depth, int x, int y); void Unload(Region* const); private: // }; +/* +class PerlinGenerator { +public: + void Create(Region** const, int width, int height, int depth, int x, int y); + void Unload(Region* const); +private: + // +}; +*/ +class LuaGenerator { +public: + void Create(Region** const, int width, int height, int depth, int x, int y); + void Unload(Region* const); + + lua_State* SetLuaState(lua_State* L) { return state = L; } + lua_State* GetLuaState() { return state; } +private: + lua_State* state = nullptr; +}; #endif diff --git a/common/script/linit.cpp b/common/script/linit.cpp new file mode 100644 index 0000000..c03a812 --- /dev/null +++ b/common/script/linit.cpp @@ -0,0 +1,72 @@ +/* +** $Id: linit.c,v 1.32 2011/04/08 19:17:36 roberto Exp $ +** Initialization of libraries for lua.c and other clients +** See Copyright Notice in lua.h +*/ + +/* Modified for use in Tortuga, renamed to linit.cpp +*/ + + +/* +** If you embed Lua in your program and need to open the standard +** libraries, call luaL_openlibs in your program. If you need a +** different set of libraries, copy this file to your project and edit +** it to suit your needs. +*/ + + +#define linit_c +#define LUA_LIB + +#include "lua/lua.hpp" +#include "region_api.hpp" + + +/* +** these libs are loaded by lua.c and are readily available to any Lua +** program +*/ +static const luaL_Reg loadedlibs[] = { + /* Standard libs */ + {"_G", luaopen_base}, + {LUA_LOADLIBNAME, luaopen_package}, + {LUA_COLIBNAME, luaopen_coroutine}, + {LUA_TABLIBNAME, luaopen_table}, + {LUA_IOLIBNAME, luaopen_io}, + {LUA_OSLIBNAME, luaopen_os}, + {LUA_STRLIBNAME, luaopen_string}, + {LUA_BITLIBNAME, luaopen_bit32}, + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_DBLIBNAME, luaopen_debug}, + + /* custom libs */ + {LUA_REGIONLIBNAME, luaopen_regionapi}, + + {NULL, NULL} +}; + + +/* +** these libs are preloaded and must be required before used +*/ +static const luaL_Reg preloadedlibs[] = { + {NULL, NULL} +}; + + +LUALIB_API void luaL_openlibs (lua_State *L) { + const luaL_Reg *lib; + /* call open functions from 'loadedlibs' and set results to global table */ + for (lib = loadedlibs; lib->func; lib++) { + luaL_requiref(L, lib->name, lib->func, 1); + lua_pop(L, 1); /* remove lib */ + } + /* add open functions from 'preloadedlibs' into 'package.preload' table */ + luaL_getsubtable(L, LUA_REGISTRYINDEX, "_PRELOAD"); + for (lib = preloadedlibs; lib->func; lib++) { + lua_pushcfunction(L, lib->func); + lua_setfield(L, -2, lib->name); + } + lua_pop(L, 1); /* remove _PRELOAD table */ +} \ No newline at end of file diff --git a/common/script/makefile b/common/script/makefile new file mode 100644 index 0000000..c1b2927 --- /dev/null +++ b/common/script/makefile @@ -0,0 +1,43 @@ +#config +INCLUDES+=. .. ../map +LIBS+= +CXXFLAGS+=-std=c++11 -DDEBUG $(addprefix -I,$(INCLUDES)) +CFLAGS+=-DDEBUG $(addprefix -I,$(INCLUDES)) + +#source +CXXSRC=$(wildcard *.cpp) +CSRC=$(wildcard *.c) + +#objects +OBJDIR=obj +OBJ+=$(addprefix $(OBJDIR)/,$(CXXSRC:.cpp=.o)) +OBJ+=$(addprefix $(OBJDIR)/,$(CSRC:.c=.o)) + +#output +OUTDIR=../.. +OUT=$(addprefix $(OUTDIR)/,libcommon.a) + +#targets +all: $(OBJ) $(OUT) + ar -crs $(OUT) $(OBJ) + +$(OBJ): | $(OBJDIR) + +$(OUT): | $(OUTDIR) + +$(OBJDIR): + mkdir $(OBJDIR) + +$(OUTDIR): + mkdir $(OUTDIR) + +$(OBJDIR)/%.o: %.cpp + $(CXX) $(CXXFLAGS) -c -o $@ $< + +$(OBJDIR)/%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + +clean: + $(RM) *.o *.a *.exe + +rebuild: clean all diff --git a/common/script/region_api.cpp b/common/script/region_api.cpp new file mode 100644 index 0000000..d378835 --- /dev/null +++ b/common/script/region_api.cpp @@ -0,0 +1,27 @@ +/* Copyright: (c) Kayne Ruse 2014 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#include "region_api.hpp" + +LUAMOD_API int luaopen_regionapi(lua_State* L) { + //TODO: stuff + return 1; +} \ No newline at end of file diff --git a/common/script/region_api.hpp b/common/script/region_api.hpp new file mode 100644 index 0000000..310074d --- /dev/null +++ b/common/script/region_api.hpp @@ -0,0 +1,30 @@ +/* Copyright: (c) Kayne Ruse 2014 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#ifndef REGIONAPI_HPP_ +#define REGIONAPI_HPP_ + +#include "lua/lua.hpp" + +#define LUA_REGIONLIBNAME "region" +LUAMOD_API int luaopen_regionapi(lua_State* L); + +#endif diff --git a/editor/editor_scene.hpp b/editor/editor_scene.hpp index e86fa52..ecfc291 100644 --- a/editor/editor_scene.hpp +++ b/editor/editor_scene.hpp @@ -73,7 +73,7 @@ protected: int x = 0, y = 0; } camera; - RegionPager pager; + RegionPager pager; TileSheet tsheet; }; diff --git a/editor/makefile b/editor/makefile index 7343b2e..f785faa 100644 --- a/editor/makefile +++ b/editor/makefile @@ -1,6 +1,6 @@ #config INCLUDES+=../common ../common/graphics ../common/map ../common/ui -LIBS+=../libcommon.a -lmingw32 -lSDLmain -lSDL +LIBS+=../libcommon.a -lmingw32 -lSDLmain -lSDL -llua CXXFLAGS+=-std=c++11 -DDEBUG $(addprefix -I,$(INCLUDES)) CFLAGS+=-DDEBUG $(addprefix -I,$(INCLUDES)) diff --git a/server/makefile b/server/makefile index 6af6c60..9686a1c 100644 --- a/server/makefile +++ b/server/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. ../common ../common/map ../common/network +INCLUDES+=. ../common ../common/map ../common/script ../common/network LIBS+=../libcommon.a -lSDL_net -lwsock32 -liphlpapi -lmingw32 -lSDLmain -lSDL -llua -lsqlite3 CXXFLAGS+=-std=c++11 -DDEBUG $(addprefix -I,$(INCLUDES)) CFLAGS+=-DDEBUG $(addprefix -I,$(INCLUDES)) diff --git a/server/server_application.cpp b/server/server_application.cpp index a126280..9aeed88 100644 --- a/server/server_application.cpp +++ b/server/server_application.cpp @@ -100,6 +100,7 @@ void ServerApplication::Init(int argc, char** argv) { mapPager.SetRegionWidth(REGION_WIDTH); mapPager.SetRegionHeight(REGION_HEIGHT); mapPager.SetRegionDepth(REGION_DEPTH); + mapPager.GetGenerator()->SetLuaState(luaState); //TODO: pass args to the generator & format as needed //NOTE: I might need to rearrange the init process so that lua & SQL can interact // with the map system as needed. @@ -212,7 +213,7 @@ void ServerApplication::HandleJoinRequest(NetworkPacket packet) { //finished this routine clientCounter++; - cout << "connect, total: " << clientMap.size() << endl; + cout << "Connect, total: " << clientMap.size() << endl; } void ServerApplication::HandleDisconnect(NetworkPacket packet) { @@ -239,7 +240,7 @@ void ServerApplication::HandleDisconnect(NetworkPacket packet) { }); //finished this routine - cout << "disconnect, total: " << clientMap.size() << endl; + cout << "Disconnect, total: " << clientMap.size() << endl; } void ServerApplication::HandleSynchronize(NetworkPacket packet) { @@ -270,7 +271,7 @@ void ServerApplication::HandleShutdown(NetworkPacket packet) { PumpPacket(packet); //finished this routine - cout << "shutting down" << endl; + cout << "Shutdown signal accepted" << endl; } void ServerApplication::HandlePlayerNew(NetworkPacket packet) { diff --git a/server/server_application.hpp b/server/server_application.hpp index 3d43ca4..4d969a0 100644 --- a/server/server_application.hpp +++ b/server/server_application.hpp @@ -85,7 +85,7 @@ private: void PumpPacket(NetworkPacket); //maps - RegionPager mapPager; + RegionPager mapPager; //networking UDPNetworkUtility network;