Fixed CPack and made lua work from .pack file

Adds a custom searcher to the lua table package.searcher.
This commit is contained in:
Linus Probert 2018-02-27 19:59:51 +01:00
parent e161d6becb
commit 22bed2948f
6 changed files with 84 additions and 27 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
/*.dll /*.dll
/tags /tags
/assets.pack /assets.pack
/data.pack
/.vs/ /.vs/
*.swp *.swp
*~ *~

View File

@ -123,6 +123,15 @@ if (NOT WIN32)
) )
endif (NOT WIN32) endif (NOT WIN32)
if (WIN32)
set_target_properties(breakhack PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
set_target_properties(breakhack PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE")
set_target_properties(breakhack PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
set_target_properties(breakhack PROPERTIES COMPILE_DEFINITIONS_RELWITHDEBINFO "_CONSOLE")
set_target_properties(breakhack PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
set_target_properties(breakhack PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS")
endif (WIN32)
# TESTS: # TESTS:
IF (CHECK_FOUND AND NOT WIN32) IF (CHECK_FOUND AND NOT WIN32)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
@ -153,6 +162,17 @@ if (NOT CMAKE_BUILD_TYPE MATCHES Debug)
) )
endif (NOT CMAKE_BUILD_TYPE MATCHES Debug) endif (NOT CMAKE_BUILD_TYPE MATCHES Debug)
if (NOT CMAKE_BUILD_TYPE MATCHES Debug)
add_custom_target(data_pack ALL
COMMAND ${CMAKE_COMMAND} -E tar "-cf" "../data.pack" "--format=zip" --
"mapgen.lua"
"maproombuilder.lua"
"menumapgen.lua"
"monstergen.lua"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data
)
endif (NOT CMAKE_BUILD_TYPE MATCHES Debug)
if (WIN32) if (WIN32)
set(DLL_FILES set(DLL_FILES
${CMAKE_SOURCE_DIR}/bin/libFLAC-8.dll ${CMAKE_SOURCE_DIR}/bin/libFLAC-8.dll
@ -173,6 +193,22 @@ if (WIN32)
endif (WIN32) endif (WIN32)
include(InstallRequiredSystemLibraries) include(InstallRequiredSystemLibraries)
INSTALL(TARGETS breakhack
COMPONENT Release
RUNTIME DESTINATION .
)
INSTALL(FILES assets.pack data.pack
COMPONENT Release
DESTINATION .
)
if (WIN32)
INSTALL(FILES ${DLL_FILES}
COMPONENT Release
DESTINATION .
)
endif (WIN32)
set(CPACK_INSTALL_CMAKE_PROJECTS "${PROJECT_BINARY_DIR};breakhack;Release;.")
set(CPACK_PACKAGE_NAME "BreakHack") set(CPACK_PACKAGE_NAME "BreakHack")
set(CPACK_PACKAGE_VENDOR "OliveShark") set(CPACK_PACKAGE_VENDOR "OliveShark")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
@ -184,26 +220,10 @@ set(CPACK_PACKAGE_VERSION_PATCH "1")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "BreakHack") set(CPACK_PACKAGE_INSTALL_DIRECTORY "BreakHack")
set(CPACK_PACKAGE_FILE_NAME "breakhack-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") set(CPACK_PACKAGE_FILE_NAME "breakhack-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CPACK_PACKAGE_CHECKSUM "MD5") set(CPACK_PACKAGE_CHECKSUM "MD5")
set(CPACK_INSTALL_CMAKE_PROJECTS ${PROJECT_BINARY_DIR} breakhack Release package)
if(UNIX) if(UNIX)
set(CPACK_STRIP_FILES breakhack) set(CPACK_STRIP_FILES breakhack)
set(CPACK_SOURCE_STRIP_FILES "") set(CPACK_SOURCE_STRIP_FILES "")
endif(UNIX) endif(UNIX)
set(CPACK_PACKAGE_EXECUTABLES breakhack "BreakHack")
include(CPack)
INSTALL(TARGETS breakhack include(CPack)
COMPONENT Release
RUNTIME DESTINATION bin
)
INSTALL(FILES assets.pack
COMPONENT Release
DESTINATION bin
)
INSTALL(DIRECTORY data
COMPONENT Release
DESTINATION bin
)
if (WIN32)
INSTALL(FILES ${DLL_FILES} DESTINATION bin)
endif (WIN32)

View File

@ -1,5 +1,5 @@
local room_builder = require "data/maproombuilder" local room_builder = require "maproombuilder"
local monster_gen = require "data/monstergen" local monster_gen = require "monstergen"
-- Setting up some functions -- Setting up some functions
local time = os.time local time = os.time

View File

@ -1,5 +1,5 @@
local room_builder = require "data/maproombuilder" local room_builder = require "maproombuilder"
local monster_gen = require "data/monstergen" local monster_gen = require "monstergen"
map = create_map(CURRENT_LEVEL) -- 'map' needs to be global map = create_map(CURRENT_LEVEL) -- 'map' needs to be global

View File

@ -632,10 +632,11 @@ int main(int argc, char *argv[])
PHYSFS_init(argv[0]); PHYSFS_init(argv[0]);
#ifndef DEBUG #ifndef DEBUG
PHYSFS_mount("assets.pack", NULL, 0); PHYSFS_mount("assets.pack", NULL, 0);
PHYSFS_mount("data.pack", NULL, 0);
#else #else
PHYSFS_mount("assets", NULL, 0); PHYSFS_mount("assets", NULL, 0);
#endif // DEBUG
PHYSFS_mount("data", NULL, 0); PHYSFS_mount("data", NULL, 0);
#endif // DEBUG
if (!init()) if (!init())
return 1; return 1;

View File

@ -25,6 +25,8 @@
#include <lualib.h> #include <lualib.h>
#include <lauxlib.h> #include <lauxlib.h>
#include <physfs.h>
#include "map_lua.h" #include "map_lua.h"
#include "util.h" #include "util.h"
#include "stats.h" #include "stats.h"
@ -52,7 +54,7 @@ static int
l_print_info(lua_State *L) l_print_info(lua_State *L)
{ {
const char *str = luaL_checkstring(L, 1); const char *str = luaL_checkstring(L, 1);
info(str); debug(str);
return 0; return 0;
} }
@ -173,7 +175,7 @@ static Stats
lua_checkstats(lua_State *L, int index) lua_checkstats(lua_State *L, int index)
{ {
// Confirm table // Confirm table
luaL_checktype(L, index, LUA_TTABLE); lua_istable(L, index);
// Push to top of stack // Push to top of stack
lua_pushvalue(L, index); lua_pushvalue(L, index);
@ -310,12 +312,38 @@ l_add_monster(lua_State *L)
return 0; return 0;
} }
static int
l_load_script(lua_State *L)
{
unsigned long size;
const char *name = luaL_checkstring(L, 1);
char *content;
char filename[20];
m_sprintf(filename, 20, "%s.lua", name);
if (!PHYSFS_exists(filename)) {
luaL_error(L, "Unable to locate module: %s\n", name);
return 1; // Unable to locate file
}
debug("Loading module: %s from %s", name, filename);
io_load_lua_buffer(&content, &size, filename);
if (luaL_loadbuffer(L, content, size, name) != 0) {
luaL_error(L, "Error loading module %s from file %s\n\t%s", lua_tostring(L, 1), filename, lua_tostring(L, -1));
}
free(content);
return 1;
}
static Map* static Map*
generate_map(unsigned int level, const char *file, SDL_Renderer *renderer) generate_map(unsigned int level, const char *file, SDL_Renderer *renderer)
{ {
int status, result; int status, result;
info("Running lua map script: %s", file); debug("Running lua map script: %s", file);
lua_State *L = load_lua_state(); lua_State *L = load_lua_state();
@ -360,6 +388,13 @@ generate_map(unsigned int level, const char *file, SDL_Renderer *renderer)
lua_pushinteger(L, level); lua_pushinteger(L, level);
lua_setglobal(L, "CURRENT_LEVEL"); lua_setglobal(L, "CURRENT_LEVEL");
// Add custom searcher
lua_getglobal(L, "package");
lua_getfield(L, -1, "searchers");
lua_pushcfunction(L, l_load_script);
lua_rawseti(L, -2, 1);
lua_pop(L, 2);
result = lua_pcall(L, 0, LUA_MULTRET, 0); result = lua_pcall(L, 0, LUA_MULTRET, 0);
if (result) { if (result) {
fatal("Failed to run script: %s\n", lua_tostring(L, -1)); fatal("Failed to run script: %s\n", lua_tostring(L, -1));
@ -373,7 +408,7 @@ generate_map(unsigned int level, const char *file, SDL_Renderer *renderer)
// Reset the map // Reset the map
map->currentRoom = (Position) { 0, 0 }; map->currentRoom = (Position) { 0, 0 };
info("Done"); debug("Done");
return map; return map;
} }