From a8afbf9b3f8ce1e0af34b92f08cd327af4930303 Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Mon, 29 Aug 2011 00:04:23 -0300 Subject: [PATCH] UIMap just got in --- CMakeLists.txt | 3 ++ modules/game/game.lua | 3 ++ modules/game/game.otmod | 17 ++++++ modules/game/ui/gameinterface.otui | 12 +++++ modules/mainmenu/entergame.lua | 1 + src/otclient/otclient.cpp | 47 ++++------------ src/otclient/otclientluafunctions.cpp | 4 ++ src/otclient/ui/declarations.h | 22 ++++++++ src/otclient/ui/uimap.cpp | 77 +++++++++++++++++++++++++++ src/otclient/ui/uimap.h | 43 +++++++++++++++ 10 files changed, 193 insertions(+), 36 deletions(-) create mode 100644 modules/game/game.lua create mode 100644 modules/game/game.otmod create mode 100644 modules/game/ui/gameinterface.otui create mode 100644 src/otclient/ui/declarations.h create mode 100644 src/otclient/ui/uimap.cpp create mode 100644 src/otclient/ui/uimap.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 55c92554..22323d70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,9 @@ SET(SOURCES src/otclient/core/effect.cpp src/otclient/core/localplayer.cpp + # otclient ui + src/otclient/ui/uimap.cpp + # otclient net src/otclient/net/protocollogin.cpp src/otclient/net/protocolgame.cpp diff --git a/modules/game/game.lua b/modules/game/game.lua new file mode 100644 index 00000000..a75e17f3 --- /dev/null +++ b/modules/game/game.lua @@ -0,0 +1,3 @@ +function Game.createMainInterface() + gameUi = loadUI('/game/ui/gameinterface.otui', UI.root) +end \ No newline at end of file diff --git a/modules/game/game.otmod b/modules/game/game.otmod new file mode 100644 index 00000000..861e28d3 --- /dev/null +++ b/modules/game/game.otmod @@ -0,0 +1,17 @@ +Module + name: game + description: Create the game interface, where the ingame stuff starts + author: OTClient team + website: https://github.com/edubart/otclient + version: 0.2 + autoLoad: true + dependencies: + - core + - tibiafiles + + onLoad: | + require 'game' + return true + + onUnload: | + -- nothing yet diff --git a/modules/game/ui/gameinterface.otui b/modules/game/ui/gameinterface.otui new file mode 100644 index 00000000..544e9d69 --- /dev/null +++ b/modules/game/ui/gameinterface.otui @@ -0,0 +1,12 @@ +UIWidget + anchors.fill: parent + + UIMap + id: gameMap + anchors.fill:parent + margin.right: 200 + + Button + anchors.left: gameMap.right + anchors.top: parent.top + text: Logout \ No newline at end of file diff --git a/modules/mainmenu/entergame.lua b/modules/mainmenu/entergame.lua index c1b055fc..6a4099f9 100644 --- a/modules/mainmenu/entergame.lua +++ b/modules/mainmenu/entergame.lua @@ -9,6 +9,7 @@ function EnterGame_characterWindow_okClicked() Configs.set('lastUsedCharacter', selected.characterName) charactersWindow:destroy() mainMenu:hide() + Game.createMainInterface() else displayErrorBox('Error', 'You must select a character to login!') end diff --git a/src/otclient/otclient.cpp b/src/otclient/otclient.cpp index 4b51f6ac..f21e14e5 100644 --- a/src/otclient/otclient.cpp +++ b/src/otclient/otclient.cpp @@ -227,10 +227,6 @@ void OTClient::poll() void OTClient::render() { - //TODO: UIMap for map drawing - if(g_game.isOnline()) - g_map.draw(Rect(0, 0, g_graphics.getScreenSize())); - // everything is rendered by UI components g_ui.render(); } @@ -276,6 +272,7 @@ void OTClient::saveConfigurations() void OTClient::onClose() { + //TODO: make and use g_lua.callGlobalField if(m_onCloseCallback) m_onCloseCallback(); else @@ -292,39 +289,17 @@ void OTClient::onPlatformEvent(const PlatformEvent& event) { bool fireUi = true; - if(event.type == EventKeyDown) { - if(!event.ctrl && !event.alt && !event.shift) { - if(event.keycode == Fw::KeyUp) - g_game.walk(Otc::North); - else if(event.keycode == Fw::KeyRight) - g_game.walk(Otc::East); - else if(event.keycode == Fw::KeyDown) - g_game.walk(Otc::South); - else if(event.keycode == Fw::KeyLeft) - g_game.walk(Otc::West); - } - else if(event.ctrl && !event.alt && !event.shift) { - if(event.keycode == Fw::KeyUp) - g_game.turn(Otc::North); - else if(event.keycode == Fw::KeyRight) - g_game.turn(Otc::East); - else if(event.keycode == Fw::KeyDown) - g_game.turn(Otc::South); - else if(event.keycode == Fw::KeyLeft) - g_game.turn(Otc::West); - else if(event.keycode == Fw::KeyApostrophe) { - // TODO: move these events to lua - UIWidgetPtr console = g_ui.getRootWidget()->getChildById("consolePanel"); - if(!console->isExplicitlyVisible()) { - g_ui.getRootWidget()->lockChild(console); - console->setVisible(true); - } else { - g_ui.getRootWidget()->unlockChild(console); - console->setVisible(false); - } - fireUi = false; - } + if(event.type == EventKeyDown && event.ctrl && !event.alt && !event.shift && event.keycode == Fw::KeyApostrophe) { + // TODO: move this events to lua + UIWidgetPtr console = g_ui.getRootWidget()->getChildById("consolePanel"); + if(!console->isExplicitlyVisible()) { + g_ui.getRootWidget()->lockChild(console); + console->setVisible(true); + } else { + g_ui.getRootWidget()->unlockChild(console); + console->setVisible(false); } + fireUi = false; } if(fireUi) diff --git a/src/otclient/otclientluafunctions.cpp b/src/otclient/otclientluafunctions.cpp index 8dc874e5..4b5393f4 100644 --- a/src/otclient/otclientluafunctions.cpp +++ b/src/otclient/otclientluafunctions.cpp @@ -28,6 +28,7 @@ #include #include #include +#include void OTClient::registerLuaFunctions() { @@ -45,4 +46,7 @@ void OTClient::registerLuaFunctions() g_lua.registerClass(); g_lua.bindClassStaticFunction("loginWorld", std::bind(&Game::loginWorld, &g_game, _1, _2, _3, _4, _5)); + + g_lua.registerClass(); + g_lua.bindClassStaticFunction("create", &UIWidget::create); } diff --git a/src/otclient/ui/declarations.h b/src/otclient/ui/declarations.h new file mode 100644 index 00000000..6910efa0 --- /dev/null +++ b/src/otclient/ui/declarations.h @@ -0,0 +1,22 @@ +/* + * 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. + */ + diff --git a/src/otclient/ui/uimap.cpp b/src/otclient/ui/uimap.cpp new file mode 100644 index 00000000..0ebbd4be --- /dev/null +++ b/src/otclient/ui/uimap.cpp @@ -0,0 +1,77 @@ +/* + * 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. + */ + +#include "uimap.h" +#include +#include + +void UIMap::setup() +{ + UIWidget::setup(); +} + +void UIMap::render() +{ + if(g_game.isOnline()) + g_map.draw(m_rect); + + UIWidget::render(); +} + +bool UIMap::onKeyPress(uchar keyCode, char keyChar, int keyboardModifiers) +{ + if(keyboardModifiers == Fw::KeyboardNoModifier) { + if(keyCode == Fw::KeyUp) { + g_game.walk(Otc::North); + return true; + } else if(keyCode == Fw::KeyRight) { + g_game.walk(Otc::East); + return true; + } else if(keyCode == Fw::KeyDown) { + g_game.walk(Otc::South); + return true; + } else if(keyCode == Fw::KeyLeft) { + g_game.walk(Otc::West); + return true; + } + } else if(keyboardModifiers == Fw::KeyboardCtrlModifier) { + if(keyCode == Fw::KeyUp) { + g_game.turn(Otc::North); + return true; + } else if(keyCode == Fw::KeyRight) { + g_game.turn(Otc::East); + return true; + } else if(keyCode == Fw::KeyDown) { + g_game.turn(Otc::South); + return true; + } else if(keyCode == Fw::KeyLeft) { + g_game.turn(Otc::West); + return true; + } + } + return UIWidget::onKeyPress(keyCode, keyChar, keyboardModifiers); +} + +bool UIMap::onMousePress(const Point& mousePos, Fw::MouseButton button) +{ + return UIWidget::onMousePress(mousePos, button); +} diff --git a/src/otclient/ui/uimap.h b/src/otclient/ui/uimap.h new file mode 100644 index 00000000..d903818e --- /dev/null +++ b/src/otclient/ui/uimap.h @@ -0,0 +1,43 @@ +/* + * 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 UIMAP_H +#define UIMAP_H + +#include "declarations.h" +#include + +class UIMap : public UIWidget +{ +public: + void setup(); + void render(); + +protected: + virtual bool onKeyPress(uchar keyCode, char keyChar, int keyboardModifiers); + virtual bool onMousePress(const Point& mousePos, Fw::MouseButton button); + +private: +}; + +#endif +