diff --git a/CMakeLists.txt b/CMakeLists.txt index 92942c09..420f264c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,8 @@ SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}") # find needed packages SET(Boost_USE_STATIC_LIBS ON) -FIND_PACKAGE(Boost COMPONENTS system REQUIRED) +SET(Boost_USE_MULTITHREADED ON) +FIND_PACKAGE(Boost COMPONENTS system regex REQUIRED) FIND_PACKAGE(OpenGL REQUIRED) FIND_PACKAGE(Lua51 REQUIRED) FIND_PACKAGE(YamlCpp REQUIRED) @@ -52,7 +53,7 @@ SET(SOURCES # game sources src/main.cpp src/menustate.cpp - + # framework sources src/framework/framebuffer.cpp src/framework/font.cpp @@ -72,8 +73,11 @@ SET(SOURCES IF(WIN32) SET(SOURCES ${SOURCES} src/framework/win32platform.cpp) + SET(ADDITIONAL_LIBRARIES ws2_32) + ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) ELSE(WIN32) SET(SOURCES ${SOURCES} src/framework/x11platform.cpp) + SET(ADDITIONAL_LIBRARIES pthread GLU) ENDIF(WIN32) # target executable @@ -86,4 +90,5 @@ TARGET_LINK_LIBRARIES(otclient ${LUA51_LIBRARY} ${YAMLCPP_LIBRARY} ${PHYSFS_LIBRARY} - ${PNG_LIBRARY}) + ${PNG_LIBRARY} + ${ADDITIONAL_LIBRARIES}) diff --git a/src/framework/configs.cpp b/src/framework/configs.cpp index c2acf814..438c26df 100644 --- a/src/framework/configs.cpp +++ b/src/framework/configs.cpp @@ -53,7 +53,7 @@ bool Configs::load(const std::string& fileName) m_confsMap[key] = value; } } catch (YAML::ParserException& e) { - error("Malformed configuration file!"); + logError("Malformed configuration file!"); return false; } @@ -101,7 +101,7 @@ const std::string &Configs::getString(const std::string &key) const { auto it = m_confsMap.find(key); if(it == m_confsMap.end()) { - warning("Config value %s not found", key.c_str()); + logWarning("Config value %s not found", key.c_str()); static std::string emptystr; return emptystr; } @@ -112,7 +112,7 @@ float Configs::getFloat(const std::string &key) const { auto it = m_confsMap.find(key); if(it == m_confsMap.end()) { - warning("Config value %s not found", key.c_str()); + logWarning("Config value %s not found", key.c_str()); return 0; } return convertType(it->second); @@ -122,7 +122,7 @@ bool Configs::getBoolean(const std::string &key) const { auto it = m_confsMap.find(key); if(it == m_confsMap.end()) { - warning("Config value %s not found", key.c_str()); + logWarning("Config value %s not found", key.c_str()); return 0; } return (it->second == "true"); @@ -132,7 +132,7 @@ int Configs::getInteger(const std::string &key) const { auto it = m_confsMap.find(key); if(it == m_confsMap.end()) { - warning("Config value %s not found", key.c_str()); + logWarning("Config value %s not found", key.c_str()); return 0; } return convertType(it->second); diff --git a/src/framework/engine.cpp b/src/framework/engine.cpp index 200dea5a..b3611f23 100644 --- a/src/framework/engine.cpp +++ b/src/framework/engine.cpp @@ -77,7 +77,7 @@ void Engine::run() Platform::poll(); //poll network events - //debug("%d", g_connections.poll()); + //logDebug("%d", g_connections.poll()); // update before redering ticks = Platform::getTicks(); @@ -113,7 +113,7 @@ void Engine::run() static ConnectionPtr connection = g_connections.createConnection(); if(connection->getLastError()){ - error("%s", connection->getLastError().message().c_str()); + logError("%s", connection->getLastError().message().c_str()); } else{ if(!connection->isConnecting() && !connection->isConnected()){ @@ -121,7 +121,7 @@ void Engine::run() } if(!connection->isConnected()){ - debug("still not connected."); + logDebug("still not connected."); } } */ diff --git a/src/framework/font.cpp b/src/framework/font.cpp index a9c746ba..0503dbfb 100644 --- a/src/framework/font.cpp +++ b/src/framework/font.cpp @@ -37,13 +37,13 @@ Font::Font() : bool Font::load(const std::string& file) { if(!g_resources.fileExists(file)) { - error("Font file %s does not exists", file.c_str()); + logError("Font file %s does not exists", file.c_str()); return false; } std::string fileContents = g_resources.loadTextFile(file); if(!fileContents.size()) { - error("Empty font file \"%s", file.c_str()); + logError("Empty font file \"%s", file.c_str()); return false; } @@ -70,7 +70,7 @@ bool Font::load(const std::string& file) m_texture = g_textures.get("fonts/" + textureName); if(!m_texture) { - error("Failed to load image for font \"%s\"", file.c_str()); + logError("Failed to load image for font \"%s\"", file.c_str()); return false; } @@ -94,7 +94,7 @@ bool Font::load(const std::string& file) m_glyphsSize[glyph].setWidth(glyphWidth); } } catch (YAML::ParserException& e) { - error("Malformed font file \"%s\"", file.c_str()); + logError("Malformed font file \"%s\"", file.c_str()); return false; } diff --git a/src/framework/fonts.cpp b/src/framework/fonts.cpp index fd0d2213..72ebfb1e 100644 --- a/src/framework/fonts.cpp +++ b/src/framework/fonts.cpp @@ -48,7 +48,7 @@ Font* Fonts::get(const std::string& fontName) if(it != m_fonts.end()) { return it->second.get(); } - error("Font \"%s\" not found", fontName.c_str()); + logError("Font \"%s\" not found", fontName.c_str()); return NULL; } @@ -58,6 +58,6 @@ Font *Fonts::getDefault() if(font) { return font; } - fatal("Default font not found!"); + logFatal("Default font not found!"); return NULL; } diff --git a/src/framework/graphics.cpp b/src/framework/graphics.cpp index 689ff52d..7655874d 100644 --- a/src/framework/graphics.cpp +++ b/src/framework/graphics.cpp @@ -43,8 +43,8 @@ void Graphics::init() glShadeModel(GL_SMOOTH); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - notice("GPU %s", (const char*)glGetString(GL_RENDERER)); - notice("OpenGL %s", (const char*)glGetString(GL_VERSION)); + logInfo("GPU %s", (const char*)glGetString(GL_RENDERER)); + logInfo("OpenGL %s", (const char*)glGetString(GL_VERSION)); } void Graphics::terminate() diff --git a/src/framework/logger.cpp b/src/framework/logger.cpp index 1f54eb1f..9a57a354 100644 --- a/src/framework/logger.cpp +++ b/src/framework/logger.cpp @@ -27,8 +27,9 @@ #include #include +#include -void Logger::log(int level, const char *trace, const char *format, ...) +void Logger::_log(int level, const char *trace, const char *format, ...) { va_list args; std::string strace; diff --git a/src/framework/logger.h b/src/framework/logger.h index 02b48904..4d4974ca 100644 --- a/src/framework/logger.h +++ b/src/framework/logger.h @@ -37,23 +37,23 @@ enum ELogLevel { LDEBUG }; -void log(int level, const char *trace, const char *format, ...); +void _log(int level, const char *trace, const char *format, ...); } -#define fatal(...) Logger::log(Logger::LFATAL, NULL, __VA_ARGS__) -#define error(...) Logger::log(Logger::LERROR, NULL, __VA_ARGS__) -#define warning(...) Logger::log(Logger::LWARNING, NULL, __VA_ARGS__) -#define debug(...) Logger::log(Logger::LDEBUG, NULL, __VA_ARGS__) -#define notice(...) Logger::log(Logger::LNOTICE, NULL, __VA_ARGS__) +#define logFatal(...) Logger::_log(Logger::LFATAL, NULL, __VA_ARGS__) +#define logError(...) Logger::_log(Logger::LERROR, NULL, __VA_ARGS__) +#define logWarning(...) Logger::_log(Logger::LWARNING, NULL, __VA_ARGS__) +#define logDebug(...) Logger::_log(Logger::LDEBUG, NULL, __VA_ARGS__) +#define logInfo(...) Logger::_log(Logger::LNOTICE, NULL, __VA_ARGS__) -#define trace() Logger::log(Logger::LDEBUG, __PRETTY_FUNCTION__, "") -#define tdebug(...) Logger::log(Logger::LDEBUG, __PRETTY_FUNCTION__, __VA_ARGS__) +#define logTrace() Logger::_log(Logger::LDEBUG, __PRETTY_FUNCTION__, "") +#define logDebugTrace(...) Logger::_log(Logger::LDEBUG, __PRETTY_FUNCTION__, __VA_ARGS__) struct Dump { public: Dump() { } - ~Dump() { debug(m_buf.str().c_str()); } + ~Dump() { logDebug(m_buf.str().c_str()); } template Dump &operator<<(const T &x) { m_buf << x << " "; return *this; } private: std::ostringstream m_buf; diff --git a/src/framework/net/connection.cpp b/src/framework/net/connection.cpp index 861a5b6b..4ef2ddd4 100644 --- a/src/framework/net/connection.cpp +++ b/src/framework/net/connection.cpp @@ -23,6 +23,8 @@ #include "connection.h" +#include + Connection::Connection(boost::asio::io_service& ioService) : m_socket(ioService), m_resolver(ioService) { @@ -44,7 +46,7 @@ void Connection::stop() void Connection::connect(const std::string& ip, uint16 port) { if(m_connecting){ - error("Already is connecting."); + logError("Already is connecting."); return; } @@ -52,16 +54,16 @@ void Connection::connect(const std::string& ip, uint16 port) m_ip = ip; m_port = port; - debug("connecting..."); + logDebug("connecting..."); //first resolve dns - boost::asio::ip::tcp::resolver::query query(ip, 80); + boost::asio::ip::tcp::resolver::query query(ip, "80"); m_resolver.async_resolve(query, boost::bind(&Connection::onResolveDns, this, boost::asio::placeholders::error, boost::asio::placeholders::iterator)); } void Connection::onResolveDns(const boost::system::error_code& error, boost::asio::ip::tcp::resolver::iterator endpoint_iterator) { - debug("resolving dns.."); + logDebug("resolving dns.."); if(error){ m_connecting = false; m_lastError = error; @@ -82,5 +84,5 @@ void Connection::onConnect(const boost::system::error_code& error) m_connected = true; - notice("Connected on %s.", m_ip.c_str()); + logInfo("Connected on %s.", m_ip.c_str()); } diff --git a/src/framework/net/connection.h b/src/framework/net/connection.h index 17a5e73c..6353d1ca 100644 --- a/src/framework/net/connection.h +++ b/src/framework/net/connection.h @@ -26,6 +26,8 @@ #include "../prerequisites.h" +#include + class Connection { public: diff --git a/src/framework/prerequisites.h b/src/framework/prerequisites.h index 2febfeb4..0e4d2753 100644 --- a/src/framework/prerequisites.h +++ b/src/framework/prerequisites.h @@ -63,9 +63,6 @@ typedef int8_t int8; #include #include #include -#include -#include - #define foreach BOOST_FOREACH // yaml diff --git a/src/framework/resources.cpp b/src/framework/resources.cpp index 558e1305..73b3da5d 100644 --- a/src/framework/resources.cpp +++ b/src/framework/resources.cpp @@ -43,14 +43,14 @@ bool Resources::setWriteDir(const std::string& path) bool ret = (bool)PHYSFS_setWriteDir(path.c_str()); if(!ret) - error("Could not set the path \"%s\" as write directory, file write will not work.", path.c_str()); + logError("Could not set the path \"%s\" as write directory, file write will not work.", path.c_str()); return ret; } bool Resources::addToSearchPath(const std::string& path, bool insertInFront /*= true*/) { if(!PHYSFS_addToSearchPath(path.c_str(), insertInFront ? 0 : 1)) { - error("Error while adding \"%s\" to resources search path: %s", path.c_str(), PHYSFS_getLastError()); + logError("Error while adding \"%s\" to resources search path: %s", path.c_str(), PHYSFS_getLastError()); return false; } return true; @@ -65,7 +65,7 @@ uchar *Resources::loadFile(const std::string& fileName, uint *fileSize) { PHYSFS_file *file = PHYSFS_openRead(fileName.c_str()); if(!file) { - error("Failed to load file \"%s\": %s", fileName.c_str(), PHYSFS_getLastError()); + logError("Failed to load file \"%s\": %s", fileName.c_str(), PHYSFS_getLastError()); *fileSize = 0; return NULL; } @@ -94,7 +94,7 @@ bool Resources::saveFile(const std::string &fileName, const uchar *data, uint si { PHYSFS_file *file = PHYSFS_openWrite(fileName.c_str()); if(!file) { - error("Failed to save file \"%s\": %s", fileName.c_str(), PHYSFS_getLastError()); + logError("Failed to save file \"%s\": %s", fileName.c_str(), PHYSFS_getLastError()); return false; } diff --git a/src/framework/textures.cpp b/src/framework/textures.cpp index ae612b61..f6b94f80 100644 --- a/src/framework/textures.cpp +++ b/src/framework/textures.cpp @@ -44,7 +44,7 @@ TexturePtr Textures::get(const std::string& textureFile) if(!texture) { // load texture // currently only png textures are supported if(!boost::ends_with(textureFile, ".png")) { - error("Unable to load texture %s, file format no supported.", textureFile.c_str()); + logError("Unable to load texture %s, file format no supported.", textureFile.c_str()); return texture; } @@ -55,7 +55,7 @@ TexturePtr Textures::get(const std::string& textureFile) texture = TexturePtr(TextureLoader::loadPNG(textureFileData)); if(!texture) - error("Unable to load texture %s, loading error.", textureFile.c_str()); + logError("Unable to load texture %s, loading error.", textureFile.c_str()); delete[] textureFileData; } diff --git a/src/framework/util.h b/src/framework/util.h index 2dfca475..d0d38a69 100644 --- a/src/framework/util.h +++ b/src/framework/util.h @@ -43,7 +43,7 @@ R convertType(T t) try { ret = boost::lexical_cast(t); } catch(boost::bad_lexical_cast bad) { - error("Error converting type: %s", bad.what()); + logError("Error converting type: %s", bad.what()); } return ret; } diff --git a/src/framework/win32platform.cpp b/src/framework/win32platform.cpp index 0c328009..a9e1dcd1 100644 --- a/src/framework/win32platform.cpp +++ b/src/framework/win32platform.cpp @@ -64,7 +64,7 @@ void Platform::init(const char *appName) wc.lpszClassName = win32.appName.c_str(); // Set The Class Name if(!RegisterClassA(&wc)) - fatal("Failed to register the window class."); + logFatal("Failed to register the window class."); // force first tick Platform::getTicks(); @@ -79,7 +79,7 @@ void Platform::terminate() if(win32.instance) { if(!UnregisterClassA(win32.appName.c_str(), win32.instance)) - error("Unregister class failed."); + logError("Unregister class failed."); win32.instance = NULL; } @@ -139,7 +139,7 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i if(!win32.window) { terminate(); - fatal("Window creation error."); + logFatal("Window creation error."); return false; } @@ -168,31 +168,31 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i if(!(win32.hdc = GetDC(win32.window))) { terminate(); - fatal("Can't Create A GL Device Context."); + logFatal("Can't Create A GL Device Context."); return false; } if(!(pixelFormat = ChoosePixelFormat(win32.hdc, &pfd))) { terminate(); - fatal("Can't Find A Suitable PixelFormat."); + logFatal("Can't Find A Suitable PixelFormat."); return false; } if(!SetPixelFormat(win32.hdc, pixelFormat, &pfd)) { terminate(); - fatal("Can't Set The PixelFormat."); + logFatal("Can't Set The PixelFormat."); return false; } if(!(win32.hrc = wglCreateContext(win32.hdc))) { terminate(); - fatal("Can't Create A GL Rendering Context."); + logFatal("Can't Create A GL Rendering Context."); return false; } if(!wglMakeCurrent(win32.hdc, win32.hrc)) { terminate(); - fatal("Can't Activate The GL Rendering Context."); + logFatal("Can't Activate The GL Rendering Context."); return false; } @@ -203,24 +203,24 @@ void Platform::destroyWindow() { if(win32.hrc) { if(!wglMakeCurrent(NULL, NULL)) - error("Release Of DC And RC Failed."); + logError("Release Of DC And RC Failed."); if(!wglDeleteContext(win32.hrc)) - error("Release Rendering Context Failed."); + logError("Release Rendering Context Failed."); win32.hrc = NULL; } if(win32.hdc) { if(!ReleaseDC(win32.window, win32.hdc)) - error("Release Device Context Failed."); + logError("Release Device Context Failed."); win32.hdc = NULL; } if(win32.window) { if(!DestroyWindow(win32.window)) - error("Destroy window failed."); + logError("Destroy window failed."); win32.window = NULL; } @@ -355,7 +355,7 @@ const char *Platform::getAppUserDir() std::stringstream sdir; sdir << PHYSFS_getUserDir() << "/." << win32.appName << "/"; if((mkdir(sdir.str().c_str()) != 0) && (errno != EEXIST)) - error("Couldn't create directory for saving configuration file. (%s)", sdir.str().c_str()); + logError("Couldn't create directory for saving configuration file. (%s)", sdir.str().c_str()); return sdir.str().c_str(); } diff --git a/src/framework/x11platform.cpp b/src/framework/x11platform.cpp index cfbc79f8..0c3447be 100644 --- a/src/framework/x11platform.cpp +++ b/src/framework/x11platform.cpp @@ -233,18 +233,18 @@ void Platform::init(const char *appName) // open display x11.display = XOpenDisplay(0); if(!x11.display) - fatal("Failed to open X display"); + logFatal("Failed to open X display"); // check if GLX is supported on this display if(!glXQueryExtension(x11.display, 0, 0)) - fatal("GLX not supported"); + logFatal("GLX not supported"); // retrieve GLX version int glxMajor; int glxMinor; if(!glXQueryVersion(x11.display, &glxMajor, &glxMinor)) - fatal("Unable to query GLX version"); - notice("GLX version %d.%d", glxMajor, glxMinor); + logFatal("Unable to query GLX version"); + logInfo("GLX version %d.%d", glxMajor, glxMinor); // clipboard related atoms x11.atomClipboard = XInternAtom(x11.display, "CLIPBOARD", False); @@ -346,7 +346,7 @@ void Platform::poll() keysym != XK_Delete && keysym != XK_Escape ) { - //debug("char: %c code: %d", buf[0], (uchar)buf[0]); + //logDebug("char: %c code: %d", buf[0], (uchar)buf[0]); inputEvent.type = EV_TEXT_ENTER; inputEvent.key.keychar = buf[0]; inputEvent.key.keycode = KC_UNKNOWN; @@ -491,12 +491,12 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i // choose OpenGL, RGBA, double buffered, visual x11.visual = glXChooseVisual(x11.display, DefaultScreen(x11.display), attrList); if(!x11.visual) - fatal("RGBA/Double buffered visual not supported"); + logFatal("RGBA/Double buffered visual not supported"); // create GLX context x11.glxContext = glXCreateContext(x11.display, x11.visual, 0, GL_TRUE); if(!x11.glxContext) - fatal("Unable to create GLX context"); + logFatal("Unable to create GLX context"); // color map x11.colormap = XCreateColormap(x11.display, @@ -529,7 +529,7 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i &wa); if(!x11.window) - fatal("Unable to create X window"); + logFatal("Unable to create X window"); // create input context (to have better key input handling) if(XSupportsLocale()) { @@ -541,14 +541,14 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i XIMPreeditNothing | XIMStatusNothing, XNClientWindow, x11.window, NULL); if(!x11.xic) - error("Unable to create the input context"); + logError("Unable to create the input context"); } else - error("Failed to open an input method"); + logError("Failed to open an input method"); } else - error("X11 does not support the current locale"); + logError("X11 does not support the current locale"); if(!x11.xic) - warning("Input of special keys maybe messed up because we couldn't create an input context"); + logWarning("Input of special keys maybe messed up because we couldn't create an input context"); // set window minimum size @@ -826,6 +826,6 @@ const char *Platform::getAppUserDir() std::stringstream sdir; sdir << PHYSFS_getUserDir() << "/." << x11.appName << "/"; if((mkdir(sdir.str().c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) && (errno != EEXIST)) - error("Couldn't create directory for saving configuration file. (%s)", sdir.str().c_str()); + logError("Couldn't create directory for saving configuration file. (%s)", sdir.str().c_str()); return sdir.str().c_str(); } diff --git a/src/main.cpp b/src/main.cpp index 20298e0d..a16149bd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -91,9 +91,9 @@ int main(int argc, const char *argv[]) // load configurations if(!g_configs.load("config.yml")) - notice("Could not read configuration file, default configurations will be used."); + logInfo("Could not read configuration file, default configurations will be used."); - notice("OTClient 0.1.0"); + logInfo("OTClient 0.1.0"); // create the window Platform::createWindow(g_configs.getInteger("window x"), g_configs.getInteger("window y"),