diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/gui/cheatMenu.cpp | 129 | ||||
-rw-r--r-- | src/gui/cheatMenu.h | 71 | ||||
-rw-r--r-- | src/gui/guiCheatMenu.cpp | 19 | ||||
-rw-r--r-- | src/gui/guiCheatMenu.h | 34 | ||||
-rw-r--r-- | src/gui/guiKeyChangeMenu.cpp | 28 |
6 files changed, 221 insertions, 62 deletions
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index ae54adcff..7befba37c 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,4 +1,5 @@ set(gui_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/cheatMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiAnimatedImage.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiBackgroundImage.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiBox.cpp @@ -6,7 +7,6 @@ set(gui_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/guiButtonImage.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiButtonItemImage.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiChatConsole.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/guiCheatMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiConfirmRegistration.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiEditBoxWithScrollbar.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiEngine.cpp diff --git a/src/gui/cheatMenu.cpp b/src/gui/cheatMenu.cpp new file mode 100644 index 000000000..600625537 --- /dev/null +++ b/src/gui/cheatMenu.cpp @@ -0,0 +1,129 @@ +/* +Dragonfire +Copyright (C) 2020 Elias Fleckenstein <eliasfleckenstein@web.de> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "cheatMenu.h" +#include "script/scripting_client.h" +#include "client/client.h" +#include "client/fontengine.h" + +CheatMenu::CheatMenu(Client *client): + m_client(client) +{ + m_font = g_fontengine->getFont(FONT_SIZE_UNSPECIFIED, FM_Fallback); + + if (!m_font) { + errorstream << "CheatMenu: Unable to load fallback font" << std::endl; + } else { + core::dimension2d<u32> dim = m_font->getDimension(L"M"); + m_fontsize = v2u32(dim.Width, dim.Height); + m_font->grab(); + } + m_fontsize.X = MYMAX(m_fontsize.X, 1); + m_fontsize.Y = MYMAX(m_fontsize.Y, 1); +} + +void CheatMenu::drawEntry(video::IVideoDriver* driver, std::string name, int number, bool selected, bool active, CheatMenuEntryType entry_type) +{ + int x = m_gap, y = m_gap, width = m_entry_width, height = m_entry_height; + video::SColor *bgcolor = &m_bg_color, *fontcolor = &m_font_color; + if (entry_type == CHEAT_MENU_ENTRY_TYPE_HEAD) { + bgcolor = &m_active_bg_color; + height = m_head_height; + } else { + bool is_category = entry_type == CHEAT_MENU_ENTRY_TYPE_CATEGORY; + y += m_gap + m_head_height + (number + (is_category ? 0 : m_selected_category)) * (m_entry_height + m_gap); + x += (is_category ? 0 : m_gap + m_entry_width); + if (active) + bgcolor = &m_active_bg_color; + if (selected) + fontcolor = &m_selected_font_color; + } + core::rect<s32> bounds(x, y, x + width, y + height); + driver->draw2DRectangle(*bgcolor, bounds); + driver->draw2DRectangleOutline(bounds, *fontcolor); + int fx = x + 5, fy = y + (height - m_fontsize.Y) / 2; + core::rect<s32> fontbounds(fx, fy, fx + m_fontsize.X * name.size(), fy + m_fontsize.Y); + m_font->draw(name.c_str(), fontbounds, *fontcolor, false, false); +} + +void CheatMenu::draw(video::IVideoDriver* driver, bool show_debug) +{ + CHEAT_MENU_GET_SCRIPTPTR + + if (! show_debug) + drawEntry(driver, "Dragonfireclient", 0, false, false, CHEAT_MENU_ENTRY_TYPE_HEAD); + int category_count = 0; + for (auto category = script->m_cheat_categories.begin(); category != script->m_cheat_categories.end(); category++) { + bool is_selected = category_count == m_selected_category; + drawEntry(driver, (*category)->m_name, category_count, is_selected, false, CHEAT_MENU_ENTRY_TYPE_CATEGORY); + if (is_selected && m_cheat_layer) { + int cheat_count = 0; + for (auto cheat = (*category)->m_cheats.begin(); cheat != (*category)->m_cheats.end(); cheat++) { + drawEntry(driver, (*cheat)->m_name, cheat_count, cheat_count == m_selected_cheat, (*cheat)->is_enabled()); + cheat_count++; + } + } + category_count++; + } +} + +void CheatMenu::selectUp() +{ + CHEAT_MENU_GET_SCRIPTPTR + + int max = (m_cheat_layer ? script->m_cheat_categories[m_selected_category]->m_cheats.size() : script->m_cheat_categories.size()) - 1; + int *selected = m_cheat_layer ? &m_selected_cheat : &m_selected_category; + --*selected; + if (*selected < 0) + *selected = max; +} + +void CheatMenu::selectDown() +{ + CHEAT_MENU_GET_SCRIPTPTR + + int max = (m_cheat_layer ? script->m_cheat_categories[m_selected_category]->m_cheats.size() : script->m_cheat_categories.size()) - 1; + int *selected = m_cheat_layer ? &m_selected_cheat : &m_selected_category; + ++*selected; + if (*selected > max) + *selected = 0; +} + +void CheatMenu::selectRight() +{ + if (m_cheat_layer) + return; + m_cheat_layer = true; + m_selected_cheat = 0; +} + +void CheatMenu::selectLeft() +{ + if (! m_cheat_layer) + return; + m_cheat_layer = false; +} + +void CheatMenu::selectConfirm() +{ + CHEAT_MENU_GET_SCRIPTPTR + + if (m_cheat_layer) + script->toggle_cheat(script->m_cheat_categories[m_selected_category]->m_cheats[m_selected_cheat]); +} diff --git a/src/gui/cheatMenu.h b/src/gui/cheatMenu.h new file mode 100644 index 000000000..ec0c81659 --- /dev/null +++ b/src/gui/cheatMenu.h @@ -0,0 +1,71 @@ +/* +Dragonfire +Copyright (C) 2020 Elias Fleckenstein <eliasfleckenstein@web.de> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "irrlichttypes_extrabloated.h" +#include <string> + +#define CHEAT_MENU_GET_SCRIPTPTR ClientScripting *script = m_client->getScript(); if (! script || ! script->m_cheats_loaded) return; + +class Client; + +typedef enum +{ + CHEAT_MENU_ENTRY_TYPE_HEAD, + CHEAT_MENU_ENTRY_TYPE_CATEGORY, + CHEAT_MENU_ENTRY_TYPE_ENTRY, +} +CheatMenuEntryType; + +class CheatMenu +{ +public: + CheatMenu(Client* client); + + virtual void draw(video::IVideoDriver* driver, bool show_debug); + + void drawEntry(video::IVideoDriver* driver, std::string name, int number, bool selected, bool active, CheatMenuEntryType entry_type = CHEAT_MENU_ENTRY_TYPE_ENTRY); + + void selectUp(); + void selectDown(); + void selectLeft(); + void selectRight(); + void selectConfirm(); + +private: + bool m_cheat_layer = false; + int m_selected_cheat = 0; + int m_selected_category = 0; + + int m_head_height = 50; + int m_entry_height = 40; + int m_entry_width = 200; + int m_gap = 2; + + video::SColor m_bg_color = video::SColor(192, 255, 175, 191); + video::SColor m_active_bg_color = video::SColor(192, 255, 32, 76); + video::SColor m_font_color = video::SColor(255, 89, 0, 65); + video::SColor m_selected_font_color = video::SColor(255, 87, 0, 242); + + Client *m_client; + + gui::IGUIFont *m_font = nullptr; + v2u32 m_fontsize; +}; diff --git a/src/gui/guiCheatMenu.cpp b/src/gui/guiCheatMenu.cpp deleted file mode 100644 index 41c9fb84d..000000000 --- a/src/gui/guiCheatMenu.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* -Dragonfire -Copyright (C) 2020 Elias Fleckenstein <eliasfleckenstein@web.de> - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - diff --git a/src/gui/guiCheatMenu.h b/src/gui/guiCheatMenu.h deleted file mode 100644 index 99f9b0e21..000000000 --- a/src/gui/guiCheatMenu.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -Dragonfire -Copyright (C) 2020 Elias Fleckenstein <eliasfleckenstein@web.de> - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#pragma once - -#include "irrlichttypes_extrabloated.h" -#include "modalMenu.h" -#include "config.h" - -class GUICheatMenuEntry : public gui::IGUIElement -{ - GUICheatMenu(gui::IGUIEnvironment* env, - gui::IGUIElement* parent, - s32 id, - Client* client, - IMenuManager* menumgr); - -}; diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp index 593cda66b..98cb131a8 100644 --- a/src/gui/guiKeyChangeMenu.cpp +++ b/src/gui/guiKeyChangeMenu.cpp @@ -73,13 +73,19 @@ enum GUI_ID_KEY_CHATLOG_BUTTON, GUI_ID_KEY_HUD_BUTTON, GUI_ID_KEY_FOG_BUTTON, + GUI_ID_KEY_CHEAT_MENU_BUTTON, GUI_ID_KEY_DEC_RANGE_BUTTON, GUI_ID_KEY_INC_RANGE_BUTTON, GUI_ID_KEY_AUTOFWD_BUTTON, - GUI_ID_KEY_XRAY, - GUI_ID_KEY_FULLBRIGHT, - GUI_ID_KEY_KILLAURA, - GUI_ID_KEY_FREECAM, + GUI_ID_KEY_XRAY_BUTTON, + GUI_ID_KEY_FULLBRIGHT_BUTTON, + GUI_ID_KEY_KILLAURA_BUTTON, + GUI_ID_KEY_FREECAM_BUTTON, + GUI_ID_KEY_SELECT_UP_BUTTON, + GUI_ID_KEY_SELECT_DOWN_BUTTON, + GUI_ID_KEY_SELECT_LEFT_BUTTON, + GUI_ID_KEY_SELECT_RIGHT_BUTTON, + GUI_ID_KEY_SELECT_CONFIRM_BUTTON, // other GUI_ID_CB_AUX1_DESCENDS, GUI_ID_CB_DOUBLETAP_JUMP, @@ -451,8 +457,14 @@ void GUIKeyChangeMenu::init_keys() this->add_key(GUI_ID_KEY_HUD_BUTTON, wgettext("Toggle HUD"), "keymap_toggle_hud"); this->add_key(GUI_ID_KEY_CHATLOG_BUTTON, wgettext("Toggle chat log"), "keymap_toggle_chat"); this->add_key(GUI_ID_KEY_FOG_BUTTON, wgettext("Toggle fog"), "keymap_toggle_fog"); - this->add_key(GUI_ID_KEY_XRAY, wgettext("Toggle X-Ray"), "keymap_toggle_xray"); - this->add_key(GUI_ID_KEY_FULLBRIGHT, wgettext("Toggle Fullbr."), "keymap_toggle_fullbright"); - this->add_key(GUI_ID_KEY_KILLAURA, wgettext("Toggle Killaura"), "keymap_toggle_killaura"); - this->add_key(GUI_ID_KEY_FREECAM, wgettext("Toggle Freec."), "keymap_toggle_freecam"); + this->add_key(GUI_ID_KEY_CHEAT_MENU_BUTTON,wgettext("Toggle C. Menu"),"keymap_toggle_cheat_menu"); + this->add_key(GUI_ID_KEY_XRAY_BUTTON, wgettext("Toggle X-Ray"), "keymap_toggle_xray"); + this->add_key(GUI_ID_KEY_FULLBRIGHT_BUTTON,wgettext("Toggle Fullbr."), "keymap_toggle_fullbright"); + this->add_key(GUI_ID_KEY_KILLAURA_BUTTON, wgettext("Toggle Killaura"), "keymap_toggle_killaura"); + this->add_key(GUI_ID_KEY_FREECAM_BUTTON, wgettext("Toggle Freec."), "keymap_toggle_freecam"); + this->add_key(GUI_ID_KEY_SELECT_UP_BUTTON, wgettext("C. Menu Up"), "keymap_select_up"); + this->add_key(GUI_ID_KEY_SELECT_DOWN_BUTTON,wgettext("C. Menu Down"), "keymap_select_down"); + this->add_key(GUI_ID_KEY_SELECT_LEFT_BUTTON,wgettext("C. Menu Left"), "keymap_select_left"); + this->add_key(GUI_ID_KEY_SELECT_RIGHT_BUTTON,wgettext("C. Menu Right"),"keymap_select_right"); + this->add_key(GUI_ID_KEY_SELECT_CONFIRM_BUTTON,wgettext("C. Menu Enter"),"keymap_select_confirm"); } |