mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
Get rid of CDefHandler in CPreGame.
* also fixes difficulty icon in campaign screen
This commit is contained in:
parent
e0303f791a
commit
a223793405
@ -8,7 +8,6 @@
|
||||
#include "gui/SDL_Extensions.h"
|
||||
#include "CGameInfo.h"
|
||||
#include "gui/CCursorHandler.h"
|
||||
#include "CDefHandler.h"
|
||||
#include "../lib/CGeneralTextHandler.h"
|
||||
#include "../lib/CTownHandler.h"
|
||||
#include "../lib/CHeroHandler.h"
|
||||
@ -503,14 +502,16 @@ void CGPreGame::loadGraphics()
|
||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||
new CFilledTexture("DIBOXBCK", pos);
|
||||
|
||||
victory = CDefHandler::giveDef("SCNRVICT.DEF");
|
||||
loss = CDefHandler::giveDef("SCNRLOSS.DEF");
|
||||
victoryIcons = std::make_shared<CAnimation>("SCNRVICT.DEF");
|
||||
victoryIcons->load();
|
||||
lossIcons = std::make_shared<CAnimation>("SCNRLOSS.DEF");
|
||||
lossIcons->load();
|
||||
}
|
||||
|
||||
void CGPreGame::disposeGraphics()
|
||||
{
|
||||
delete victory;
|
||||
delete loss;
|
||||
victoryIcons->unload();
|
||||
lossIcons->unload();
|
||||
}
|
||||
|
||||
void CGPreGame::update()
|
||||
@ -1296,7 +1297,7 @@ SelectionTab::SelectionTab(CMenuScreen::EState Type, const std::function<void(CM
|
||||
slider = new CSlider(Point(372, 86), tabType != CMenuScreen::saveGame ? 480 : 430, std::bind(&SelectionTab::sliderMove, this, _1), positions, curItems.size(), 0, false, CSlider::BLUE);
|
||||
slider->addUsedEvents(WHEEL);
|
||||
|
||||
formatIcons = make_unique<CAnimation>("SCSELC.DEF");
|
||||
formatIcons = std::make_shared<CAnimation>("SCSELC.DEF");
|
||||
formatIcons->load();
|
||||
|
||||
sortingBy = _format;
|
||||
@ -1326,7 +1327,7 @@ SelectionTab::SelectionTab(CMenuScreen::EState Type, const std::function<void(CM
|
||||
|
||||
SelectionTab::~SelectionTab()
|
||||
{
|
||||
|
||||
formatIcons->unload();
|
||||
}
|
||||
|
||||
void SelectionTab::sortBy( int criteria )
|
||||
@ -1477,14 +1478,25 @@ void SelectionTab::printMaps(SDL_Surface *to)
|
||||
}
|
||||
IImage * icon = formatIcons->getImage(frame,group);
|
||||
if(icon)
|
||||
{
|
||||
icon->draw(to, pos.x + 88, pos.y + 117 + line * 25);
|
||||
|
||||
icon->decreaseRef();
|
||||
}
|
||||
|
||||
//victory conditions
|
||||
blitAtLoc(CGP->victory->ourImages[currentItem->mapHeader->victoryIconIndex].bitmap, 306, 117 + line * 25, to);
|
||||
|
||||
icon = CGP->victoryIcons->getImage(currentItem->mapHeader->victoryIconIndex,0);
|
||||
if(icon)
|
||||
{
|
||||
icon->draw(to, pos.x + 306, pos.y + 117 + line * 25);
|
||||
icon->decreaseRef();
|
||||
}
|
||||
//loss conditions
|
||||
blitAtLoc(CGP->loss->ourImages[currentItem->mapHeader->defeatIconIndex].bitmap, 339, 117 + line * 25, to);
|
||||
icon = CGP->lossIcons->getImage(currentItem->mapHeader->defeatIconIndex,0);
|
||||
if(icon)
|
||||
{
|
||||
icon->draw(to, pos.x + 339, pos.y + 117 + line * 25);
|
||||
icon->decreaseRef();
|
||||
}
|
||||
}
|
||||
else //if campaign
|
||||
{
|
||||
@ -1986,8 +1998,8 @@ void CChatBox::addNewMessage(const std::string &text)
|
||||
}
|
||||
|
||||
InfoCard::InfoCard( bool Network )
|
||||
: bg(nullptr), network(Network), chatOn(false), chat(nullptr), playerListBg(nullptr),
|
||||
difficulty(nullptr), sizes(nullptr), sFlags(nullptr)
|
||||
: sizes(nullptr), bg(nullptr), network(Network), chatOn(false), chat(nullptr), playerListBg(nullptr),
|
||||
difficulty(nullptr)
|
||||
{
|
||||
OBJ_CONSTRUCTION_CAPTURING_ALL;
|
||||
CIntObject::type |= REDRAW_PARENT;
|
||||
@ -2013,8 +2025,11 @@ InfoCard::InfoCard( bool Network )
|
||||
parent->children.pop_back();
|
||||
pos.w = bg->pos.w;
|
||||
pos.h = bg->pos.h;
|
||||
sizes = CDefHandler::giveDef("SCNRMPSZ.DEF");
|
||||
sFlags = CDefHandler::giveDef("ITGFLAGS.DEF");
|
||||
sizes = new CAnimImage("SCNRMPSZ", 4, 0, 318, 22);//let it be custom size (frame 4) by default
|
||||
sizes->recActions &= ~(SHOWALL | UPDATE);//explicit draw
|
||||
|
||||
sFlags = std::make_shared<CAnimation>("ITGFLAGS.DEF");
|
||||
sFlags->load();
|
||||
difficulty = new CToggleGroup(0);
|
||||
{
|
||||
static const char *difButns[] = {"GSPBUT3.DEF", "GSPBUT4.DEF", "GSPBUT5.DEF", "GSPBUT6.DEF", "GSPBUT7.DEF"};
|
||||
@ -2039,12 +2054,16 @@ InfoCard::InfoCard( bool Network )
|
||||
}
|
||||
}
|
||||
|
||||
victory = new CAnimImage("SCNRVICT",0, 0, 24, 302);
|
||||
victory->recActions &= ~(SHOWALL | UPDATE);//explicit draw
|
||||
loss = new CAnimImage("SCNRLOSS", 0, 0, 24, 359);
|
||||
loss->recActions &= ~(SHOWALL | UPDATE);//explicit draw
|
||||
}
|
||||
|
||||
InfoCard::~InfoCard()
|
||||
{
|
||||
delete sizes;
|
||||
delete sFlags;
|
||||
if(sFlags)
|
||||
sFlags->unload();
|
||||
}
|
||||
|
||||
void InfoCard::showAll(SDL_Surface * to)
|
||||
@ -2092,27 +2111,17 @@ void InfoCard::showAll(SDL_Surface * to)
|
||||
{
|
||||
if(SEL->screenType != CMenuScreen::campaignList)
|
||||
{
|
||||
int temp = -1;
|
||||
|
||||
if(!chatOn)
|
||||
{
|
||||
CDefHandler * loss = CGP ? CGP->loss : CDefHandler::giveDef("SCNRLOSS.DEF");
|
||||
CDefHandler * victory = CGP ? CGP->victory : CDefHandler::giveDef("SCNRVICT.DEF");
|
||||
|
||||
CMapHeader * header = SEL->current->mapHeader.get();
|
||||
//victory conditions
|
||||
printAtLoc(header->victoryMessage, 60, 307, FONT_SMALL, Colors::WHITE, to);
|
||||
blitAtLoc(victory->ourImages[header->victoryIconIndex].bitmap, 24, 302, to); //victory cond descr
|
||||
|
||||
victory->setFrame(header->victoryIconIndex);
|
||||
victory->showAll(to);
|
||||
//loss conditoins
|
||||
printAtLoc(header->defeatMessage, 60, 366, FONT_SMALL, Colors::WHITE, to);
|
||||
blitAtLoc(loss->ourImages[header->defeatIconIndex].bitmap, 24, 359, to); //loss cond
|
||||
|
||||
if (!CGP)
|
||||
{
|
||||
delete loss;
|
||||
delete victory;
|
||||
}
|
||||
loss->setFrame(header->defeatIconIndex);
|
||||
loss->showAll(to);
|
||||
}
|
||||
|
||||
//difficulty
|
||||
@ -2124,23 +2133,22 @@ void InfoCard::showAll(SDL_Surface * to)
|
||||
switch (SEL->current->mapHeader->width)
|
||||
{
|
||||
case 36:
|
||||
temp=0;
|
||||
sizes->setFrame(0);
|
||||
break;
|
||||
case 72:
|
||||
temp=1;
|
||||
sizes->setFrame(1);
|
||||
break;
|
||||
case 108:
|
||||
temp=2;
|
||||
sizes->setFrame(2);
|
||||
break;
|
||||
case 144:
|
||||
temp=3;
|
||||
sizes->setFrame(3);
|
||||
break;
|
||||
default:
|
||||
temp=4;
|
||||
sizes->setFrame(4);
|
||||
break;
|
||||
}
|
||||
blitAtLoc(sizes->ourImages[temp].bitmap, 318, 22, to);
|
||||
|
||||
sizes->showAll(to);
|
||||
|
||||
if(SEL->screenType == CMenuScreen::loadGame)
|
||||
printToLoc((static_cast<const CMapInfo*>(SEL->current))->date,308,34, FONT_SMALL, Colors::WHITE, to);
|
||||
@ -2159,8 +2167,10 @@ void InfoCard::showAll(SDL_Surface * to)
|
||||
for (auto i = SEL->sInfo.playerInfos.cbegin(); i != SEL->sInfo.playerInfos.cend(); i++)
|
||||
{
|
||||
int *myx = ((i->first == playerColor || SEL->current->mapHeader->players[i->first.getNum()].team == myT) ? &fx : &ex);
|
||||
blitAtLoc(sFlags->ourImages[i->first.getNum()].bitmap, *myx, 399, to);
|
||||
*myx += sFlags->ourImages[i->first.getNum()].bitmap->w;
|
||||
IImage * flag = sFlags->getImage(i->first.getNum(),0);
|
||||
flag->draw(to, pos.x + *myx, pos.y + 399);
|
||||
*myx += flag->width();
|
||||
flag->decreaseRef();
|
||||
}
|
||||
|
||||
std::string tob;
|
||||
@ -2255,7 +2265,9 @@ void InfoCard::showTeamsPopup()
|
||||
int curx = 128 - 9*flags.size();
|
||||
for(auto & flag : flags)
|
||||
{
|
||||
blitAt(sFlags->ourImages[flag].bitmap, curx, 75 + 50*i, bmp);
|
||||
IImage * icon = sFlags->getImage(flag,0);
|
||||
icon->draw(bmp, curx, 75 + 50*i);
|
||||
icon->decreaseRef();
|
||||
curx += 18;
|
||||
}
|
||||
}
|
||||
@ -3242,7 +3254,8 @@ void CBonusSelection::init()
|
||||
graphics->fonts[FONT_BIG]->renderTextLeft(background, CGI->generaltexth->allTexts[508], Colors::YELLOW, Point(481, 28));
|
||||
|
||||
//map size icon
|
||||
sizes = CDefHandler::giveDef("SCNRMPSZ.DEF");
|
||||
sizes = new CAnimImage("SCNRMPSZ",4,0,735, 26);
|
||||
sizes->recActions &= ~(SHOWALL | UPDATE);//explicit draw
|
||||
|
||||
//campaign description
|
||||
graphics->fonts[FONT_SMALL]->renderTextLeft(background, CGI->generaltexth->allTexts[38], Colors::YELLOW, Point(481, 63));
|
||||
@ -3293,14 +3306,10 @@ void CBonusSelection::init()
|
||||
graphics->fonts[FONT_MEDIUM]->renderTextLeft(background, difficulty.back(), Colors::WHITE, Point(689, 432));
|
||||
|
||||
//difficulty pics
|
||||
for (int b=0; b<ARRAY_COUNT(diffPics); ++b)
|
||||
for (size_t b=0; b < diffPics.size(); ++b)
|
||||
{
|
||||
CDefEssential * cde = CDefHandler::giveDefEss("GSPBUT" + boost::lexical_cast<std::string>(b+3) + ".DEF");
|
||||
SDL_Surface * surfToDuplicate = cde->ourImages[0].bitmap;
|
||||
diffPics[b] = SDL_ConvertSurface(surfToDuplicate, surfToDuplicate->format,
|
||||
surfToDuplicate->flags);
|
||||
|
||||
delete cde;
|
||||
diffPics[b] = new CAnimImage("GSPBUT" + boost::lexical_cast<std::string>(b+3) + ".DEF", 0, 0, 709, 455);
|
||||
diffPics[b]->recActions &= ~(SHOWALL | UPDATE);//explicit draw
|
||||
}
|
||||
|
||||
//difficulty selection buttons
|
||||
@ -3311,7 +3320,8 @@ void CBonusSelection::init()
|
||||
}
|
||||
|
||||
//load miniflags
|
||||
sFlags = CDefHandler::giveDef("ITGFLAGS.DEF");
|
||||
sFlags = std::make_shared<CAnimation>("ITGFLAGS.DEF");
|
||||
sFlags->load();
|
||||
}
|
||||
|
||||
CBonusSelection::CBonusSelection(std::shared_ptr<CCampaignState> _ourCampaign) : ourCampaign(_ourCampaign)
|
||||
@ -3328,13 +3338,8 @@ CBonusSelection::CBonusSelection(const std::string & campaignFName)
|
||||
CBonusSelection::~CBonusSelection()
|
||||
{
|
||||
SDL_FreeSurface(background);
|
||||
delete sizes;
|
||||
delete ourHeader;
|
||||
delete sFlags;
|
||||
for (auto & elem : diffPics)
|
||||
{
|
||||
SDL_FreeSurface(elem);
|
||||
}
|
||||
sFlags->unload();
|
||||
}
|
||||
|
||||
void CBonusSelection::goBack()
|
||||
@ -3433,8 +3438,6 @@ void CBonusSelection::selectMap(int mapNr, bool initialSelect)
|
||||
|
||||
void CBonusSelection::show(SDL_Surface * to)
|
||||
{
|
||||
//blitAt(background, pos.x, pos.y, to);
|
||||
|
||||
//map name
|
||||
std::string mapName = ourHeader->name;
|
||||
|
||||
@ -3468,7 +3471,8 @@ void CBonusSelection::show(SDL_Surface * to)
|
||||
temp=4;
|
||||
break;
|
||||
}
|
||||
blitAtLoc(sizes->ourImages[temp].bitmap, 735, 26, to);
|
||||
sizes->setFrame(temp);
|
||||
sizes->showAll(to);
|
||||
|
||||
//flags
|
||||
int fx = 496 + graphics->fonts[FONT_SMALL]->getStringWidth(CGI->generaltexth->allTexts[390]);
|
||||
@ -3478,12 +3482,15 @@ void CBonusSelection::show(SDL_Surface * to)
|
||||
for (auto i = startInfo.playerInfos.cbegin(); i != startInfo.playerInfos.cend(); i++)
|
||||
{
|
||||
int *myx = ((i->first == playerColor || ourHeader->players[i->first.getNum()].team == myT) ? &fx : &ex);
|
||||
blitAtLoc(sFlags->ourImages[i->first.getNum()].bitmap, *myx, 405, to);
|
||||
*myx += sFlags->ourImages[i->first.getNum()].bitmap->w;
|
||||
|
||||
IImage * flag = sFlags->getImage(i->first.getNum(),0);
|
||||
flag->draw(to, pos.x + *myx, pos.y + 405);
|
||||
*myx += flag->width();
|
||||
flag->decreaseRef();
|
||||
}
|
||||
|
||||
//difficulty
|
||||
blitAtLoc(diffPics[startInfo.difficulty], 709, 455, to);
|
||||
diffPics[startInfo.difficulty]->showAll(to);
|
||||
|
||||
CIntObject::show(to);
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
//#include "../lib/filesystem/Filesystem.h"
|
||||
#include "../lib/StartInfo.h"
|
||||
#include "../lib/FunctionList.h"
|
||||
#include "../lib/mapping/CMapInfo.h"
|
||||
@ -36,6 +35,8 @@ class CMultiLineLabel;
|
||||
class CToggleButton;
|
||||
class CToggleGroup;
|
||||
class CTabbedInt;
|
||||
class IImage;
|
||||
class CAnimation;
|
||||
class CAnimImage;
|
||||
class CButton;
|
||||
class CLabel;
|
||||
@ -124,6 +125,8 @@ public:
|
||||
|
||||
class InfoCard : public CIntObject
|
||||
{
|
||||
CAnimImage * victory, * loss, *sizes;
|
||||
std::shared_ptr<CAnimation> sFlags;
|
||||
public:
|
||||
CPicture *bg;
|
||||
CMenuScreen::EState type;
|
||||
@ -135,7 +138,6 @@ public:
|
||||
CPicture *playerListBg;
|
||||
|
||||
CToggleGroup *difficulty;
|
||||
CDefHandler *sizes, *sFlags;
|
||||
|
||||
void changeSelection(const CMapInfo *to);
|
||||
void showAll(SDL_Surface * to) override;
|
||||
@ -151,7 +153,7 @@ public:
|
||||
class SelectionTab : public CIntObject
|
||||
{
|
||||
private:
|
||||
std::unique_ptr<CAnimation> formatIcons;
|
||||
std::shared_ptr<CAnimation> formatIcons;
|
||||
|
||||
void parseMaps(const std::unordered_set<ResourceID> &files);
|
||||
void parseGames(const std::unordered_set<ResourceID> &files, bool multi);
|
||||
@ -528,10 +530,10 @@ private:
|
||||
std::vector<CRegion *> regions;
|
||||
CRegion * highlightedRegion;
|
||||
CToggleGroup * bonuses;
|
||||
SDL_Surface * diffPics[5]; //pictures of difficulties, user-selectable (or not if campaign locks this)
|
||||
std::array<CAnimImage *, 5> diffPics; //pictures of difficulties, user-selectable (or not if campaign locks this)
|
||||
CButton * diffLb, * diffRb; //buttons for changing difficulty
|
||||
CDefHandler * sizes; //icons of map sizes
|
||||
CDefHandler * sFlags;
|
||||
CAnimImage * sizes;//icons of map sizes
|
||||
std::shared_ptr<CAnimation> sFlags;
|
||||
|
||||
// Data
|
||||
std::shared_ptr<CCampaignState> ourCampaign;
|
||||
@ -609,7 +611,7 @@ class CGPreGame : public CIntObject, public IUpdateable
|
||||
public:
|
||||
CMenuScreen * menu;
|
||||
|
||||
CDefHandler *victory, *loss;
|
||||
std::shared_ptr<CAnimation> victoryIcons, lossIcons;
|
||||
|
||||
~CGPreGame();
|
||||
void update() override;
|
||||
|
Loading…
Reference in New Issue
Block a user