From fa3b9fd1253b7720abfd42775ae84714e6c7e082 Mon Sep 17 00:00:00 2001 From: Henrique Date: Sun, 20 Nov 2011 18:38:35 -0200 Subject: [PATCH] add uigame --- CMakeLists.txt | 1 + modules/game/game.otui | 4 +- src/otclient/luascript/luafunctions.cpp | 4 + src/otclient/ui/uigame.cpp | 109 ++++++++++++++++++++++++ src/otclient/ui/uigame.h | 36 ++++++++ src/otclient/ui/uimap.cpp | 97 +-------------------- src/otclient/ui/uimap.h | 2 +- 7 files changed, 157 insertions(+), 96 deletions(-) create mode 100644 src/otclient/ui/uigame.cpp create mode 100644 src/otclient/ui/uigame.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b691b235..b6173fb2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,7 @@ SET(SOURCES 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 diff --git a/modules/game/game.otui b/modules/game/game.otui index a8eb0229..5f1bf060 100644 --- a/modules/game/game.otui +++ b/modules/game/game.otui @@ -1,4 +1,4 @@ -UIWidget +UIGame id: gameRootInterface anchors.fill: parent anchors.top: topMenu.bottom @@ -23,4 +23,4 @@ UIWidget anchors.left: parent.left anchors.right: rightPanel.left anchors.top: parent.top - anchors.bottom: bottomPanel.top \ No newline at end of file + anchors.bottom: bottomPanel.top diff --git a/src/otclient/luascript/luafunctions.cpp b/src/otclient/luascript/luafunctions.cpp index 9b0bef12..8b3b1472 100644 --- a/src/otclient/luascript/luafunctions.cpp +++ b/src/otclient/luascript/luafunctions.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include "luavaluecasts.h" @@ -88,6 +89,9 @@ void OTClient::registerLuaFunctions() g_lua.registerClass(); g_lua.bindClassStaticFunction("create", &UIWidget::create); + g_lua.registerClass(); + g_lua.bindClassStaticFunction("create", &UIWidget::create); + #ifdef FORBIDDEN_FUNCTIONS g_lua.bindClassStaticFunction("talkChannel", std::bind(&Game::talkChannel, &g_game, _1, _2, _3)); g_lua.bindClassStaticFunction("talkPrivate", std::bind(&Game::talkPrivate, &g_game, _1, _2, _3)); diff --git a/src/otclient/ui/uigame.cpp b/src/otclient/ui/uigame.cpp new file mode 100644 index 00000000..5e9a3c78 --- /dev/null +++ b/src/otclient/ui/uigame.cpp @@ -0,0 +1,109 @@ +/* + * 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 "uigame.h" +#include +#include + +bool UIGame::onKeyPress(uchar keyCode, char keyChar, int keyboardModifiers) +{ + UILineEditPtr chatLineEdit = std::dynamic_pointer_cast(getParent()->recursiveGetChildById("chatLineEdit")); + + if(keyboardModifiers == Fw::KeyboardNoModifier) { + if(keyCode == Fw::KeyUp || keyCode == Fw::KeyNumpad8) { + g_game.walk(Otc::North); + return true; + } else if(keyCode == Fw::KeyRight || keyCode == Fw::KeyNumpad6) { + g_game.walk(Otc::East); + return true; + } else if(keyCode == Fw::KeyDown || keyCode == Fw::KeyNumpad2) { + g_game.walk(Otc::South); + return true; + } else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) { + g_game.walk(Otc::West); + return true; + } else if(keyCode == Fw::KeyNumpad9) { + g_game.walk(Otc::NorthEast); + return true; + } else if(keyCode == Fw::KeyNumpad3) { + g_game.walk(Otc::SouthEast); + return true; + } else if(keyCode == Fw::KeyNumpad1) { + g_game.walk(Otc::SouthWest); + return true; + } else if(keyCode == Fw::KeyNumpad7) { + g_game.walk(Otc::NorthWest); + return true; + } else if(keyCode == Fw::KeyReturn || keyCode == Fw::KeyEnter) { + g_game.talkChannel(1, 0, chatLineEdit->getText()); + chatLineEdit->clearText(); + return true; + } else if(keyCode == Fw::KeyDelete) { + chatLineEdit->removeCharacter(true); + return true; + } else if(keyCode == Fw::KeyBackspace) { + chatLineEdit->removeCharacter(false); + return true; + } else if(keyCode == Fw::KeyRight) { + chatLineEdit->moveCursor(true); + return true; + } else if(keyCode == Fw::KeyLeft) { + chatLineEdit->moveCursor(false); + return true; + } else if(keyCode == Fw::KeyHome) { + chatLineEdit->setCursorPos(0); + return true; + } else if(keyCode == Fw::KeyEnd) { + chatLineEdit->setCursorPos(chatLineEdit->getText().length()); + return true; + } + } else if(keyboardModifiers == Fw::KeyboardCtrlModifier) { + if(keyCode == Fw::KeyUp || keyCode == Fw::KeyNumpad8) { + g_game.turn(Otc::North); + return true; + } else if(keyCode == Fw::KeyRight || keyCode == Fw::KeyNumpad6) { + g_game.turn(Otc::East); + return true; + } else if(keyCode == Fw::KeyDown || keyCode == Fw::KeyNumpad2) { + g_game.turn(Otc::South); + return true; + } else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) { + g_game.turn(Otc::West); + return true; + } + } else if(keyboardModifiers == Fw::KeyboardShiftModifier) { + if(keyCode == Fw::KeyRight || keyCode == Fw::KeyNumpad6) { + chatLineEdit->moveCursor(true); + return true; + } else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) { + chatLineEdit->moveCursor(false); + return true; + } + } + + if(keyChar != 0) { + chatLineEdit->appendText(std::string(1, keyChar)); + return true; + } + + return UIWidget::onKeyPress(keyCode, keyChar, keyboardModifiers); +} diff --git a/src/otclient/ui/uigame.h b/src/otclient/ui/uigame.h new file mode 100644 index 00000000..e4a6115a --- /dev/null +++ b/src/otclient/ui/uigame.h @@ -0,0 +1,36 @@ +/* + * 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 UIGAME_H +#define UIGAME_H + +#include "declarations.h" +#include + +class UIGame : public UIWidget +{ +protected: + virtual bool onKeyPress(uchar keyCode, char keyChar, int keyboardModifiers); + +}; + +#endif diff --git a/src/otclient/ui/uimap.cpp b/src/otclient/ui/uimap.cpp index 5a4c3049..07885874 100644 --- a/src/otclient/ui/uimap.cpp +++ b/src/otclient/ui/uimap.cpp @@ -22,11 +22,8 @@ #include "uimap.h" #include -#include #include #include -#include -#include #include UIMap::UIMap() @@ -38,99 +35,13 @@ void UIMap::render() { renderSelf(); - if(g_game.isOnline()) { - g_graphics.bindColor(Fw::black); - g_graphics.drawBoundingRect(m_mapRect.expanded(1)); - g_map.draw(m_mapRect); - } + g_graphics.bindColor(Fw::black); + g_graphics.drawBoundingRect(m_mapRect.expanded(1)); + g_map.draw(m_mapRect); renderChildren(); } -bool UIMap::onKeyPress(uchar keyCode, char keyChar, int keyboardModifiers) -{ - UILineEditPtr chatLineEdit = std::dynamic_pointer_cast(getParent()->recursiveGetChildById("chatLineEdit")); - - if(keyboardModifiers == Fw::KeyboardNoModifier) { - if(keyCode == Fw::KeyUp || keyCode == Fw::KeyNumpad8) { - g_game.walk(Otc::North); - return true; - } else if(keyCode == Fw::KeyRight || keyCode == Fw::KeyNumpad6) { - g_game.walk(Otc::East); - return true; - } else if(keyCode == Fw::KeyDown || keyCode == Fw::KeyNumpad2) { - g_game.walk(Otc::South); - return true; - } else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) { - g_game.walk(Otc::West); - return true; - } else if(keyCode == Fw::KeyNumpad9) { - g_game.walk(Otc::NorthEast); - return true; - } else if(keyCode == Fw::KeyNumpad3) { - g_game.walk(Otc::SouthEast); - return true; - } else if(keyCode == Fw::KeyNumpad1) { - g_game.walk(Otc::SouthWest); - return true; - } else if(keyCode == Fw::KeyNumpad7) { - g_game.walk(Otc::NorthWest); - return true; - } else if(keyCode == Fw::KeyReturn || keyCode == Fw::KeyEnter) { - g_game.talkChannel(1, 0, chatLineEdit->getText()); - chatLineEdit->clearText(); - return true; - } else if(keyCode == Fw::KeyDelete) { - chatLineEdit->removeCharacter(true); - return true; - } else if(keyCode == Fw::KeyBackspace) { - chatLineEdit->removeCharacter(false); - return true; - } else if(keyCode == Fw::KeyRight) { - chatLineEdit->moveCursor(true); - return true; - } else if(keyCode == Fw::KeyLeft) { - chatLineEdit->moveCursor(false); - return true; - } else if(keyCode == Fw::KeyHome) { - chatLineEdit->setCursorPos(0); - return true; - } else if(keyCode == Fw::KeyEnd) { - chatLineEdit->setCursorPos(chatLineEdit->getText().length()); - return true; - } - } else if(keyboardModifiers == Fw::KeyboardCtrlModifier) { - if(keyCode == Fw::KeyUp || keyCode == Fw::KeyNumpad8) { - g_game.turn(Otc::North); - return true; - } else if(keyCode == Fw::KeyRight || keyCode == Fw::KeyNumpad6) { - g_game.turn(Otc::East); - return true; - } else if(keyCode == Fw::KeyDown || keyCode == Fw::KeyNumpad2) { - g_game.turn(Otc::South); - return true; - } else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) { - g_game.turn(Otc::West); - return true; - } - } else if(keyboardModifiers == Fw::KeyboardShiftModifier) { - if(keyCode == Fw::KeyRight || keyCode == Fw::KeyNumpad6) { - chatLineEdit->moveCursor(true); - return true; - } else if(keyCode == Fw::KeyLeft || keyCode == Fw::KeyNumpad4) { - chatLineEdit->moveCursor(false); - return true; - } - } - - if(keyChar != 0) { - chatLineEdit->appendText(std::string(1, keyChar)); - return true; - } - - return UIWidget::onKeyPress(keyCode, keyChar, keyboardModifiers); -} - void UIMap::onStyleApply(const OTMLNodePtr& styleNode) { for(OTMLNodePtr node : styleNode->children()) { @@ -151,7 +62,7 @@ bool UIMap::onMousePress(const Point& mousePos, Fw::MouseButton button) PointF relativeMousePos = PointF(relativeStretchMousePos.x, relativeStretchMousePos.y) / stretchFactor; PointF tilePosF = relativeMousePos / Map::NUM_TILE_PIXELS; - Position tilePos = Position(1 + (int)tilePosF.x - Map::PLAYER_OFFSET_X, 1 + (int)tilePosF.y - Map::PLAYER_OFFSET_Y, 0) + g_game.getLocalPlayer()->getPosition(); + Position tilePos = Position(1 + (int)tilePosF.x - Map::PLAYER_OFFSET_X, 1 + (int)tilePosF.y - Map::PLAYER_OFFSET_Y, 0) + g_map.getCentralPosition(); TilePtr tile = g_map.getTile(tilePos); tile->useItem(); diff --git a/src/otclient/ui/uimap.h b/src/otclient/ui/uimap.h index a596027b..323725a8 100644 --- a/src/otclient/ui/uimap.h +++ b/src/otclient/ui/uimap.h @@ -34,7 +34,7 @@ public: protected: virtual void onStyleApply(const OTMLNodePtr& styleNode); - virtual bool onKeyPress(uchar keyCode, char keyChar, int keyboardModifiers); + virtual bool onMousePress(const Point& mousePos, Fw::MouseButton button); virtual void onGeometryUpdate(const Rect& oldRect, const Rect& newRect);