mirror of
https://github.com/edo9300/edopro
synced 2026-08-23 22:26:05 -04:00
This adds the option in the "Duel" settings menu to randomly choose RPS when starting a duel --------- Co-authored-by: Edoardo Lolletti <edoardo762@gmail.com>
315 lines
6.6 KiB
C++
315 lines
6.6 KiB
C++
#ifndef MENU_HANDLER_H
|
|
#define MENU_HANDLER_H
|
|
|
|
#include "config.h"
|
|
#include <unordered_map>
|
|
#include <IEventReceiver.h>
|
|
#include <IGUIElement.h>
|
|
#include <map>
|
|
|
|
namespace ygo {
|
|
|
|
// These are passed to Irrlicht constructors as IDs and useful for identifying spawned GUI events
|
|
enum GUI {
|
|
BUTTON_LAN_MODE,
|
|
BUTTON_SINGLE_MODE,
|
|
BUTTON_REPLAY_MODE,
|
|
BUTTON_TEST_MODE,
|
|
BUTTON_DECK_EDIT,
|
|
BUTTON_MODE_EXIT,
|
|
LISTBOX_LAN_HOST,
|
|
BUTTON_JOIN_HOST,
|
|
BUTTON_JOIN_CANCEL,
|
|
BUTTON_CREATE_HOST,
|
|
BUTTON_HOST_CONFIRM,
|
|
BUTTON_HOST_CANCEL,
|
|
BUTTON_LAN_REFRESH,
|
|
BUTTON_RULE_CARDS,
|
|
BUTTON_RULE_OK,
|
|
BUTTON_CUSTOM_RULE,
|
|
BUTTON_HP_DUELIST,
|
|
BUTTON_HP_OBSERVER,
|
|
BUTTON_HP_START,
|
|
BUTTON_HP_CANCEL,
|
|
BUTTON_HP_KICK,
|
|
CHECKBOX_HP_READY,
|
|
BUTTON_HP_READY,
|
|
BUTTON_HP_NOTREADY,
|
|
TAB_CONTROL_CREATE_HOST,
|
|
COMBOBOX_HOST_LFLIST,
|
|
COMBOBOX_DUEL_RULE,
|
|
BUTTON_CUSTOM_RULE_OK,
|
|
LISTBOX_REPLAY_LIST,
|
|
BUTTON_LOAD_REPLAY,
|
|
BUTTON_CANCEL_REPLAY,
|
|
BUTTON_DELETE_REPLAY,
|
|
BUTTON_RENAME_REPLAY,
|
|
BUTTON_EXPORT_DECK,
|
|
BUTTON_SHARE_REPLAY,
|
|
EDITBOX_TEAM_COUNT,
|
|
EDITBOX_NUMERIC,
|
|
BUTTON_HP_AI_TOGGLE,
|
|
BUTTON_BOT_ADD,
|
|
BUTTON_BOT_COPY_COMMAND,
|
|
EDITBOX_CHAT,
|
|
EDITBOX_PORT_BOX,
|
|
COMBOBOX_BOT_DECK,
|
|
COMBOBOX_BOT_ENGINE,
|
|
EDITBOX_NICKNAME,
|
|
BUTTON_MSG_OK,
|
|
BUTTON_YES,
|
|
BUTTON_NO,
|
|
BUTTON_HAND1,
|
|
BUTTON_HAND2,
|
|
BUTTON_HAND3,
|
|
BUTTON_FIRST,
|
|
BUTTON_SECOND,
|
|
BUTTON_POS_AU,
|
|
BUTTON_POS_AD,
|
|
BUTTON_POS_DU,
|
|
BUTTON_POS_DD,
|
|
BUTTON_OPTION_PREV,
|
|
BUTTON_OPTION_NEXT,
|
|
BUTTON_OPTION_OK,
|
|
BUTTON_OPTION_0,
|
|
BUTTON_OPTION_1,
|
|
BUTTON_OPTION_2,
|
|
BUTTON_OPTION_3,
|
|
BUTTON_OPTION_4,
|
|
SCROLL_OPTION_SELECT,
|
|
BUTTON_CARD_0,
|
|
BUTTON_CARD_1,
|
|
BUTTON_CARD_2,
|
|
BUTTON_CARD_3,
|
|
BUTTON_CARD_4,
|
|
SCROLL_CARD_SELECT,
|
|
BUTTON_CARD_SEL_OK,
|
|
TEXT_CARD_LIST_TIP,
|
|
BUTTON_CMD_ACTIVATE,
|
|
BUTTON_CMD_SUMMON,
|
|
BUTTON_CMD_SPSUMMON,
|
|
BUTTON_CMD_MSET,
|
|
BUTTON_CMD_SSET,
|
|
BUTTON_CMD_REPOS,
|
|
BUTTON_CMD_ATTACK,
|
|
BUTTON_CMD_SHOWLIST,
|
|
BUTTON_CMD_SHUFFLE,
|
|
BUTTON_CMD_RESET,
|
|
BUTTON_ANNUMBER_OK,
|
|
BUTTON_ANCARD_OK,
|
|
EDITBOX_ANCARD,
|
|
LISTBOX_ANCARD,
|
|
CHECK_ATTRIBUTE,
|
|
CHECK_RACE,
|
|
BUTTON_BP,
|
|
BUTTON_M2,
|
|
BUTTON_EP,
|
|
BUTTON_LEAVE_GAME,
|
|
BUTTON_CHAIN_IGNORE,
|
|
BUTTON_CHAIN_ALWAYS,
|
|
BUTTON_CHAIN_WHENAVAIL,
|
|
BUTTON_CANCEL_OR_FINISH,
|
|
BUTTON_RESTART_SINGLE,
|
|
BUTTON_CLEAR_LOG,
|
|
LISTBOX_LOG,
|
|
BUTTON_CLEAR_CHAT,
|
|
BUTTON_EXPAND_INFOBOX,
|
|
BUTTON_REPO_CHANGELOG,
|
|
BUTTON_REPO_CHANGELOG_EXIT,
|
|
BUTTON_REPO_CHANGELOG_EXPAND,
|
|
BUTTON_DISPLAY_0,
|
|
BUTTON_DISPLAY_1,
|
|
BUTTON_DISPLAY_2,
|
|
BUTTON_DISPLAY_3,
|
|
BUTTON_DISPLAY_4,
|
|
SCROLL_CARD_DISPLAY,
|
|
BUTTON_CARD_DISP_OK,
|
|
EDITBOX_DECK_NAME,
|
|
BUTTON_CATEGORY_OK,
|
|
COMBOBOX_DBLFLIST,
|
|
COMBOBOX_DBDECKS,
|
|
BUTTON_CLEAR_DECK,
|
|
BUTTON_SAVE_DECK,
|
|
BUTTON_SAVE_DECK_AS,
|
|
BUTTON_DELETE_DECK,
|
|
BUTTON_RENAME_DECK,
|
|
BUTTON_SIDE_RELOAD,
|
|
BUTTON_SORT_DECK,
|
|
BUTTON_SIDE_OK,
|
|
BUTTON_SHUFFLE_DECK,
|
|
COMBOBOX_MAINTYPE,
|
|
COMBOBOX_SECONDTYPE,
|
|
BUTTON_EFFECT_FILTER,
|
|
BUTTON_START_FILTER,
|
|
SCROLL_FILTER,
|
|
EDITBOX_ATTACK,
|
|
EDITBOX_DEFENSE,
|
|
EDITBOX_STAR,
|
|
EDITBOX_SCALE,
|
|
EDITBOX_KEYWORD,
|
|
BUTTON_CLEAR_FILTER,
|
|
BUTTON_HAND_TEST,
|
|
BUTTON_HAND_TEST_SETTINGS,
|
|
BUTTON_HAND_TEST_START,
|
|
BUTTON_HAND_TEST_CANCEL,
|
|
BUTTON_DECK_YDKE_MANAGE,
|
|
BUTTON_IMPORT_YDKE,
|
|
BUTTON_EXPORT_YDKE,
|
|
BUTTON_EXPORT_DECK_PLAINTEXT,
|
|
BUTTON_CLOSE_YDKE_WINDOW,
|
|
BUTTON_DECK_EXTRA_OPTIONS,
|
|
COMBOBOX_OTHER_FILT,
|
|
BUTTON_REPLAY_START,
|
|
BUTTON_REPLAY_PAUSE,
|
|
BUTTON_REPLAY_STEP,
|
|
BUTTON_REPLAY_UNDO,
|
|
BUTTON_REPLAY_EXIT,
|
|
BUTTON_REPLAY_SWAP,
|
|
EDITBOX_FILE_NAME,
|
|
BUTTON_FILE_SAVE,
|
|
BUTTON_FILE_CANCEL,
|
|
LISTBOX_SINGLEPLAY_LIST,
|
|
BUTTON_LOAD_SINGLEPLAY,
|
|
BUTTON_OPEN_SINGLEPLAY,
|
|
BUTTON_SHARE_SINGLEPLAY,
|
|
BUTTON_DELETE_SINGLEPLAY,
|
|
BUTTON_RENAME_SINGLEPLAY,
|
|
BUTTON_CANCEL_SINGLEPLAY,
|
|
CHECKBOX_EXTRA_RULE,
|
|
CHECKBOX_SHOW_ANIME,
|
|
COMBOBOX_SORTTYPE,
|
|
COMBOBOX_CURRENT_SKIN,
|
|
BUTTON_RELOAD_SKIN,
|
|
COMBOBOX_CURRENT_LOCALE,
|
|
BUTTON_SHOW_SETTINGS,
|
|
BUTTON_APPLY_RESTART,
|
|
|
|
CHECKBOX_SHOW_FPS,
|
|
CHECKBOX_FULLSCREEN,
|
|
CHECKBOX_SCALE_BACKGROUND,
|
|
CHECKBOX_ACCURATE_BACKGROUND_RESIZE,
|
|
CHECKBOX_CONFIRM_DECK_CLEAR,
|
|
CHECKBOX_ADD_CARD_NAME_TO_DECK_LIST,
|
|
CHECKBOX_HIDE_ARCHETYPES,
|
|
CHECKBOX_HIDE_PASSCODE_SCOPE,
|
|
CHECKBOX_DRAW_FIELD_SPELLS,
|
|
CHECKBOX_FILTER_BOT,
|
|
COMBOBOX_VSYNC,
|
|
EDITBOX_FPS_CAP,
|
|
BUTTON_FPS_CAP,
|
|
COMBOBOX_CORE_LOG_OUTPUT,
|
|
CHECKBOX_SHOW_SCOPE_LABEL,
|
|
CHECKBOX_SAVE_HAND_TEST_REPLAY,
|
|
CHECKBOX_LOOP_MUSIC,
|
|
CHECKBOX_DISCORD_INTEGRATION,
|
|
CHECKBOX_LOG_DOWNLOAD_ERRORS,
|
|
CHECKBOX_HIDE_HANDS_REPLAY,
|
|
|
|
CHECKBOX_KEEP_CARD_ASPECT_RATIO,
|
|
|
|
CHECKBOX_NATIVE_KEYBOARD,
|
|
CHECKBOX_NATIVE_MOUSE,
|
|
|
|
BUTTON_MARKS_FILTER,
|
|
BUTTON_MARKERS_OK,
|
|
|
|
CHECKBOX_OBSOLETE,
|
|
CHECKBOX_DRAW,
|
|
CHECKBOX_FIELD,
|
|
CHECKBOX_PZONE,
|
|
CHECKBOX_SEPARATE_PZONE,
|
|
CHECKBOX_EMZONE,
|
|
CHECKBOX_FSX_NOEMZONE,
|
|
CHECKBOX_TRAPMON_ZONES,
|
|
CHECKBOX_FACEDOWN_ED_TRIGGER,
|
|
LOCATION_TRIGGER_CHECK,
|
|
OLD_NEGATION_SUMMON_OPT,
|
|
OLD_NEGATION_SUMMON_COUNT,
|
|
NO_STANDBY_PHASE,
|
|
NO_MAIN_PHASE2,
|
|
THREE_COLUMN_FIELD,
|
|
DRAW_UNTIL_5,
|
|
NO_HAND_LIMIT,
|
|
NO_NORMAL_SUMMON_LIMIT,
|
|
INVERTED_PRIORITY,
|
|
TRAP_WAIT,
|
|
BATTLE_6_STEP,
|
|
TRIGGER_PRIVATE,
|
|
EQUIP_NOT_SEND,
|
|
ATK0_VS_ATK0,
|
|
ATTACK_REPLAY_STORE,
|
|
SUBSTEP_ONLY_1_CHAIN,
|
|
CHANGE_POSITION_ON_STEAL,
|
|
TCG_SEGOC_NONPUBLIC,
|
|
TCG_SEGOC_FIRSTTRIGGER,
|
|
|
|
TABLE_ROOMLIST,
|
|
BUTTON_ROOMPASSWORD_OK,
|
|
BUTTON_JOIN_HOST2,
|
|
BUTTON_JOIN_CANCEL2,
|
|
BUTTON_LAN_REFRESH2,
|
|
CHECK_LINUX_UNRANKED,
|
|
SERVER_CHOICE,
|
|
BUTTON_CREATE_HOST2,
|
|
CB_FILTER_ALLOWED_CARDS,
|
|
CB_FILTER_MATCH_MODE,
|
|
CB_FILTER_BANLIST,
|
|
BUTTON_FILTER_RELAY,
|
|
EDIT_ONLINE_ROOM_NAME,
|
|
CHECK_SHOW_LOCKED_ROOMS,
|
|
CHECK_SHOW_ACTIVE_ROOMS,
|
|
BUTTON_ROOMPASSWORD_CANCEL,
|
|
BUTTON_ONLINE_MULTIPLAYER, // first button on main menu
|
|
|
|
ACTION_UPDATE_PROMPT,
|
|
ACTION_ACKNOWLEDGE_HOST,
|
|
ACTION_SHOW_CHANGELOG,
|
|
#if EDOPRO_LINUX && (IRRLICHT_VERSION_MAJOR==1 && IRRLICHT_VERSION_MINOR==9)
|
|
ACTION_TRY_WAYLAND,
|
|
#endif
|
|
SETTINGS_WINDOW_ELEMENT,
|
|
|
|
CHECKBOX_DOTTED_LINES,
|
|
CHECKBOX_AUTO_RPS,
|
|
|
|
SYNCHRONIZED_ELEMENT = 0x40000000,
|
|
CHECKBOX_IGNORE_OPPONENTS,
|
|
CHECKBOX_IGNORE_SPECTATORS,
|
|
CHECKBOX_QUICK_ANIMATION,
|
|
CHECKBOX_AUTO_CHAIN_ORDER,
|
|
CHECKBOX_NO_CHAIN_DELAY,
|
|
CHECKBOX_ALTERNATIVE_PHASE_LAYOUT,
|
|
CHECKBOX_CHAIN_BUTTONS,
|
|
CHECKBOX_ENABLE_MUSIC,
|
|
CHECKBOX_ENABLE_SOUND,
|
|
CHECKBOX_IGNORE_DECK_CONTENTS,
|
|
SCROLL_MUSIC_VOLUME,
|
|
SCROLL_SOUND_VOLUME,
|
|
CHECKBOX_KEEP_FIELD_ASPECT_RATIO,
|
|
CHECKBOX_TOPDOWN,
|
|
DONT_CHECK_DECK_CONTENT,
|
|
DONT_CHECK_DECK_SIZE,
|
|
DONT_SHUFFLE_DECK,
|
|
};
|
|
|
|
class MenuHandler final : public irr::IEventReceiver {
|
|
public:
|
|
bool OnEvent(const irr::SEvent& event) override;
|
|
void SynchronizeElement(irr::gui::IGUIElement* elem) const;
|
|
std::unordered_multimap<int, irr::gui::IGUIElement*> synchronized_elements;
|
|
int prev_operation;
|
|
int prev_sel;
|
|
|
|
void MakeElementSynchronized(irr::gui::IGUIElement* elem) {
|
|
synchronized_elements.emplace(elem->getID(), elem);
|
|
}
|
|
|
|
static constexpr bool IsSynchronizedElement(int id) {
|
|
return (id & 0x4fff0000) == SYNCHRONIZED_ELEMENT;
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif //MENU_HANDLER_H
|