1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

a bit more of prologue/epilogue screen

This commit is contained in:
mateuszb
2013-02-20 21:01:18 +00:00
parent b776b93b0c
commit 92995964f3
3 changed files with 26 additions and 20 deletions

View File

@@ -3587,16 +3587,23 @@ void CBonusSelection::startMap()
tlog1 << "Starting scenario " << int(ourCampaign->currentMap) << "\n";
auto exitCb = [si]()
{
CGP->showLoadingScreen(boost::bind(&startGame, si, (CConnection *)nullptr));
};
if (scenario.prolog.hasPrologEpilog)
{
//GH.pushInt(new CPrologEpilogVideo(scenario.prolog));
GH.pushInt(new CPrologEpilogVideo(scenario.prolog, exitCb));
tlog1 << "Video: " << scenario.prolog.prologVideo <<"\n";
tlog1 << "Audio: " << scenario.prolog.prologMusic <<"\n";
tlog1 << "Text: " << scenario.prolog.prologText <<"\n";
}
else
{
tlog1 << "Without prolog\n";
CGP->showLoadingScreen(boost::bind(&startGame, si, (CConnection *)nullptr));
exitCb();
}
}
void CBonusSelection::selectBonus( int id )
@@ -4083,27 +4090,33 @@ void CLoadingScreen::showAll(SDL_Surface *to)
CWindowObject::showAll(to);
}
CPrologEpilogVideo::CPrologEpilogVideo( CCampaignScenario::SScenarioPrologEpilog _spe )
: spe(_spe), curTxtH(300)
CPrologEpilogVideo::CPrologEpilogVideo( CCampaignScenario::SScenarioPrologEpilog _spe, std::function<void()> callback )
: spe(_spe), exitCb(callback)
{
OBJ_CONSTRUCTION_CAPTURING_ALL;
addUsedEvents(LCLICK);
pos = Rect(screen);
CCS->videoh->open(CCampaignHandler::prologVideoName(spe.prologVideo));
auto lines = CMessage::breakText(spe.prologText, 50, EFonts::FONT_BIG);
auto lines = CMessage::breakText(spe.prologText, 500, EFonts::FONT_BIG);
txt = CSDL_Ext::newSurface(500, 60 * lines.size());
graphics->fonts[FONT_BIG]->renderTextLinesCenter(txt, lines, Colors::METALLIC_GOLD, Point(0,0));
txt = CSDL_Ext::newSurface(500, 25 * lines.size());
curTxtH = screen->h;
graphics->fonts[FONT_BIG]->renderTextLinesCenter(txt, lines, Colors::METALLIC_GOLD, Point(txt->w/2, txt->h/2));
SDL_SaveBMP(txt, "txtsrfc.bmp");
}
void CPrologEpilogVideo::show( SDL_Surface * to )
{
blitAt(txt, 50, 200-curTxtH, to);
memset(to->pixels, 0, to->h*to->pitch); //make bg black
blitAt(txt, (to->w-txt->w)/2, curTxtH, to);
CCS->videoh->show(0, 0, to);
curTxtH = std::max(curTxtH - 10, to->h - txt->h);
curTxtH = std::max(curTxtH - 1, to->h - txt->h);
}
void CPrologEpilogVideo::clickLeft( tribool down, bool previousState )
{
GH.popInt(this);
exitCb();
}

View File

@@ -545,8 +545,9 @@ class CPrologEpilogVideo : public CIntObject
CCampaignScenario::SScenarioPrologEpilog spe;
SDL_Surface * txt;
int curTxtH;
std::function<void()> exitCb;
public:
CPrologEpilogVideo(CCampaignScenario::SScenarioPrologEpilog _spe);
CPrologEpilogVideo(CCampaignScenario::SScenarioPrologEpilog _spe, std::function<void()> callback);
void clickLeft(tribool down, bool previousState);
void show(SDL_Surface * to);

View File

@@ -468,22 +468,14 @@ CCampaignState::CCampaignState( unique_ptr<CCampaign> _camp ) : camp(std::move(_
}
}
static std::string indexToString(std::string fname, ui8 index)
{
CLegacyConfigParser parser(fname);
for(int i=0; i<index-1; ++i)
parser.endLine();
return parser.readString();
}
std::string CCampaignHandler::prologVideoName(ui8 index)
{
return indexToString("DATA/CMPMOVIE", index);
return "";
}
std::string CCampaignHandler::prologMusicName(ui8 index)
{
return indexToString("DATA/CMPMUSIC", index);
return "";
}