diff --git a/CMakeLists.txt b/CMakeLists.txt index 5738f94f..dfa45666 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,224 +1,35 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(otclient) -# setup custom cmake modules path -SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}") +INCLUDE(src/framework/CMakeLists.txt) +INCLUDE(src/otclient/CMakeLists.txt) -OPTION(USE_PCH "Use precompiled header" ON) -OPTION(NO_CONSOLE "Disable console window on Windows platform" OFF) -OPTION(HANDLE_EXCEPTIONS "Generate crash reports" OFF) -OPTION(FORBIDDEN_FUNCTIONS "Enable forbidden lua functions" ON) -OPTION(USE_OPENGLES2 "Use OpenGL ES 2.0 (for mobiles devices)" OFF) +OPTION(USE_PCH "Use precompiled header (speed up compile)" ON) -# find needed packages -SET(Boost_USE_STATIC_LIBS ON) -SET(Boost_USE_MULTITHREADED OFF) -FIND_PACKAGE(Boost COMPONENTS system REQUIRED) - -IF(USE_OPENGLES2) - FIND_PACKAGE(OpenGLES2 REQUIRED) - FIND_PACKAGE(EGL REQUIRED) - SET(OPENGL_INCLUDE_DIR ${OPENGLES_INCLUDE_DIR} ${EGL_INCLUDE_DIR}) - SET(OPENGL_LIBRARIES ${OPENGLES_LIBRARY} ${EGL_LIBRARY}) - ADD_DEFINITIONS(-DOPENGLES2) -ELSE(USE_OPENGLES2) - FIND_PACKAGE(OpenGL REQUIRED) -ENDIF(USE_OPENGLES2) - -FIND_PACKAGE(Lua REQUIRED) -FIND_PACKAGE(PhysFS REQUIRED) -FIND_PACKAGE(GMP REQUIRED) -FIND_PACKAGE(ZLIB REQUIRED) -FIND_PACKAGE(PCHSupport REQUIRED) - -# choose a default build type if not specified -IF(NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE Debug) -ENDIF(NOT CMAKE_BUILD_TYPE) -MESSAGE(STATUS "BUILD TYPE: " ${CMAKE_BUILD_TYPE}) - -# setup compiler options -IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CXX_WARNS "-Wall -Wextra -Werror -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-variable -Wno-switch -Wno-missing-field-initializers") - SET(CMAKE_CXX_FLAGS "-std=gnu++0x -pipe ${CXX_WARNS}") - SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -ggdb3 -fno-inline") - SET(CMAKE_CXX_FLAGS_RELEASE "-O2") - SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O1 -g -ggdb -fno-inline") - SET(CMAKE_CXX_LINK_FLAGS "-static-libgcc -static-libstdc++ -Wl,--as-needed") -ENDIF(CMAKE_COMPILER_IS_GNUCXX) - - -INCLUDE_DIRECTORIES( - ${Boost_INCLUDE_DIRS} - ${OPENGL_INCLUDE_DIR} - ${LUA_INCLUDE_DIR} - ${PHYSFS_INCLUDE_DIR} - ${GMP_INCLUDE_DIR} - ${ZLIB_INCLUDE_DIR} - "${CMAKE_CURRENT_SOURCE_DIR}/src" -) - -IF(CMAKE_BUILD_TYPE STREQUAL "Debug") - ADD_DEFINITIONS(-D_DEBUG) -ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug") - -SET(SOURCES - # main - src/main.cpp - - # otclient - src/otclient/otclient.cpp - src/otclient/luafunctions.cpp - - # otclient luascript - src/otclient/luascript/luavaluecasts.cpp - - # otclient core - src/otclient/core/game.cpp - src/otclient/core/map.cpp - src/otclient/core/thingstype.cpp - src/otclient/core/spritemanager.cpp - src/otclient/core/item.cpp - src/otclient/core/tile.cpp - src/otclient/core/thing.cpp - src/otclient/core/creature.cpp - src/otclient/core/effect.cpp - src/otclient/core/missile.cpp - src/otclient/core/localplayer.cpp - src/otclient/core/outfit.cpp - - # otclient ui - src/otclient/ui/uiitem.cpp - src/otclient/ui/uicreature.cpp - src/otclient/ui/uimap.cpp - src/otclient/ui/uigame.cpp - - # otclient net - src/otclient/net/protocollogin.cpp - src/otclient/net/protocolgame.cpp - src/otclient/net/protocolgamesend.cpp - src/otclient/net/protocolgameparse.cpp - - # framework - src/framework/application.cpp - src/framework/luafunctions.cpp - - # framework third party - src/framework/thirdparty/apngloader.cpp - - # framework net - src/framework/net/connection.cpp - src/framework/net/inputmessage.cpp - src/framework/net/outputmessage.cpp - src/framework/net/protocol.cpp - src/framework/net/rsa.cpp - src/framework/net/server.cpp - - # framework core - src/framework/core/logger.cpp - src/framework/core/clock.cpp - src/framework/core/configmanager.cpp - src/framework/core/resourcemanager.cpp - src/framework/core/eventdispatcher.cpp - src/framework/core/modulemanager.cpp - src/framework/core/module.cpp - src/framework/core/clock.cpp - - # framework platform - src/framework/platform/platformwindow.cpp - - # framework graphics - src/framework/graphics/font.cpp - src/framework/graphics/fontmanager.cpp - src/framework/graphics/graphics.cpp - src/framework/graphics/texture.cpp - src/framework/graphics/framebuffer.cpp - src/framework/graphics/animatedtexture.cpp - src/framework/graphics/framebuffer.cpp - src/framework/graphics/texturemanager.cpp - src/framework/graphics/borderimage.cpp - src/framework/graphics/image.cpp - - # framework otml - src/framework/otml/otmldocument.cpp - src/framework/otml/otmlemitter.cpp - src/framework/otml/otmlnode.cpp - src/framework/otml/otmlparser.cpp - src/framework/otml/otmlexception.cpp - - # framework luascript - src/framework/luascript/luainterface.cpp - src/framework/luascript/luaobject.cpp - src/framework/luascript/luaexception.cpp - src/framework/luascript/luavaluecasts.cpp - - # framework ui - src/framework/ui/uimanager.cpp - src/framework/ui/uiwidget.cpp - src/framework/ui/uilabel.cpp - src/framework/ui/uibutton.cpp - src/framework/ui/uilineedit.cpp - src/framework/ui/uiwindow.cpp - src/framework/ui/uianchorlayout.cpp - src/framework/ui/uiverticallayout.cpp - src/framework/ui/uilayout.cpp - src/framework/ui/uiprogressbar.cpp - src/framework/ui/uicheckbox.cpp - src/framework/ui/uiframecounter.cpp - src/framework/ui/uitranslator.cpp -) - -IF(HANDLE_EXCEPTIONS) - ADD_DEFINITIONS(-DHANDLE_EXCEPTIONS) -ENDIF(HANDLE_EXCEPTIONS) - -IF(FORBIDDEN_FUNCTIONS) - ADD_DEFINITIONS(-DFORBIDDEN_FUNCTIONS) -ENDIF(FORBIDDEN_FUNCTIONS) +SET(EXECUTABLE_SOURCES src/main.cpp) +# add executable icon for win32 platforms IF(WIN32) - SET(SOURCES ${SOURCES} src/framework/platform/win32window.cpp) - SET(ADDITIONAL_LIBRARIES ws2_32 mswsock) - - IF(CMAKE_COMPILER_IS_GNUCXX) - ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) - ENDIF(CMAKE_COMPILER_IS_GNUCXX) - - IF(NO_CONSOLE) - IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -mwindows") - ENDIF(CMAKE_COMPILER_IS_GNUCXX) - ENDIF(NO_CONSOLE) - - ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/icon.o + ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/otcicon.o COMMAND ${CMAKE_RC_COMPILER} - -I${CMAKE_CURRENT_SOURCE_DIR}/src/otclient/win32icon - -i${CMAKE_CURRENT_SOURCE_DIR}/src/otclient/win32icon/icon.rc - -o ${CMAKE_CURRENT_BINARY_DIR}/icon.o) - SET(SOURCES ${SOURCES} icon.o) -ELSE(WIN32) - SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -rdynamic") - SET(ADDITIONAL_LIBRARIES pthread) - SET(SOURCES ${SOURCES} src/framework/platform/x11window.cpp) + -I${CMAKE_CURRENT_SOURCE_DIR}/src + -i${CMAKE_CURRENT_SOURCE_DIR}/src/otcicon.rc + -o ${CMAKE_CURRENT_BINARY_DIR}/otcicon.o) + SET(${EXECUTABLE_SOURCES} ${EXECUTABLE_SOURCES} otcicon.o) ENDIF(WIN32) -# target executable -ADD_EXECUTABLE(otclient ${SOURCES}) +# add otclient executable +ADD_EXECUTABLE(otclient ${FRAMEWORK_SOURCES} ${OTCLIENT_SOURCES} ${EXECUTABLE_SOURCES}) # target link libraries -TARGET_LINK_LIBRARIES( - otclient - ${Boost_LIBRARIES} - ${OPENGL_LIBRARIES} - ${LUA_LIBRARIES} - ${PHYSFS_LIBRARY} - ${GMP_LIBRARY} - ${ZLIB_LIBRARY} - ${ADDITIONAL_LIBRARIES} -) +TARGET_LINK_LIBRARIES(otclient ${FRAMEWORK_LIBRARIES}) IF(USE_PCH) + FIND_PACKAGE(PCHSupport REQUIRED) ADD_PRECOMPILED_HEADER(otclient ${CMAKE_CURRENT_SOURCE_DIR}/src/framework/pch.h) + MESSAGE(STATUS "Use precompiled header: ON") +ELSEIF(USE_PCH) + MESSAGE(STATUS "Use precompiled header: OFF") ENDIF(USE_PCH) # installation diff --git a/modules/otclient/otclient.lua b/modules/otclient/otclient.lua index 55c581bd..ac801b10 100644 --- a/modules/otclient/otclient.lua +++ b/modules/otclient/otclient.lua @@ -6,11 +6,8 @@ function OTClient.init() g_window.resize({ width=800, height=600 }) g_window.setTitle('OTClient') g_window.setIcon('otcicon.png') - - addEvent(g_window.show) return true end function OTClient.terminate() - g_window.hide() end diff --git a/src/framework/CMakeLists.txt b/src/framework/CMakeLists.txt new file mode 100644 index 00000000..ebcecc15 --- /dev/null +++ b/src/framework/CMakeLists.txt @@ -0,0 +1,176 @@ +# add framework cmake modules +SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake;${CMAKE_MODULE_PATH}") +MESSAGE(STATUS ${CMAKE_MODULE_PATH}) + +# framework options +OPTION(NO_CONSOLE "Disables console window on Windows platform" OFF) +OPTION(HANDLE_EXCEPTIONS "Generate crash reports" OFF) +OPTION(USE_OPENGL_ES2 "Use OpenGL ES 2.0 (for mobiles devices)" OFF) + +# set debug as default build type +IF(NOT CMAKE_BUILD_TYPE) + SET(CMAKE_BUILD_TYPE Debug) +ENDIF(NOT CMAKE_BUILD_TYPE) + +# find needed libraries +SET(Boost_USE_STATIC_LIBS ON) +SET(Boost_USE_MULTITHREADED OFF) +FIND_PACKAGE(Boost COMPONENTS system REQUIRED) + +IF(USE_OPENGL_ES2) + FIND_PACKAGE(OpenGLES2 REQUIRED) + FIND_PACKAGE(EGL REQUIRED) + SET(OPENGL_INCLUDE_DIR ${OPENGLES_INCLUDE_DIR} ${EGL_INCLUDE_DIR}) + SET(OPENGL_LIBRARIES ${OPENGLES_LIBRARY} ${EGL_LIBRARY}) + ADD_DEFINITIONS(-DOPENGL_ES2) +ELSE(USE_OPENGL_ES2) + FIND_PACKAGE(OpenGL REQUIRED) +ENDIF(USE_OPENGL_ES2) + +FIND_PACKAGE(Lua REQUIRED) +FIND_PACKAGE(PhysFS REQUIRED) +FIND_PACKAGE(GMP REQUIRED) +FIND_PACKAGE(ZLIB REQUIRED) + +# setup compiler options +IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CXX_WARNS "-Wall -Wextra -Werror -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-unused-variable -Wno-switch -Wno-missing-field-initializers") + SET(CMAKE_CXX_FLAGS "-std=gnu++0x -pipe ${CXX_WARNS}") + SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -ggdb3 -fno-inline") + SET(CMAKE_CXX_FLAGS_RELEASE "-O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O1 -g -ggdb -fno-inline") + SET(CMAKE_CXX_LINK_FLAGS "-static-libgcc -static-libstdc++ -Wl,--as-needed") +ENDIF(CMAKE_COMPILER_IS_GNUCXX) + +IF(CMAKE_BUILD_TYPE STREQUAL "Debug") + ADD_DEFINITIONS(-D_DEBUG) +ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug") + +MESSAGE(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) +IF(USE_OPENGL_ES2) + MESSAGE(STATUS "Renderer: OpenGL ES 2") +ELSE(USE_OPENGL_ES2) + MESSAGE(STATUS "Renderer: OpenGL") +ENDIF(USE_OPENGL_ES2) + +IF(HANDLE_EXCEPTIONS) + ADD_DEFINITIONS(-DHANDLE_EXCEPTIONS) + MESSAGE(STATUS "Generate crash reports: ON") +ELSE(HANDLE_EXCEPTIONS) + MESSAGE(STATUS "Generate crash reports: OFF") +ENDIF(HANDLE_EXCEPTIONS) + + +IF(WIN32) + SET(FRAMEWORK_SOURCES ${FRAMEWORK_SOURCES} ${CMAKE_CURRENT_LIST_DIR}/platform/win32window.cpp) + SET(ADDITIONAL_LIBRARIES ws2_32 mswsock) + + IF(CMAKE_COMPILER_IS_GNUCXX) + ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) + ENDIF(CMAKE_COMPILER_IS_GNUCXX) + + IF(NO_CONSOLE) + IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -mwindows") + ENDIF(CMAKE_COMPILER_IS_GNUCXX) + MESSAGE(STATUS "Disable windows console: ON") + ELSE(NO_CONSOLE) + MESSAGE(STATUS "Disable windows console: OFF") + ENDIF(NO_CONSOLE) +ELSE(WIN32) + SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -rdynamic") + SET(ADDITIONAL_LIBRARIES pthread) + SET(FRAMEWORK_SOURCES ${FRAMEWORK_SOURCES} ${CMAKE_CURRENT_LIST_DIR}/platform/x11window.cpp) +ENDIF(WIN32) + + +INCLUDE_DIRECTORIES( + ${Boost_INCLUDE_DIRS} + ${OPENGL_INCLUDE_DIR} + ${LUA_INCLUDE_DIR} + ${PHYSFS_INCLUDE_DIR} + ${GMP_INCLUDE_DIR} + ${ZLIB_INCLUDE_DIR} + "${CMAKE_CURRENT_LIST_DIR}/.." +) + +SET(FRAMEWORK_LIBRARIES + ${Boost_LIBRARIES} + ${OPENGL_LIBRARIES} + ${LUA_LIBRARIES} + ${PHYSFS_LIBRARY} + ${GMP_LIBRARY} + ${ZLIB_LIBRARY} + ${ADDITIONAL_LIBRARIES} +) + + +SET(FRAMEWORK_SOURCES ${FRAMEWORK_SOURCES} + # framework + ${CMAKE_CURRENT_LIST_DIR}/application.cpp + ${CMAKE_CURRENT_LIST_DIR}/luafunctions.cpp + + # framework core + ${CMAKE_CURRENT_LIST_DIR}/core/logger.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/clock.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/configmanager.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/resourcemanager.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/eventdispatcher.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/modulemanager.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/module.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/clock.cpp + + # framework net + ${CMAKE_CURRENT_LIST_DIR}/net/connection.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/inputmessage.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/outputmessage.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/protocol.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/rsa.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/server.cpp + + # framework platform + ${CMAKE_CURRENT_LIST_DIR}/platform/platformwindow.cpp + + # framework graphics + ${CMAKE_CURRENT_LIST_DIR}/graphics/font.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/fontmanager.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/graphics.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/texture.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/framebuffer.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/animatedtexture.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/framebuffer.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/texturemanager.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/borderimage.cpp + ${CMAKE_CURRENT_LIST_DIR}/graphics/image.cpp + + # framework otml + ${CMAKE_CURRENT_LIST_DIR}/otml/otmldocument.cpp + ${CMAKE_CURRENT_LIST_DIR}/otml/otmlemitter.cpp + ${CMAKE_CURRENT_LIST_DIR}/otml/otmlnode.cpp + ${CMAKE_CURRENT_LIST_DIR}/otml/otmlparser.cpp + ${CMAKE_CURRENT_LIST_DIR}/otml/otmlexception.cpp + + # framework luascript + ${CMAKE_CURRENT_LIST_DIR}/luascript/luainterface.cpp + ${CMAKE_CURRENT_LIST_DIR}/luascript/luaobject.cpp + ${CMAKE_CURRENT_LIST_DIR}/luascript/luaexception.cpp + ${CMAKE_CURRENT_LIST_DIR}/luascript/luavaluecasts.cpp + + # framework ui + ${CMAKE_CURRENT_LIST_DIR}/ui/uimanager.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uiwidget.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uilabel.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uibutton.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uilineedit.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uiwindow.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uianchorlayout.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uiverticallayout.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uilayout.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uiprogressbar.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uicheckbox.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uiframecounter.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uitranslator.cpp + + # framework third party + ${CMAKE_CURRENT_LIST_DIR}/thirdparty/apngloader.cpp +) \ No newline at end of file diff --git a/src/framework/application.cpp b/src/framework/application.cpp index cd618829..ad2fde85 100644 --- a/src/framework/application.cpp +++ b/src/framework/application.cpp @@ -33,6 +33,8 @@ #include #include +Application *g_app = nullptr; + void exitSignalHandler(int sig) { static bool signaled = false; @@ -41,18 +43,28 @@ void exitSignalHandler(int sig) case SIGINT: if(!signaled) { signaled = true; - g_dispatcher.addEvent(std::bind(&Application::close, &g_app)); + g_dispatcher.addEvent(std::bind(&Application::close, g_app)); } break; } } -void Application::init(const std::string& appName, const std::vector& args) +Application::Application(const std::string& appName) { - logInfo("Starting application..."); - - m_pollCycleDelay = POLL_CYCLE_DELAY; + g_app = this; m_appName = appName; + m_pollCycleDelay = POLL_CYCLE_DELAY; +} + +Application::~Application() +{ + g_app = nullptr; +} + +void Application::init(const std::vector& args, int appFlags) +{ + m_appFlags = appFlags; + logInfo("Starting application..."); // capture exit signals signal(SIGTERM, exitSignalHandler); @@ -65,37 +77,71 @@ void Application::init(const std::string& appName, const std::vectorgetChildCount() == 0) { - logError("There is no root widgets to display, the app will close"); - m_stopping = true; - } - while(!m_stopping) { g_clock.updateTicks(); @@ -154,7 +194,7 @@ void Application::run() lastPollTicks = g_clock.ticks(); } - if(g_window.isVisible()) { + if(m_appFlags & Fw::AppEnableGraphics && g_window.isVisible()) { g_graphics.beginRender(); render(); g_graphics.endRender(); @@ -180,7 +220,8 @@ void Application::exit() void Application::poll() { // poll input events - g_window.poll(); + if(m_appFlags & Fw::AppEnableGraphics) + g_window.poll(); // poll network events Connection::poll(); diff --git a/src/framework/application.h b/src/framework/application.h index c46393ed..b456765f 100644 --- a/src/framework/application.h +++ b/src/framework/application.h @@ -32,7 +32,10 @@ class Application }; public: - virtual void init(const std::string& appName, const std::vector& args); + Application(const std::string& appName); + ~Application(); + + virtual void init(const std::vector& args, int appFlags); virtual void registerLuaFunctions(); virtual void terminate(); virtual void run(); @@ -53,12 +56,13 @@ protected: private: std::string m_appName; + int m_appFlags; int m_pollCycleDelay; Boolean m_running; Boolean m_stopping; }; -extern Application& g_app; +extern Application *g_app; #endif diff --git a/cmake/FindEGL.cmake b/src/framework/cmake/FindEGL.cmake similarity index 100% rename from cmake/FindEGL.cmake rename to src/framework/cmake/FindEGL.cmake diff --git a/cmake/FindGMP.cmake b/src/framework/cmake/FindGMP.cmake similarity index 100% rename from cmake/FindGMP.cmake rename to src/framework/cmake/FindGMP.cmake diff --git a/cmake/FindLua.cmake b/src/framework/cmake/FindLua.cmake similarity index 100% rename from cmake/FindLua.cmake rename to src/framework/cmake/FindLua.cmake diff --git a/cmake/FindOpenGLES2.cmake b/src/framework/cmake/FindOpenGLES2.cmake similarity index 100% rename from cmake/FindOpenGLES2.cmake rename to src/framework/cmake/FindOpenGLES2.cmake diff --git a/cmake/FindPCHSupport.cmake b/src/framework/cmake/FindPCHSupport.cmake similarity index 100% rename from cmake/FindPCHSupport.cmake rename to src/framework/cmake/FindPCHSupport.cmake diff --git a/cmake/FindPhysFS.cmake b/src/framework/cmake/FindPhysFS.cmake similarity index 100% rename from cmake/FindPhysFS.cmake rename to src/framework/cmake/FindPhysFS.cmake diff --git a/cmake/FindZLIB.cmake b/src/framework/cmake/FindZLIB.cmake similarity index 100% rename from cmake/FindZLIB.cmake rename to src/framework/cmake/FindZLIB.cmake diff --git a/cmake/i486-mingw32_toolchain.cmake b/src/framework/cmake/i486-mingw32_toolchain.cmake similarity index 100% rename from cmake/i486-mingw32_toolchain.cmake rename to src/framework/cmake/i486-mingw32_toolchain.cmake diff --git a/cmake/i586-mingw32msvc_toolchain.cmake b/src/framework/cmake/i586-mingw32msvc_toolchain.cmake similarity index 100% rename from cmake/i586-mingw32msvc_toolchain.cmake rename to src/framework/cmake/i586-mingw32msvc_toolchain.cmake diff --git a/src/framework/const.h b/src/framework/const.h index fa148967..05951fb6 100644 --- a/src/framework/const.h +++ b/src/framework/const.h @@ -271,6 +271,13 @@ namespace Fw //LastState, //AlternateState }; + + enum AppicationFlags { + AppEnableModules = 1, + AppEnableGraphics = 2, + AppEnableConfigs = 4, + AppEnableAll = AppEnableModules | AppEnableGraphics | AppEnableConfigs + }; } #endif diff --git a/src/framework/core/resourcemanager.cpp b/src/framework/core/resourcemanager.cpp index 0367b89d..e84d2ac4 100644 --- a/src/framework/core/resourcemanager.cpp +++ b/src/framework/core/resourcemanager.cpp @@ -32,31 +32,6 @@ ResourceManager g_resources; void ResourceManager::init(const char *argv0) { PHYSFS_init(argv0); - - // setup write directory - if(!g_resources.setupWriteDir()) - logError("Could not setup write directory"); - - // try to find modules directory, all data lives there - //TODO: move this to Application class - std::string baseDir = PHYSFS_getBaseDir(); - std::string possibleDirs[] = { "modules", - baseDir + "modules", - baseDir + "../modules", - baseDir + "../share/" + g_app.getAppName() + "/otclient/modules", - "" }; - - bool found = false; - for(const std::string& dir : possibleDirs) { - if(g_resources.addToSearchPath(dir)) { - logInfo("Using modules directory '", dir.c_str(), "'"); - found = true; - break; - } - } - - if(!found) - logFatal("Could not find modules directory"); } void ResourceManager::terminate() @@ -64,10 +39,10 @@ void ResourceManager::terminate() PHYSFS_deinit(); } -bool ResourceManager::setupWriteDir() +bool ResourceManager::setupWriteDir(const std::string& appWriteDirName) { std::string userDir = PHYSFS_getUserDir(); - std::string dirName = Fw::mkstr(".", g_app.getAppName()); + std::string dirName = Fw::mkstr(".", appWriteDirName); std::string writeDir = userDir + dirName; if(!PHYSFS_setWriteDir(writeDir.c_str())) { if(!PHYSFS_setWriteDir(userDir.c_str())) @@ -196,3 +171,9 @@ std::string ResourceManager::resolvePath(const std::string& path) } return fullPath; } + +std::string ResourceManager::getBaseDir() +{ + return PHYSFS_getBaseDir(); +} + diff --git a/src/framework/core/resourcemanager.h b/src/framework/core/resourcemanager.h index 8adf21b9..de1f4de2 100644 --- a/src/framework/core/resourcemanager.h +++ b/src/framework/core/resourcemanager.h @@ -31,7 +31,7 @@ public: void init(const char *argv0); void terminate(); - bool setupWriteDir(); + bool setupWriteDir(const std::string& appWriteDirName); /// Add an package or directory to the search path bool addToSearchPath(const std::string& path, bool insertInFront = true); @@ -54,7 +54,7 @@ public: std::list listDirectoryFiles(const std::string& directoryPath = ""); std::string resolvePath(const std::string& path); - std::string getAppUserPath(); + std::string getBaseDir(); }; extern ResourceManager g_resources; diff --git a/src/main.cpp b/src/main.cpp index 6fa287e2..982cf3a2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,8 +25,9 @@ int main(int argc, const char* argv[]) { std::vector args(argv, argv + argc); - g_otclient.init(args); - g_otclient.run(); - g_otclient.terminate(); + OTClient otclient; + otclient.init(args); + otclient.run(); + otclient.terminate(); return 0; } diff --git a/src/otclient/win32icon/icon.ico b/src/otcicon.ico similarity index 100% rename from src/otclient/win32icon/icon.ico rename to src/otcicon.ico diff --git a/src/otcicon.rc b/src/otcicon.rc new file mode 100644 index 00000000..52a9a6e7 --- /dev/null +++ b/src/otcicon.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "otcicon.ico" \ No newline at end of file diff --git a/src/otclient/CMakeLists.txt b/src/otclient/CMakeLists.txt new file mode 100644 index 00000000..242787f2 --- /dev/null +++ b/src/otclient/CMakeLists.txt @@ -0,0 +1,44 @@ +# otclient options +OPTION(FORBIDDEN_FUNCTIONS "Enable forbidden lua functions" ON) + +IF(FORBIDDEN_FUNCTIONS) + ADD_DEFINITIONS(-DFORBIDDEN_FUNCTIONS) + MESSAGE(STATUS "Lua forbidden functions: ON") +ELSE(FORBIDDEN_FUNCTIONS) + MESSAGE(STATUS "Lua forbidden functions: OFF") +ENDIF(FORBIDDEN_FUNCTIONS) + +SET(OTCLIENT_SOURCES ${OTCLIENT_SOURCES} + # otclient + ${CMAKE_CURRENT_LIST_DIR}/otclient.cpp + ${CMAKE_CURRENT_LIST_DIR}/luafunctions.cpp + + # otclient luascript + ${CMAKE_CURRENT_LIST_DIR}/luascript/luavaluecasts.cpp + + # otclient core + ${CMAKE_CURRENT_LIST_DIR}/core/game.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/map.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/thingstype.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/spritemanager.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/item.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/tile.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/thing.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/creature.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/effect.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/missile.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/localplayer.cpp + ${CMAKE_CURRENT_LIST_DIR}/core/outfit.cpp + + # otclient ui + ${CMAKE_CURRENT_LIST_DIR}/ui/uiitem.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uicreature.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uimap.cpp + ${CMAKE_CURRENT_LIST_DIR}/ui/uigame.cpp + + # otclient net + ${CMAKE_CURRENT_LIST_DIR}/net/protocollogin.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/protocolgame.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/protocolgamesend.cpp + ${CMAKE_CURRENT_LIST_DIR}/net/protocolgameparse.cpp +) diff --git a/src/otclient/luafunctions.cpp b/src/otclient/luafunctions.cpp index 75caacfd..c09c8265 100644 --- a/src/otclient/luafunctions.cpp +++ b/src/otclient/luafunctions.cpp @@ -22,7 +22,7 @@ void OTClient::registerLuaFunctions() { Application::registerLuaFunctions(); - g_lua.bindGlobalFunction("exit", std::bind(&Application::exit, &g_app)); + g_lua.bindGlobalFunction("exit", std::bind(&Application::exit, g_app)); g_lua.bindGlobalFunction("importDat", std::bind(&ThingsType::load, &g_thingsType, _1)); g_lua.bindGlobalFunction("importSpr", std::bind(&SpriteManager::load, &g_sprites, _1)); g_lua.bindGlobalFunction("getOufitColor", Outfit::getColor); diff --git a/src/otclient/otclient.cpp b/src/otclient/otclient.cpp index 8cf39c2d..314d7c50 100644 --- a/src/otclient/otclient.cpp +++ b/src/otclient/otclient.cpp @@ -22,11 +22,13 @@ #include "otclient.h" -OTClient g_otclient; -Application& g_app = g_otclient; +OTClient::OTClient() : Application(Otc::AppCompactName) +{ + +} void OTClient::init(const std::vector& args) { logInfo(Otc::AppName, " ", Otc::AppVersion); - Application::init(Otc::AppCompactName, args); + Application::init(args, Fw::AppEnableAll); } diff --git a/src/otclient/otclient.h b/src/otclient/otclient.h index 381a610f..e7bd8e55 100644 --- a/src/otclient/otclient.h +++ b/src/otclient/otclient.h @@ -29,10 +29,9 @@ class OTClient : public Application { public: + OTClient(); void init(const std::vector& args); void registerLuaFunctions(); }; -extern OTClient g_otclient; - #endif diff --git a/src/otclient/win32icon/icon.rc b/src/otclient/win32icon/icon.rc deleted file mode 100644 index 328220b9..00000000 --- a/src/otclient/win32icon/icon.rc +++ /dev/null @@ -1 +0,0 @@ -IDI_ICON1 ICON DISCARDABLE "icon.ico" \ No newline at end of file diff --git a/src/pch.h b/src/pch.h deleted file mode 100644 index 5db3d88e..00000000 --- a/src/pch.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2010-2011 OTClient - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef PCH_H -#define PCH_H - -#include "framework/global.h" -#include "otclient/global.h" - -#endif