add a new folder structure redesign organized by packages

This commit is contained in:
Eduardo Bart 2011-07-17 08:52:20 -03:00
parent b1a881eb06
commit ab7394f357
56 changed files with 586 additions and 212 deletions

View File

@ -45,7 +45,7 @@ function EnterGame_connectToLoginServer()
motdBox.onOk = recreateEnterGame motdBox.onOk = recreateEnterGame
end end
-- get account and password and login -- get account and password then login
local enterGameWindow = rootUI:child("enterGameWindow") local enterGameWindow = rootUI:child("enterGameWindow")
local account = enterGameWindow:child("accountNameTextEdit").text local account = enterGameWindow:child("accountNameTextEdit").text
local password = enterGameWindow:child("passwordTextEdit").text local password = enterGameWindow:child("passwordTextEdit").text

View File

@ -0,0 +1,11 @@
rootUI = UI.getRootContainer()
-- AnchorPoint
AnchorNone = 0
AnchorTop = 1
AnchorBottom = 2
AnchorLeft = 3
AnchorRight = 4
AnchorVerticalCenter = 5
AnchorHorizontalCenter = 6

3
packages/core/core.lua Normal file
View File

@ -0,0 +1,3 @@
require 'constants'
require 'util'
require 'messagebox'

View File

@ -0,0 +1,86 @@
MessageBox = {}
MessageBox.__index = MessageBox
-- messagebox flags
MessageBoxOk = 1
MessageBoxCancel = 2
function MessageBox.create(title, text, flags)
local box = {}
setmetatable(box, MessageBox)
-- create messagebox window
local window = UIWindow.new("messageBoxWindow", rootUI)
window.title = title
window:centerIn(rootUI)
window:setLocked()
-- create messagebox label
local label = UILabel.new("messageBoxLabel", window)
label.text = text
label:addAnchor(AnchorHorizontalCenter, window, AnchorHorizontalCenter)
label:addAnchor(AnchorTop, window, AnchorTop)
label:setMargin(27, 0)
-- set window size based on label size
window.width = label.width + 40
window.height = label.height + 64
-- setup messagebox first button
local buttonText
local button1 = UIButton.new("messageBoxButton1", window)
button1:addAnchor(AnchorBottom, window, AnchorBottom)
button1:addAnchor(AnchorRight, window, AnchorRight)
button1:setMargin(10)
if flags == MessageBoxOk then
buttonText = "Ok"
box.onOk = createEmptyFunction()
button1.onClick = function()
box.onOk()
box:destroy()
end
elseif flags == MessageBoxCancel then
buttonText = "Cancel"
box.onCancel = createEmptyFunction()
button1.onClick = function()
box.onCancel()
box:destroy()
end
end
button1.text = buttonText
box.window = window
return box
end
function MessageBox:destroy()
if self.onDestroy then
self.onDestroy()
self.onDestroy = nil
end
if self.window then
self.window:destroy()
self.window = nil
end
self.onOk = nil
self.onCancel = nil
end
-- shortcuts for creating message boxes
function displayMessageBox(title, text, flags)
return MessageBox.create(title, text, flags)
end
function displayErrorBox(title, text)
return MessageBox.create(title, text, MessageBoxOk)
end
function displayInfoBox(title, text)
return MessageBox.create(title, text, MessageBoxOk)
end
function displayCancelBox(title, text)
return MessageBox.create(title, text, MessageBoxCancel)
end

View File

@ -0,0 +1,9 @@
title: Core
description: Core utilities used by other modules
author: otclient
version: 1
website: https://github.com/edubart/otclient
enabled: true
dependencies: [core_fonts, core_styles]
script: core.lua

5
packages/core/util.lua Normal file
View File

@ -0,0 +1,5 @@
function createEmptyFunction()
local emptyFunction = function() end
return emptyFunction
end

View File

@ -0,0 +1,4 @@
-- load default fonts
App.loadFont("fonts/helvetica-11px")
App.loadFont("fonts/helvetica-11px-bold")

View File

@ -0,0 +1,9 @@
glyph-height: 14
glyph-spacing: 1 1
top-margin: 2
image: helvetica-11px-bold.png
image-glyph-size: 16 16
glyph-widths:
32: 4

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -0,0 +1,9 @@
glyph-height: 14
glyph-spacing: 1 1
top-margin: 1
image: helvetica-11px.png
image-glyph-size: 16 16
glyph-widths:
32: 4

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@ -0,0 +1,9 @@
title: Fonts
description: Fonts package
author: otclient
version: 1
website: https://github.com/edubart/otclient
enabled: true
dependencies: []
script: fonts.lua

View File

@ -0,0 +1,9 @@
title: Core styles
description: Core styles used by other modules
author: otclient
version: 1
website: https://github.com/edubart/otclient
enabled: true
dependencies: [core_fonts]
script: styles.lua

View File

@ -0,0 +1,12 @@
-- set default font
App.setDefaultFont("helvetica-11px")
App.setDefaultFontColor(Color("#f0ad4dff"))
-- load styles
App.loadStyle("styles/utilities")
App.loadStyle("styles/panels")
App.loadStyle("styles/buttons")
App.loadStyle("styles/labels")
App.loadStyle("styles/textedits")
App.loadStyle("styles/windows")
App.loadStyle("styles/linedecorations")

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 B

View File

@ -0,0 +1,25 @@
button
font: helvetica-11px-bold
font-color: #f0ad4dff
size: 106 24
bordered-image: { source: button_standard.png; border: 5 }
button:hover
bordered-image: { source: tibia_flash/button_standard_hover.png; border: 5 }
button:down
text-translate: 1 1
bordered-image: { source: tibia_flash/button_standard_down.png; border: 5 }
button.small
width: 64
button.large
width: 144
button.notImplemented
onClick: displayErrorBox("Error", "Not implemented yet")
button.closeParent
onClick: self.parent:destroy()

View File

View File

View File

View File

@ -0,0 +1,57 @@
function EnterGame_connectToLoginServer()
-- create login protocol
local protocolLogin = ProtocolLogin.new()
-- used to recreate enter game window
local recreateEnterGame = function()
loadUI("ui/entergamewindow")
end
-- display loading message box
local loadBox = displayCancelBox("Please wait", "Connecting..")
-- cancel loading callback
loadBox.onCancel = function()
-- cancel protocol and reacreate enter game window
protocolLogin:cancel()
recreateEnterGame()
end
-- error callback
protocolLogin.onError = function(error)
-- destroy loading message box
loadBox:destroy()
-- display error message
local errorBox = displayErrorBox("Login Error", error)
-- cancel protocol and reacreate enter game window
self.cancel()
errorBox.onOk = recreateEnterGame
end
-- motd callback
protocolLogin.onMotd = function(motd)
-- destroy loading message box
loadBox:destroy()
-- display motd
local motdNumber = string.sub(motd, 0, string.find(motd, "\n"))
local motdText = string.sub(motd, string.find(motd, "\n") + 1, string.len(motd))
local motdBox = displayInfoBox("Message of the day", motdText)
-- cancel protocol and reacreate enter game window
self.cancel()
motdBox.onOk = recreateEnterGame
end
-- get account and password then login
local enterGameWindow = rootUI:child("enterGameWindow")
local account = enterGameWindow:child("accountNameTextEdit").text
local password = enterGameWindow:child("passwordTextEdit").text
protocolLogin:login(account, password)
-- destroy enter game window
enterGameWindow:destroy()
end

View File

@ -0,0 +1,16 @@
require 'entergame'
function initializeApplication()
mainMenu = loadUI("ui/mainmenu")
end
function terminateApplication()
App.exit()
end
-- here is where everything starts
if not initialized then
initializeApplication()
App.onClose = terminateApplication
initialized = true
end

View File

@ -0,0 +1,9 @@
title: Main menu
description: Used to create the main menu
author: otclient
version: 1
website: https://github.com/edubart/otclient
enabled: true
dependencies: [core]
script: init.lua

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

@ -0,0 +1,53 @@
window#enterGameWindow
title: Enter Game
size: 236 178
anchor.centerIn: parent
lockOnLoad: true
%label
text: Account name
position: 18 33
%label
text: "Password:"
position: 18 62
%label
text: |
If you don't have
an account yet
anchors.top: parent.top
anchors.left: parent.left
margin: 87 18
%button.notImplemented
text: Create Account
anchors.top: parent.top
anchors.right: parent.right
margin: 94 18
%button.small
text: Ok
anchors.bottomRight: parent.bottomRight
margin: 10 66
onClick: EnterGame_connectToLoginServer()
%button.small.closeParent
text: Cancel
anchors.bottom: parent.bottom
anchors.right: parent.right
margin: 10 13
%textEdit#accountNameTextEdit
text: tibialua0
anchors.top: parent.top
anchors.right: parent.right
margin: 32 18
%textEdit#passwordTextEdit
text: lua123456
text-hidden: true
anchors.top: parent.top
anchors.right: parent.right
margin: 61 18

View File

@ -0,0 +1,54 @@
%window#infoWindow
title: Info
size: 244 221
anchor.centerIn: parent
lockOnLoad: true
%panel.flat
size: 208 129
anchors.top: parent.top
anchors.left: parent.left
margin: 32 18
%label
align: center
text: |-
OTClient
Version 0.2.0
Created by edubart
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
margin.top: 20
%element.bottomSeparator
size: 190 2
anchors.top: parent.top
anchors.left: parent.left
margin: 83 9
%label
text: Official Website
anchors.bottom: parent.bottom
anchors.left: parent.left
margin: 14 9
%button
text: Github Page
size: 80 22
anchors.bottom: parent.bottom
anchors.right: parent.right
margin: 9
%element.bottomSeparator
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
margin: 40 13
%button.closeParent
text: Ok
size: 43 20
anchors.top: parent.top
anchors.left: parent.left
margin: 191 188

View File

@ -0,0 +1,37 @@
%panel#mainBackground
image: { source: background.png; antialised: true }
anchor.fill: parent
%panel#mainMenuPanel.flat
size: 117 171
anchors.bottom: parent.bottom
anchors.left: parent.left
margin: 70 60
button
anchors.top: prev.bottom
anchors.horizontalCenter: parent.horizontalCenter
margin.top: 6
%button.first
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
margin.top: 16
text: Enter Game
onClick: loadUI("entergamewindow")
%button.notImplemented
text: Access Account
%button
text: Options
onClick: loadUI("optionswindow")
%button
text: Info
onClick: loadUI("infowindow")
%button
text: Exit
onClick: terminateApplication()

View File

@ -0,0 +1,82 @@
%window#optionsWindow
title: Options
size: 286 262
anchor.centerIn: parent
lockOnLoad: true
panel
anchors.left: parent.left
anchors.right: parent.right
anchors.top: prev.bottom
margin.left: 18
margin.top: 3
height: 30
button
anchors.top: parent.top
anchors.left: parent.left
margin.top: 3
onClick: displayErrorBox("Error", "Not implemented yet")
label
anchors.top: parent.top
anchors.left: parent.left
margin.top: 99
%panel
anchors.top: parent.top
margin.top: 29
%button { text: General }
%label { text: "Change general\ngame options" }
%panel
%button { text: Graphics }
%label { text: "Change graphics and\nperformance settings" }
%panel
%button { text: Console }
%label { text: Customise the console }
%panel
%button { text: Hotkeys }
%label { text: Edit your hotkey texts }
%element.horizontalSeparator
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
margin: 97 18
%panel
anchors.top: ~
anchors.bottom: parent.bottom
margin.top: 29
%button
text: Motd
anchors.left: parent.left
anchors.bottom: parent.bottom
margin: 60 18
%label
text: |
Show the most recent
Message of the Day
anchors.left: parent.left
anchors.bottom: parent.bottom
margin: 56 117
%element.horizontalSeparator
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
margin: 40 13
%button.closeParent
text: Ok
size: 43 20
anchors.right: parent.right
anchors.bottom: parent.bottom
margin: 13 10

View File

@ -20,7 +20,7 @@ bool Configs::load(const std::string& fileName)
OTMLParser parser(fin, fileName); OTMLParser parser(fin, fileName);
parser.getDocument()->read(&m_confsMap); parser.getDocument()->read(&m_confsMap);
} catch(OTMLException e) { } catch(OTMLException e) {
error("ERROR: Malformed config file: ", e.what()); logError("ERROR: Malformed config file: ", e.what());
return false; return false;
} }

View File

@ -53,7 +53,7 @@ void Engine::run()
// check if root container has elements // check if root container has elements
const UIContainerPtr& rootContainer = UIContainer::getRoot(); const UIContainerPtr& rootContainer = UIContainer::getRoot();
if(rootContainer->getChildCount() == 0) if(rootContainer->getChildCount() == 0)
fatal("FATAL ERROR: no ui loaded at all, no reason to continue running"); logFatal("FATAL ERROR: no ui loaded at all, no reason to continue running");
std::string fpsText; std::string fpsText;
Size fpsTextSize; Size fpsTextSize;

View File

@ -24,20 +24,20 @@ void Resources::init(const char *argv0)
bool found = false; bool found = false;
foreach(dir, possibleDirs) { foreach(dir, possibleDirs) {
if(g_resources.addToSearchPath(dir)) { if(g_resources.addToSearchPath(dir)) {
info("Using data directory: ", dir.c_str()); logInfo("Using data directory: ", dir.c_str());
found = true; found = true;
break; break;
} }
} }
if(!found) if(!found)
fatal("ERROR: could not find data directory"); logFatal("ERROR: could not find data directory");
// setup write directory // setup write directory
dir = Platform::getAppUserDir(); dir = Platform::getAppUserDir();
if(g_resources.setWriteDir(dir)) if(g_resources.setWriteDir(dir))
g_resources.addToSearchPath(dir); g_resources.addToSearchPath(dir);
else else
error("ERROR: could not setup write directory"); logError("ERROR: could not setup write directory");
} }
void Resources::terminate() void Resources::terminate()
@ -84,7 +84,7 @@ bool Resources::loadFile(const std::string& fileName, std::iostream& out)
out.clear(std::ios::goodbit); out.clear(std::ios::goodbit);
PHYSFS_file *file = PHYSFS_openRead(fullPath.c_str()); PHYSFS_file *file = PHYSFS_openRead(fullPath.c_str());
if(!file) { if(!file) {
error("ERROR: Failed to load file '", fullPath.c_str(), "': ", PHYSFS_getLastError()); logError("ERROR: Failed to load file '", fullPath.c_str(), "': ", PHYSFS_getLastError());
out.clear(std::ios::failbit); out.clear(std::ios::failbit);
return false; return false;
} else { } else {
@ -106,7 +106,7 @@ bool Resources::saveFile(const std::string &fileName, const uchar *data, uint si
{ {
PHYSFS_file *file = PHYSFS_openWrite(resolvePath(fileName).c_str()); PHYSFS_file *file = PHYSFS_openWrite(resolvePath(fileName).c_str());
if(!file) { if(!file) {
error("ERROR: Failed to save file '",fileName,"': ",PHYSFS_getLastError()); logError("ERROR: Failed to save file '",fileName,"': ",PHYSFS_getLastError());
return false; return false;
} }

View File

@ -71,7 +71,7 @@ bool Font::load(const std::string& file)
{ {
std::stringstream fin; std::stringstream fin;
if(!g_resources.loadFile(file, fin)) { if(!g_resources.loadFile(file, fin)) {
error("ERROR: Coult not load font file '",file,"'"); logError("ERROR: Coult not load font file '",file,"'");
return false; return false;
} }
@ -93,7 +93,7 @@ bool Font::load(const std::string& file)
// load texture // load texture
m_texture = g_textures.get(textureName); m_texture = g_textures.get(textureName);
if(!m_texture) { if(!m_texture) {
error("ERROR: Failed to load image for font file '",file,"'"); logError("ERROR: Failed to load image for font file '",file,"'");
return false; return false;
} }
@ -117,7 +117,7 @@ bool Font::load(const std::string& file)
m_glyphHeight); m_glyphHeight);
} }
} catch(OTMLException e) { } catch(OTMLException e) {
error("ERROR: Malformed font file \"", file.c_str(), "\":\n ", e.what()); logError("ERROR: Malformed font file \"", file.c_str(), "\":\n ", e.what());
return false; return false;
} }

View File

@ -57,7 +57,7 @@ FontPtr Fonts::get(const std::string& fontName)
return font; return font;
} }
fatal("ERROR: Font '",fontName,"' not found"); logFatal("ERROR: Font '",fontName,"' not found");
return FontPtr(); return FontPtr();
} }

View File

@ -40,8 +40,8 @@ void Graphics::init()
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
info("GPU ", glGetString(GL_RENDERER)); logInfo("GPU ", glGetString(GL_RENDERER));
info("OpenGL ", glGetString(GL_VERSION)); logInfo("OpenGL ", glGetString(GL_VERSION));
} }
void Graphics::terminate() void Graphics::terminate()

View File

@ -37,7 +37,7 @@ uint Texture::internalLoadGLTexture(uchar *pixels, int channels, int width, int
GLint texSize; GLint texSize;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize); glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize);
if(width > texSize || height > texSize) { if(width > texSize || height > texSize) {
error("loading texture with size ",width,"x",height," failed, the maximum size is ",texSize,"x",texSize); logError("loading texture with size ",width,"x",height," failed, the maximum size is ",texSize,"x",texSize);
return 0; return 0;
} }

View File

@ -49,14 +49,14 @@ TexturePtr Textures::get(const std::string& textureFile)
if(!texture) { if(!texture) {
// currently only png textures are supported // currently only png textures are supported
if(!boost::ends_with(textureFile, ".png")) { if(!boost::ends_with(textureFile, ".png")) {
error("ERROR: Unable to load texture '",textureFile,"', file format no supported."); logError("ERROR: Unable to load texture '",textureFile,"', file format no supported.");
return texture; return texture;
} }
// load texture file data // load texture file data
std::stringstream fin; std::stringstream fin;
if(!g_resources.loadFile(textureFile, fin)) { if(!g_resources.loadFile(textureFile, fin)) {
error("ERROR: Unable to load texture '",textureFile,"', file could not be read."); logError("ERROR: Unable to load texture '",textureFile,"', file could not be read.");
return texture; return texture;
} }
@ -64,7 +64,7 @@ TexturePtr Textures::get(const std::string& textureFile)
// load the texture // load the texture
texture = TexturePtr(TextureLoader::loadPNG(fin)); texture = TexturePtr(TextureLoader::loadPNG(fin));
if(!texture) if(!texture)
error("ERROR: Unable to load texture '",textureFile,"'"); logError("ERROR: Unable to load texture '",textureFile,"'");
} }
return texture; return texture;
} }

View File

@ -87,6 +87,6 @@ std::string InputMessage::getString()
bool InputMessage::canRead(int bytes) bool InputMessage::canRead(int bytes)
{ {
if((m_readPos + bytes > m_messageSize) || (m_readPos + bytes > BUFFER_MAXSIZE)) if((m_readPos + bytes > m_messageSize) || (m_readPos + bytes > BUFFER_MAXSIZE))
fatal("[InputMessage::canRead()]: Cant read. Message is finished or read position has reached buffer's maximum size."); logFatal("[InputMessage::canRead()]: Cant read. Message is finished or read position has reached buffer's maximum size.");
return true; return true;
} }

View File

@ -105,6 +105,6 @@ void OutputMessage::addPaddingBytes(int bytes, uint8 byte)
bool OutputMessage::canWrite(int bytes) bool OutputMessage::canWrite(int bytes)
{ {
if(m_writePos + bytes > BUFFER_MAXSIZE) if(m_writePos + bytes > BUFFER_MAXSIZE)
fatal("[OutputMessage::canWrite()]: Can't write. Write position has reached buffer's maxium size."); logFatal("[OutputMessage::canWrite()]: Can't write. Write position has reached buffer's maxium size.");
return true; return true;
} }

View File

@ -64,7 +64,7 @@ void Protocol::onRecv(InputMessage *inputMessage)
uint32 checksum = getAdlerChecksum(inputMessage->getBuffer() + InputMessage::DATA_POS, inputMessage->getMessageSize() - InputMessage::CHECKSUM_LENGTH); uint32 checksum = getAdlerChecksum(inputMessage->getBuffer() + InputMessage::DATA_POS, inputMessage->getMessageSize() - InputMessage::CHECKSUM_LENGTH);
if(inputMessage->getU32() != checksum) { if(inputMessage->getU32() != checksum) {
// error // error
error("Checksum is invalid."); logError("Checksum is invalid.");
return; return;
} }
@ -74,7 +74,7 @@ void Protocol::onRecv(InputMessage *inputMessage)
void Protocol::onError(const boost::system::error_code& err) void Protocol::onError(const boost::system::error_code& err)
{ {
error("PROTOCOL ERROR: ", err.message()); logError("PROTOCOL ERROR: ", err.message());
// invalid hostname // invalid hostname
// connection timeouted // connection timeouted

View File

@ -211,7 +211,7 @@ void Platform::init(const char *appName)
wc.lpszClassName = win32.appName.c_str(); // Set The Class Name wc.lpszClassName = win32.appName.c_str(); // Set The Class Name
if(!RegisterClassA(&wc)) if(!RegisterClassA(&wc))
fatal("FATAL ERROR: Failed to register the window class."); logFatal("FATAL ERROR: Failed to register the window class.");
// force first tick // force first tick
Platform::getTicks(); Platform::getTicks();
@ -226,7 +226,7 @@ void Platform::terminate()
if(win32.instance) { if(win32.instance) {
if(!UnregisterClassA(win32.appName.c_str(), win32.instance)) if(!UnregisterClassA(win32.appName.c_str(), win32.instance))
error("ERROR: Unregister class failed."); logError("ERROR: Unregister class failed.");
win32.instance = NULL; win32.instance = NULL;
} }
@ -286,7 +286,7 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i
if(!win32.window) { if(!win32.window) {
terminate(); terminate();
fatal("FATAL ERROR: Window creation error."); logFatal("FATAL ERROR: Window creation error.");
return false; return false;
} }
@ -315,31 +315,31 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i
if(!(win32.hdc = GetDC(win32.window))) { if(!(win32.hdc = GetDC(win32.window))) {
terminate(); terminate();
fatal("FATAL ERROR: Can't Create A GL Device Context."); logFatal("FATAL ERROR: Can't Create A GL Device Context.");
return false; return false;
} }
if(!(pixelFormat = ChoosePixelFormat(win32.hdc, &pfd))) { if(!(pixelFormat = ChoosePixelFormat(win32.hdc, &pfd))) {
terminate(); terminate();
fatal("FATAL ERROR: Can't Find A Suitable PixelFormat."); logFatal("FATAL ERROR: Can't Find A Suitable PixelFormat.");
return false; return false;
} }
if(!SetPixelFormat(win32.hdc, pixelFormat, &pfd)) { if(!SetPixelFormat(win32.hdc, pixelFormat, &pfd)) {
terminate(); terminate();
fatal("FATAL ERROR: Can't Set The PixelFormat."); logFatal("FATAL ERROR: Can't Set The PixelFormat.");
return false; return false;
} }
if(!(win32.hrc = wglCreateContext(win32.hdc))) { if(!(win32.hrc = wglCreateContext(win32.hdc))) {
terminate(); terminate();
fatal("FATAL ERROR: Can't Create A GL Rendering Context."); logFatal("FATAL ERROR: Can't Create A GL Rendering Context.");
return false; return false;
} }
if(!wglMakeCurrent(win32.hdc, win32.hrc)) { if(!wglMakeCurrent(win32.hdc, win32.hrc)) {
terminate(); terminate();
fatal("FATAL ERROR: Can't Activate The GL Rendering Context."); logFatal("FATAL ERROR: Can't Activate The GL Rendering Context.");
return false; return false;
} }
@ -350,24 +350,24 @@ void Platform::destroyWindow()
{ {
if(win32.hrc) { if(win32.hrc) {
if(!wglMakeCurrent(NULL, NULL)) if(!wglMakeCurrent(NULL, NULL))
error("ERROR: Release Of DC And RC Failed."); logError("ERROR: Release Of DC And RC Failed.");
if(!wglDeleteContext(win32.hrc)) if(!wglDeleteContext(win32.hrc))
error("ERROR: Release Rendering Context Failed."); logError("ERROR: Release Rendering Context Failed.");
win32.hrc = NULL; win32.hrc = NULL;
} }
if(win32.hdc) { if(win32.hdc) {
if(!ReleaseDC(win32.window, win32.hdc)) if(!ReleaseDC(win32.window, win32.hdc))
error("ERROR: Release Device Context Failed."); logError("ERROR: Release Device Context Failed.");
win32.hdc = NULL; win32.hdc = NULL;
} }
if(win32.window) { if(win32.window) {
if(!DestroyWindow(win32.window)) if(!DestroyWindow(win32.window))
error("ERROR: Destroy window failed."); logError("ERROR: Destroy window failed.");
win32.window = NULL; win32.window = NULL;
} }
@ -502,7 +502,7 @@ std::string Platform::getAppUserDir()
std::stringstream sdir; std::stringstream sdir;
sdir << PHYSFS_getUserDir() << "/." << win32.appName << "/"; sdir << PHYSFS_getUserDir() << "/." << win32.appName << "/";
if((mkdir(sdir.str().c_str()) != 0) && (errno != EEXIST)) if((mkdir(sdir.str().c_str()) != 0) && (errno != EEXIST))
ferror("ERROR: Couldn't create directory for saving configuration file. (%s)", sdir.str().c_str()); flogError("ERROR: Couldn't create directory for saving configuration file. (%s)", sdir.str().c_str());
return sdir.str(); return sdir.str();
} }

View File

@ -213,18 +213,18 @@ void Platform::init(const char *appName)
// open display // open display
x11.display = XOpenDisplay(0); x11.display = XOpenDisplay(0);
if(!x11.display) if(!x11.display)
fatal("FATAL ERROR: Failed to open X display"); logFatal("FATAL ERROR: Failed to open X display");
// check if GLX is supported on this display // check if GLX is supported on this display
if(!glXQueryExtension(x11.display, 0, 0)) if(!glXQueryExtension(x11.display, 0, 0))
fatal("FATAL ERROR: GLX not supported"); logFatal("FATAL ERROR: GLX not supported");
// retrieve GLX version // retrieve GLX version
int glxMajor; int glxMajor;
int glxMinor; int glxMinor;
if(!glXQueryVersion(x11.display, &glxMajor, &glxMinor)) if(!glXQueryVersion(x11.display, &glxMajor, &glxMinor))
fatal("FATAL ERROR: Unable to query GLX version"); logFatal("FATAL ERROR: Unable to query GLX version");
info("GLX version ",glxMajor,".",glxMinor); logInfo("GLX version ",glxMajor,".",glxMinor);
// clipboard related atoms // clipboard related atoms
x11.atomClipboard = XInternAtom(x11.display, "CLIPBOARD", False); x11.atomClipboard = XInternAtom(x11.display, "CLIPBOARD", False);
@ -328,7 +328,7 @@ void Platform::poll()
keysym != XK_Escape && keysym != XK_Escape &&
(uchar)(buf[0]) >= 32 (uchar)(buf[0]) >= 32
) { ) {
//debug("char: ", buf[0], " code: ", (uint)buf[0]); //logDebug("char: ", buf[0], " code: ", (uint)buf[0]);
inputEvent.type = EV_TEXT_ENTER; inputEvent.type = EV_TEXT_ENTER;
inputEvent.keychar = buf[0]; inputEvent.keychar = buf[0];
inputEvent.keycode = KC_UNKNOWN; inputEvent.keycode = KC_UNKNOWN;
@ -476,12 +476,12 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i
// choose OpenGL, RGBA, double buffered, visual // choose OpenGL, RGBA, double buffered, visual
x11.visual = glXChooseVisual(x11.display, DefaultScreen(x11.display), attrList); x11.visual = glXChooseVisual(x11.display, DefaultScreen(x11.display), attrList);
if(!x11.visual) if(!x11.visual)
fatal("FATAL ERROR: RGBA/Double buffered visual not supported"); logFatal("FATAL ERROR: RGBA/Double buffered visual not supported");
// create GLX context // create GLX context
x11.glxContext = glXCreateContext(x11.display, x11.visual, 0, GL_TRUE); x11.glxContext = glXCreateContext(x11.display, x11.visual, 0, GL_TRUE);
if(!x11.glxContext) if(!x11.glxContext)
fatal("FATAL ERROR: Unable to create GLX context"); logFatal("FATAL ERROR: Unable to create GLX context");
// color map // color map
x11.colormap = XCreateColormap(x11.display, x11.colormap = XCreateColormap(x11.display,
@ -514,7 +514,7 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i
&wa); &wa);
if(!x11.window) if(!x11.window)
fatal("FATAL ERROR: Unable to create X window"); logFatal("FATAL ERROR: Unable to create X window");
// create input context (to have better key input handling) // create input context (to have better key input handling)
if(XSupportsLocale()) { if(XSupportsLocale()) {
@ -526,14 +526,14 @@ bool Platform::createWindow(int x, int y, int width, int height, int minWidth, i
XIMPreeditNothing | XIMStatusNothing, XIMPreeditNothing | XIMStatusNothing,
XNClientWindow, x11.window, NULL); XNClientWindow, x11.window, NULL);
if(!x11.xic) if(!x11.xic)
error("ERROR: Unable to create the input context"); logError("ERROR: Unable to create the input context");
} else } else
error("ERROR: Failed to open an input method"); logError("ERROR: Failed to open an input method");
} else } else
error("ERROR: X11 does not support the current locale"); logError("ERROR: X11 does not support the current locale");
if(!x11.xic) 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 // set window minimum size
@ -815,6 +815,6 @@ std::string Platform::getAppUserDir()
std::stringstream sdir; std::stringstream sdir;
sdir << PHYSFS_getUserDir() << "." << x11.appName; sdir << PHYSFS_getUserDir() << "." << x11.appName;
if((mkdir(sdir.str().c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) && (errno != EEXIST)) if((mkdir(sdir.str().c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) && (errno != EEXIST))
error("ERROR: Couldn't create directory for saving configuration file. (",sdir.str(),")"); logError("ERROR: Couldn't create directory for saving configuration file. (",sdir.str(),")");
return sdir.str(); return sdir.str();
} }

View File

@ -1,75 +0,0 @@
/* The MIT License
*
* Copyright (c) 2010 OTClient, https://github.com/edubart/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 LUAFUNCTIONS_H
#define LUAFUNCTIONS_H
#include <global.h>
#include <script/scriptable.h>
void registerLuaFunctions();
// App
int lua_App_exit();
// UI
int lua_UI_load();
int lua_UI_getRootContainer();
// UIElement
int lua_UIElement_getId();
int lua_UIElement_setId();
int lua_UIElement_isEnabled();
int lua_UIElement_setEnabled();
int lua_UIElement_isVisible();
int lua_UIElement_setVisible();
int lua_UIElement_isFocused();
int lua_UIElement_setFocused();
int lua_UIElement_getParent();
int lua_UIElement_setParent();
int lua_UIElement_setLocked();
int lua_UIElement_destroy();
void lua_UIElement_onLoad();
void lua_UIElement_onDestroy();
// UIContainer
int lua_UIContainer_getChild();
int lua_UIContainer_getChildren();
// UILabel
int lua_UILabel_setText();
int lua_UILabel_getText();
// UITextEdit
int lua_UITextEdit_setText();
int lua_UITextEdit_getText();
// UIButton
void lua_UIButton_onClick();
// UIWindow
int lua_UIWindow_setTitle();
int lua_UIWindow_getTitle();
#endif // LUAFUNCTIONS_H

View File

@ -12,7 +12,7 @@ void ScriptContext::init()
{ {
L = luaL_newstate(); L = luaL_newstate();
if(!L) if(!L)
fatal("FATAL ERROR: could not create lua context"); logFatal("FATAL ERROR: could not create lua context");
// load lua standard libraries // load lua standard libraries
luaL_openlibs(L); luaL_openlibs(L);
@ -48,7 +48,7 @@ bool ScriptContext::loadFile(const std::string& fileName)
if(g_resources.loadFile(fileName, fin)) if(g_resources.loadFile(fileName, fin))
return loadBuffer(fin.str(), fileName); return loadBuffer(fin.str(), fileName);
else else
error("ERROR: script file '", fileName, "' doesn't exist"); logError("ERROR: script file '", fileName, "' doesn't exist");
return false; return false;
} }
@ -81,7 +81,7 @@ void ScriptContext::reportError(const std::string& errorDesc, const char *funcNa
if(funcName) if(funcName)
ss << " in " << funcName << "(): "; ss << " in " << funcName << "(): ";
ss << errorDesc; ss << errorDesc;
error(ss.str()); logError(ss.str());
} }
void ScriptContext::reportErrorWithTraceback(const std::string& errorDesc, const char* funcName) void ScriptContext::reportErrorWithTraceback(const std::string& errorDesc, const char* funcName)
@ -385,7 +385,7 @@ std::string ScriptContext::getFunctionSourcePath(bool functionIsOnStack, int lev
if(source[0] == '@' && pos != std::string::npos) if(source[0] == '@' && pos != std::string::npos)
path = source.substr(1, pos - 1); path = source.substr(1, pos - 1);
} else { } else {
error("no source"); logError("no source");
} }
} }
return path; return path;

View File

@ -38,19 +38,19 @@ bool UIAnchorLayout::addAnchor(const UIElementPtr& anchoredElement, AnchorPoint
UIElementPtr anchorLineElement = anchor.getAnchorLineElement(); UIElementPtr anchorLineElement = anchor.getAnchorLineElement();
if(!anchorLineElement) { if(!anchorLineElement) {
error("ERROR: could not find the element to anchor on, wrong id?"); logError("ERROR: could not find the element to anchor on, wrong id?");
return false; return false;
} }
// we can never anchor with itself // we can never anchor with itself
if(anchoredElement == anchorLineElement) { if(anchoredElement == anchorLineElement) {
error("ERROR: anchoring with itself is not possible"); logError("ERROR: anchoring with itself is not possible");
return false; return false;
} }
// we must never anchor to an anchor child // we must never anchor to an anchor child
if(hasElementInAnchorTree(anchorLineElement, anchoredElement)) { if(hasElementInAnchorTree(anchorLineElement, anchoredElement)) {
error("ERROR: anchors is miss configurated, you must never make anchor chains in loops"); logError("ERROR: anchors is miss configurated, you must never make anchor chains in loops");
return false; return false;
} }

View File

@ -58,7 +58,7 @@ void UIElement::destroyCheck()
UIElementPtr me = asUIElement(); UIElementPtr me = asUIElement();
// check for leaks, the number of references must be always 2 here // check for leaks, the number of references must be always 2 here
if(me.use_count() != 2 && me != UIContainer::getRoot()) { if(me.use_count() != 2 && me != UIContainer::getRoot()) {
warning("destroyed element with id '",getId(),"', but it still have ",(me.use_count()-2)," references left"); logWarning("destroyed element with id '",getId(),"', but it still have ",(me.use_count()-2)," references left");
} }
} }
@ -205,7 +205,7 @@ void UIElement::addAnchor(AnchorPoint anchoredEdge, AnchorLine anchorEdge)
{ {
UIElementPtr target = backwardsGetElementById(anchorEdge.getElementId()); UIElementPtr target = backwardsGetElementById(anchorEdge.getElementId());
if(!target) if(!target)
warning("warning: element id '", anchorEdge.getElementId(), "' doesn't exist while anchoring element '", getId(), "'"); logWarning("warning: element id '", anchorEdge.getElementId(), "' doesn't exist while anchoring element '", getId(), "'");
UIAnchorLayoutPtr layout = boost::dynamic_pointer_cast<UIAnchorLayout>(getLayout()); UIAnchorLayoutPtr layout = boost::dynamic_pointer_cast<UIAnchorLayout>(getLayout());
if(layout) if(layout)

View File

@ -101,7 +101,6 @@ public:
/// Get layout size, it always return the absolute position /// Get layout size, it always return the absolute position
Rect getRect() const { return m_rect; } Rect getRect() const { return m_rect; }
// margins
void setMargin(int top, int right, int bottom, int left) { m_marginLeft = left; m_marginRight = right; m_marginTop = top; m_marginBottom = bottom; getLayout()->recalculateElementLayout(asUIElement()); } void setMargin(int top, int right, int bottom, int left) { m_marginLeft = left; m_marginRight = right; m_marginTop = top; m_marginBottom = bottom; getLayout()->recalculateElementLayout(asUIElement()); }
void setMargin(int vertical, int horizontal) { m_marginLeft = m_marginRight = horizontal; m_marginTop = m_marginBottom = vertical; getLayout()->recalculateElementLayout(asUIElement()); } void setMargin(int vertical, int horizontal) { m_marginLeft = m_marginRight = horizontal; m_marginTop = m_marginBottom = vertical; getLayout()->recalculateElementLayout(asUIElement()); }
void setMargin(int margin) { m_marginLeft = m_marginRight = m_marginTop = m_marginBottom = margin; getLayout()->recalculateElementLayout(asUIElement()); } void setMargin(int margin) { m_marginLeft = m_marginRight = m_marginTop = m_marginBottom = margin; getLayout()->recalculateElementLayout(asUIElement()); }
@ -115,7 +114,6 @@ public:
int getMarginTop() const { return m_marginTop; } int getMarginTop() const { return m_marginTop; }
int getMarginBottom() const { return m_marginBottom; } int getMarginBottom() const { return m_marginBottom; }
// layout related
void centerIn(const std::string& targetId); void centerIn(const std::string& targetId);
void addAnchor(AnchorPoint anchoredEdge, AnchorLine anchorEdge); void addAnchor(AnchorPoint anchoredEdge, AnchorLine anchorEdge);

View File

@ -34,7 +34,7 @@ ImagePtr UIElementSkin::loadImage(OTMLNode* node)
if(OTMLNode* cnode = node->at("bordered image")) { if(OTMLNode* cnode = node->at("bordered image")) {
image = BorderedImage::loadFromOTMLNode(cnode, g_uiSkins.getDefaultTexture()); image = BorderedImage::loadFromOTMLNode(cnode, g_uiSkins.getDefaultTexture());
if(!image) if(!image)
error(node->generateErrorMessage("failed to load bordered image")); logError(node->generateErrorMessage("failed to load bordered image"));
} else if(OTMLNode* cnode = node->at("image")) { } else if(OTMLNode* cnode = node->at("image")) {
texture = g_textures.get(cnode->value()); texture = g_textures.get(cnode->value());
if(texture) if(texture)
@ -43,7 +43,7 @@ ImagePtr UIElementSkin::loadImage(OTMLNode* node)
m_defaultSize = texture->getSize(); m_defaultSize = texture->getSize();
if(!image) if(!image)
error(cnode->generateErrorMessage("failed to load image")); logError(cnode->generateErrorMessage("failed to load image"));
} }
if(texture) { if(texture) {

View File

@ -67,7 +67,7 @@ UIElementPtr UILoader::loadFromFile(std::string filePath, const UIContainerPtr&
// create element interpreting it's id // create element interpreting it's id
element = createElementFromId(elementId); element = createElementFromId(elementId);
if(!element) { if(!element) {
error(doc->front()->generateErrorMessage("invalid root element type")); logError(doc->front()->generateErrorMessage("invalid root element type"));
return element; return element;
} }
parent->addChild(element); parent->addChild(element);
@ -82,7 +82,7 @@ UIElementPtr UILoader::loadFromFile(std::string filePath, const UIContainerPtr&
// report onLoad events // report onLoad events
element->onLoad(); element->onLoad();
} catch(OTMLException e) { } catch(OTMLException e) {
error("ERROR: Failed to load ui ",filePath,": ", e.what()); logError("ERROR: Failed to load ui ",filePath,": ", e.what());
} }
return element; return element;
@ -96,7 +96,7 @@ void UILoader::populateContainer(const UIContainerPtr& parent, OTMLNode* node)
if(id[0] == '%') { if(id[0] == '%') {
UIElementPtr element = createElementFromId(id); UIElementPtr element = createElementFromId(id);
if(!element) { if(!element) {
error(cnode->generateErrorMessage("invalid element type")); logError(cnode->generateErrorMessage("invalid element type"));
continue; continue;
} }
parent->addChild(element); parent->addChild(element);
@ -184,20 +184,20 @@ void UILoader::loadElementAnchor(const UIElementPtr& anchoredElement, AnchorPoin
std::string anchorDescription = node->value(); std::string anchorDescription = node->value();
if(anchorDescription.empty()) { if(anchorDescription.empty()) {
error(node->generateErrorMessage("anchor is empty, did you forget to fill it?")); logError(node->generateErrorMessage("anchor is empty, did you forget to fill it?"));
return; return;
} }
UIAnchorLayoutPtr layout = boost::dynamic_pointer_cast<UIAnchorLayout>(anchoredElement->getLayout()); UIAnchorLayoutPtr layout = boost::dynamic_pointer_cast<UIAnchorLayout>(anchoredElement->getLayout());
if(!layout) { if(!layout) {
error(node->generateErrorMessage("could not add anchor, because this element does not participate of an anchor layout")); logError(node->generateErrorMessage("could not add anchor, because this element does not participate of an anchor layout"));
return; return;
} }
std::vector<std::string> split; std::vector<std::string> split;
boost::split(split, anchorDescription, boost::is_any_of(std::string("."))); boost::split(split, anchorDescription, boost::is_any_of(std::string(".")));
if(split.size() != 2) { if(split.size() != 2) {
error(node->generateErrorMessage("invalid anchor")); logError(node->generateErrorMessage("invalid anchor"));
return; return;
} }
@ -205,12 +205,12 @@ void UILoader::loadElementAnchor(const UIElementPtr& anchoredElement, AnchorPoin
AnchorPoint anchorLineEdge = UIAnchorLayout::parseAnchorPoint(split[1]); AnchorPoint anchorLineEdge = UIAnchorLayout::parseAnchorPoint(split[1]);
if(anchorLineEdge == AnchorNone) { if(anchorLineEdge == AnchorNone) {
error(node->generateErrorMessage("invalid anchor type")); logError(node->generateErrorMessage("invalid anchor type"));
return; return;
} }
if(!layout->addAnchor(anchoredElement, anchoredEdge, AnchorLine(anchorLineElementId, anchorLineEdge))) if(!layout->addAnchor(anchoredElement, anchoredEdge, AnchorLine(anchorLineElementId, anchorLineEdge)))
error(node->generateErrorMessage("anchoring failed")); logError(node->generateErrorMessage("anchoring failed"));
} }
void UILoader::loadElementScriptFunction(const UIElementPtr& element, OTMLNode* node) void UILoader::loadElementScriptFunction(const UIElementPtr& element, OTMLNode* node)
@ -225,7 +225,7 @@ void UILoader::loadElementScriptFunction(const UIElementPtr& element, OTMLNode*
if(g_lua.loadBufferAsFunction(node->value(), functionDesc)) if(g_lua.loadBufferAsFunction(node->value(), functionDesc))
g_lua.setScriptObjectField(element, node->tag()); g_lua.setScriptObjectField(element, node->tag());
else else
error(node->generateErrorMessage("failed to parse inline lua script")); logError(node->generateErrorMessage("failed to parse inline lua script"));
} }
void UILoader::loadButton(const UIButtonPtr& button, OTMLNode* node) void UILoader::loadButton(const UIButtonPtr& button, OTMLNode* node)

View File

@ -42,7 +42,7 @@ void UISkins::load(const std::string& skinName)
std::stringstream fin; std::stringstream fin;
if(!g_resources.loadFile(skinName + ".otml", fin)) if(!g_resources.loadFile(skinName + ".otml", fin))
fatal("FATAL ERROR: Could not load skin '",skinName,"'"); logFatal("FATAL ERROR: Could not load skin '",skinName,"'");
try { try {
OTMLParser parser(fin, skinName); OTMLParser parser(fin, skinName);
@ -50,7 +50,7 @@ void UISkins::load(const std::string& skinName)
m_defaultFont = g_fonts.get(doc->valueAt("default font")); m_defaultFont = g_fonts.get(doc->valueAt("default font"));
if(!m_defaultFont) if(!m_defaultFont)
fatal("FATAL ERROR: Could not load skin default font"); logFatal("FATAL ERROR: Could not load skin default font");
m_defaultFontColor = doc->readAt("default font color", Color::white); m_defaultFontColor = doc->readAt("default font color", Color::white);
@ -81,7 +81,7 @@ void UISkins::load(const std::string& skinName)
} }
} }
} catch(OTMLException e) { } catch(OTMLException e) {
fatal("FATAL ERROR: Malformed skin file '",skinName,"':\n ",e.what()); logFatal("FATAL ERROR: Malformed skin file '",skinName,"':\n ",e.what());
} }
g_resources.popCurrentPath(); g_resources.popCurrentPath();
@ -100,6 +100,6 @@ UIElementSkinPtr UISkins::getElementSkin(UI::ElementType elementType, const std:
if(elementType == skin->getElementType() && name == skin->getName()) if(elementType == skin->getElementType() && name == skin->getName())
return skin; return skin;
} }
warning("Element skin '",name,"' not found"); logWarning("Element skin '",name,"' not found");
return UIElementSkinPtr(); return UIElementSkinPtr();
} }

View File

@ -13,22 +13,21 @@ enum LogLevel {
void log(LogLevel level, const std::string& message, std::string prettyFunction = ""); void log(LogLevel level, const std::string& message, std::string prettyFunction = "");
// specialized logging // specialized logging
template<class... T> #define logDebug(...) log(LogDebug, make_string(__VA_ARGS__))
void debug(const T&... args) { log(LogInfo, make_string(args...)); } #define logInfo(...) log(LogInfo, make_string(__VA_ARGS__))
template<class... T> #define logWarning(...) log(LogWarning, make_string(__VA_ARGS__))
void info(const T&... args) { log(LogDebug, make_string(args...)); } #define logError(...) log(LogError, make_string(__VA_ARGS__))
template<class... T> #define logFatal(...) log(LogFatal, make_string(__VA_ARGS__))
void warning(const T&... args) { log(LogWarning, make_string(args...)); }
template<class... T>
void error(const T&... args) { log(LogError, make_string(args...)); }
template<class... T>
void fatal(const T&... args) { log(LogFatal, make_string(args...)); }
#define trace() log(LogDebug, "", __PRETTY_FUNCTION__) #define trace() log(LogDebug, "", __PRETTY_FUNCTION__)
#define traceDebug(...) log(LogDebug, make_string(__VA_ARGS__), __PRETTY_FUNCTION__)
#define traceInfo(...) log(LogInfo, make_string(__VA_ARGS__), __PRETTY_FUNCTION__)
#define traceWarning(...) log(LogWarning, make_string(__VA_ARGS__), __PRETTY_FUNCTION__)
#define traceError(...) log(LogError, make_string(__VA_ARGS__), __PRETTY_FUNCTION__)
// dump utility // dump utility
struct Dump { struct Dump {
~Dump() { debug(s.str().c_str()); } ~Dump() { logDebug(s.str().c_str()); }
template<class T> template<class T>
Dump& operator<<(const T& v) { s << v << " "; return *this; } Dump& operator<<(const T& v) { s << v << " "; return *this; }
std::ostringstream s; std::ostringstream s;

View File

@ -1,27 +1,3 @@
/* The MIT License
*
* Copyright (c) 2010 OTClient, https://github.com/edubart/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.
*/
#include <global.h> #include <global.h>
#include <core/engine.h> #include <core/engine.h>
#include <core/configs.h> #include <core/configs.h>
@ -86,7 +62,7 @@ int main(int argc, const char *argv[])
args.push_back(argv[i]); args.push_back(argv[i]);
#endif #endif
info("OTClient 0.2.0"); logInfo("OTClient 0.2.0");
// install exit signal handler // install exit signal handler
signal(SIGTERM, signal_handler); signal(SIGTERM, signal_handler);
@ -101,7 +77,7 @@ int main(int argc, const char *argv[])
// load configurations // load configurations
loadDefaultConfigs(); loadDefaultConfigs();
if(!g_configs.load("config.otml")) if(!g_configs.load("config.otml"))
info("Could not read configuration file, default configurations will be used."); logInfo("Could not read configuration file, default configurations will be used.");
// create the window // create the window
Platform::createWindow(g_configs.get("window x"), g_configs.get("window y"), Platform::createWindow(g_configs.get("window x"), g_configs.get("window y"),

View File

@ -1,26 +1,3 @@
/* The MIT License
*
* Copyright (c) 2010 OTClient, https://github.com/edubart/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.
*/
#include "protocollogin.h" #include "protocollogin.h"
#include <net/outputmessage.h> #include <net/outputmessage.h>
#include <net/rsa.h> #include <net/rsa.h>
@ -124,7 +101,7 @@ void ProtocolLogin::onRecv(InputMessage *inputMessage)
while(!inputMessage->end()) { while(!inputMessage->end()) {
uint8 opt = inputMessage->getU8(); uint8 opt = inputMessage->getU8();
debug("opt:",(uint)opt); logDebug("opt:",(uint)opt);
switch(opt) { switch(opt) {
case 0x0A: case 0x0A:
parseError(inputMessage); parseError(inputMessage);
@ -165,8 +142,8 @@ void ProtocolLogin::parseCharacterList(InputMessage *inputMessage)
uint32 ip = inputMessage->getU32(); uint32 ip = inputMessage->getU32();
uint16 port = inputMessage->getU16(); uint16 port = inputMessage->getU16();
debug("character: ", name.c_str(), world.c_str(), ip, port); logDebug("character: ", name.c_str(), world.c_str(), ip, port);
} }
uint16 premiumDays = inputMessage->getU16(); uint16 premiumDays = inputMessage->getU16();
debug("prem days: ", premiumDays); logDebug("prem days: ", premiumDays);
} }