/* * CSpellWindow.h, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #pragma once #include "CWindowObject.h" VCMI_LIB_NAMESPACE_BEGIN class CGHeroInstance; class CSpell; VCMI_LIB_NAMESPACE_END class IImage; class CAnimImage; class CPicture; class CLabel; class CGStatusBar; class CPlayerInterface; class CSpellWindow; class CTextInput; class TransparentFilledRectangle; class CToggleButton; /// The spell window class CSpellWindow : public CWindowObject { class SpellArea : public CIntObject { const CSpell * mySpell; int schoolLevel; //range: 0 none, 3 - expert CSpellWindow * owner; std::shared_ptr image; std::shared_ptr schoolBorder; std::shared_ptr name; std::shared_ptr level; std::shared_ptr cost; public: SpellArea(Rect pos, CSpellWindow * owner); ~SpellArea(); void setSpell(const CSpell * spell); void clickPressed(const Point & cursorPosition) override; void showPopupWindow(const Point & cursorPosition) override; void hover(bool on) override; }; class InteractiveArea : public CIntObject { std::function onLeft; CSpellWindow * owner; std::string hoverText; std::string helpText; public: void clickPressed(const Point & cursorPosition) override; void showPopupWindow(const Point & cursorPosition) override; void hover(bool on) override; InteractiveArea(const Rect &myRect, std::function funcL, int helpTextId, CSpellWindow * _owner); }; std::shared_ptr leftCorner; std::shared_ptr rightCorner; std::shared_ptr schoolTab; std::shared_ptr schoolPicture; std::array, 24> spellAreas; std::shared_ptr mana; std::shared_ptr statusBar; std::vector> interactiveAreas; std::shared_ptr searchBox; std::shared_ptr searchBoxRectangle; std::shared_ptr searchBoxDescription; std::shared_ptr showAllSpells; std::shared_ptr showAllSpellsDescription; bool isBigSpellbook; int spellsPerPage; int offL; int offR; int offRM; int offT; int offB; int sitesPerTabAdv[5]; int sitesPerTabBattle[5]; bool battleSpellsOnly; //if true, only battle spells are displayed; if false, only adventure map spells are displayed uint8_t selectedTab; // 0 - air magic, 1 - fire magic, 2 - water magic, 3 - earth magic, 4 - all schools int currentPage; //changes when corners are clicked std::vector mySpells; //all spels in this spellbook const CGHeroInstance * myHero; //hero whose spells are presented CPlayerInterface * myInt; void processSpells(); void searchInput(); void computeSpellsPerArea(); //recalculates spellAreas::mySpell void setCurrentPage(int value); void turnPageLeft(); void turnPageRight(); bool openOnBattleSpells; std::function onSpellSelect; //external processing of selected spell public: CSpellWindow(const CGHeroInstance * _myHero, CPlayerInterface * _myInt, bool openOnBattleSpells = true, const std::function & onSpellSelect = nullptr); ~CSpellWindow(); void fexitb(); void fadvSpellsb(); void fbattleSpellsb(); void fmanaPtsb(); void fLcornerb(); void fRcornerb(); void selectSchool(int school); //schools: 0 - air magic, 1 - fire magic, 2 - water magic, 3 - earth magic, 4 - all schools int pagesWithinCurrentTab(); void keyPressed(EShortcut key) override; void show(Canvas & to) override; };