From e4d8d66de1573a769cc7d624a2cd3b8a9dab98a6 Mon Sep 17 00:00:00 2001 From: mateuszb Date: Thu, 11 Sep 2008 12:29:22 +0000 Subject: [PATCH] second part of spellbook --- client/CSpellWindow.cpp | 118 +++++++++++++++++++++++++++++++++++++--- client/CSpellWindow.h | 25 +++++++-- 2 files changed, 130 insertions(+), 13 deletions(-) diff --git a/client/CSpellWindow.cpp b/client/CSpellWindow.cpp index da0fad856..af16d5a7c 100644 --- a/client/CSpellWindow.cpp +++ b/client/CSpellWindow.cpp @@ -2,6 +2,9 @@ #include "client/Graphics.h" #include "hch/CDefHandler.h" #include "hch/CObjectHandler.h" +#include "hch/CPreGameTextHandler.h" +#include "CAdvmapInterface.h" +#include "CGameInfo.h" #include "SDL_Extensions.h" #include #include @@ -10,27 +13,52 @@ extern SDL_Surface * screen; extern SDL_Color tytulowy, zwykly ; extern TTF_Font *GEOR16; -ClickableArea::ClickableArea(SDL_Rect &myRect, boost::function func) +SpellbookInteractiveArea::SpellbookInteractiveArea(SDL_Rect & myRect, boost::function funcL, std::string textR, boost::function funcHon, boost::function funcHoff) { pos = myRect; - myFunc = func; + onLeft = funcL; + textOnRclick = textR; + onHoverOn = funcHon; + onHoverOff = funcHoff; } -void ClickableArea::clickLeft(boost::logic::tribool down) +void SpellbookInteractiveArea::clickLeft(boost::logic::tribool down) { if(!down) { - myFunc(); + onLeft(); } } -void ClickableArea::activate() +void SpellbookInteractiveArea::clickRight(boost::logic::tribool down) +{ + LOCPLINT->adventureInt->handleRightClick(textOnRclick, down, this); +} + +void SpellbookInteractiveArea::hover(bool on) +{ + Hoverable::hover(on); + if(on) + { + onHoverOn(); + } + else + { + onHoverOff(); + } +} + +void SpellbookInteractiveArea::activate() { ClickableL::activate(); + ClickableR::activate(); + Hoverable::activate(); } -void ClickableArea::deactivate() +void SpellbookInteractiveArea::deactivate() { ClickableL::deactivate(); + ClickableR::deactivate(); + Hoverable::deactivate(); } CSpellWindow::CSpellWindow(const SDL_Rect & myRect, const CGHeroInstance * myHero): selectedTab(4) @@ -53,9 +81,19 @@ CSpellWindow::CSpellWindow(const SDL_Rect & myRect, const CGHeroInstance * myHer schoolF = CDefHandler::giveDef("SplevF.def"); schoolA = CDefHandler::giveDef("SplevA.def"); - SDL_Rect temp_rect = genRect(45, 35, 569, 407); - exitBtn = new ClickableArea(temp_rect, boost::bind(&CSpellWindow::fexitb, this)); + + statusBar = new CStatusBar(97, 571, "Spelroll.bmp"); + exitBtn = new SpellbookInteractiveArea(genRect(45, 35, 569, 407), boost::bind(&CSpellWindow::fexitb, this), CGI->preth->zelp[460].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[460].first)), boost::bind(&CStatusBar::clear, statusBar)); + battleSpells = new SpellbookInteractiveArea(genRect(45, 35, 311, 407), boost::bind(&CSpellWindow::fbattleSpellsb, this), CGI->preth->zelp[453].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[453].first)), boost::bind(&CStatusBar::clear, statusBar)); + adventureSpells = new SpellbookInteractiveArea(genRect(45, 35, 445, 407), boost::bind(&CSpellWindow::fadvSpellsb, this), CGI->preth->zelp[452].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[452].first)), boost::bind(&CStatusBar::clear, statusBar)); + manaPoints = new SpellbookInteractiveArea(genRect(45, 35, 508, 407), boost::bind(&CSpellWindow::fmanaPtsb, this), CGI->preth->zelp[459].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[459].first)), boost::bind(&CStatusBar::clear, statusBar)); + + selectSpellsA = new SpellbookInteractiveArea(genRect(36, 56, 639, 96), boost::bind(&CSpellWindow::fspellsAb, this), CGI->preth->zelp[454].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[454].first)), boost::bind(&CStatusBar::clear, statusBar)); + selectSpellsE = new SpellbookInteractiveArea(genRect(36, 56, 639, 153), boost::bind(&CSpellWindow::fspellsEb, this), CGI->preth->zelp[457].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[457].first)), boost::bind(&CStatusBar::clear, statusBar)); + selectSpellsF = new SpellbookInteractiveArea(genRect(36, 56, 639, 212), boost::bind(&CSpellWindow::fspellsFb, this), CGI->preth->zelp[455].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[455].first)), boost::bind(&CStatusBar::clear, statusBar)); + selectSpellsW = new SpellbookInteractiveArea(genRect(36, 56, 639, 272), boost::bind(&CSpellWindow::fspellsWb, this), CGI->preth->zelp[456].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[456].first)), boost::bind(&CStatusBar::clear, statusBar)); + selectSpellsAll = new SpellbookInteractiveArea(genRect(36, 56, 639, 332), boost::bind(&CSpellWindow::fspellsAllb, this), CGI->preth->zelp[458].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[458].first)), boost::bind(&CStatusBar::clear, statusBar)); } CSpellWindow::~CSpellWindow() @@ -72,7 +110,16 @@ CSpellWindow::~CSpellWindow() delete schoolA; delete exitBtn; + delete battleSpells; + delete adventureSpells; + delete manaPoints; delete statusBar; + + delete selectSpellsA; + delete selectSpellsE; + delete selectSpellsF; + delete selectSpellsW; + delete selectSpellsAll; } void CSpellWindow::fexitb() @@ -92,6 +139,43 @@ void CSpellWindow::fexitb() LOCPLINT->curint->activate(); } +void CSpellWindow::fadvSpellsb() +{ +} + +void CSpellWindow::fbattleSpellsb() +{ +} + +void CSpellWindow::fmanaPtsb() +{ +} + +void CSpellWindow::fspellsAb() +{ + selectedTab = 0; +} + +void CSpellWindow::fspellsEb() +{ + selectedTab = 3; +} + +void CSpellWindow::fspellsFb() +{ + selectedTab = 1; +} + +void CSpellWindow::fspellsWb() +{ + selectedTab = 2; +} + +void CSpellWindow::fspellsAllb() +{ + selectedTab = 4; +} + void CSpellWindow::show(SDL_Surface *to) { if(to == NULL) //evaluating to @@ -106,9 +190,27 @@ void CSpellWindow::show(SDL_Surface *to) void CSpellWindow::activate() { exitBtn->activate(); + battleSpells->activate(); + adventureSpells->activate(); + manaPoints->activate(); + + selectSpellsA->activate(); + selectSpellsE->activate(); + selectSpellsF->activate(); + selectSpellsW->activate(); + selectSpellsAll->activate(); } void CSpellWindow::deactivate() { exitBtn->deactivate(); + battleSpells->deactivate(); + adventureSpells->deactivate(); + manaPoints->deactivate(); + + selectSpellsA->deactivate(); + selectSpellsE->deactivate(); + selectSpellsF->deactivate(); + selectSpellsW->deactivate(); + selectSpellsAll->deactivate(); } diff --git a/client/CSpellWindow.h b/client/CSpellWindow.h index 7bb43aaef..47a601c89 100644 --- a/client/CSpellWindow.h +++ b/client/CSpellWindow.h @@ -7,16 +7,21 @@ class CDefHandler; struct SDL_Rect; class CGHeroInstance; -class ClickableArea : public ClickableL +class SpellbookInteractiveArea : public ClickableL, public ClickableR, public Hoverable { private: - boost::function myFunc; + boost::function onLeft; + std::string textOnRclick; + boost::function onHoverOn; + boost::function onHoverOff; public: void clickLeft(boost::logic::tribool down); + void clickRight(boost::logic::tribool down); + void hover(bool on); void activate(); void deactivate(); - ClickableArea(SDL_Rect & myRect, boost::function func);//c-tor + SpellbookInteractiveArea(SDL_Rect & myRect, boost::function funcL, std::string textR, boost::function funcHon, boost::function funcHoff);//c-tor }; class CSpellWindow : public IShowActivable, public CIntObject @@ -28,14 +33,24 @@ private: * schools, //schools' pictures * schoolW, * schoolE, * schoolF, * schoolA; //schools' 'borders' - ClickableArea * exitBtn; + SpellbookInteractiveArea * exitBtn, * battleSpells, * adventureSpells, * manaPoints; + SpellbookInteractiveArea * selectSpellsA, * selectSpellsE, * selectSpellsF, * selectSpellsW, * selectSpellsAll; CStatusBar * statusBar; + Uint8 selectedTab; // 0 - air magic, 1 - fire magic, 2 - water magic, 3 - earth magic, 4 - all schools public: - Uint8 selectedTab; CSpellWindow(const SDL_Rect & myRect, const CGHeroInstance * myHero); //c-tor ~CSpellWindow(); //d-tor void fexitb(); + void fadvSpellsb(); + void fbattleSpellsb(); + void fmanaPtsb(); + + void fspellsAb(); + void fspellsEb(); + void fspellsFb(); + void fspellsWb(); + void fspellsAllb(); void activate(); void deactivate();