2018-01-05 20:21:07 +03:00
/*
* CreditsScreen.cpp, 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
*
*/
#include "StdInc.h"
#include "CreditsScreen.h"
2022-09-18 15:47:49 +03:00
#include "CMainMenu.h"
2018-01-05 20:21:07 +03:00
#include "../gui/CGuiHandler.h"
#include "../widgets/TextControls.h"
#include "../widgets/ObjectLists.h"
#include "../../lib/filesystem/Filesystem.h"
2023-09-12 11:52:19 +02:00
#include "../../AUTHORS.h"
2018-04-07 18:42:11 +07:00
CreditsScreen :: CreditsScreen ( Rect rect )
2024-07-20 08:28:35 +00:00
: CIntObject ( LCLICK ), timePassed ( 0 )
2018-01-05 20:21:07 +03:00
{
2018-04-07 18:42:11 +07:00
pos . w = rect . w ;
pos . h = rect . h ;
2023-07-03 19:24:12 +03:00
setRedrawParent ( true );
2024-08-09 15:30:04 +00:00
OBJECT_CONSTRUCTION ;
2023-09-12 11:52:19 +02:00
2024-07-20 08:28:35 +00:00
addUsedEvents ( TIME );
2023-09-12 11:52:19 +02:00
std :: string contributorsText = "" ;
std :: string contributorsTask = "" ;
for ( auto & element : contributors )
{
if ( element [ 0 ] != contributorsTask )
contributorsText += " \r\n {" + element [ 0 ] + ":} \r\n " ;
contributorsText += ( element [ 2 ] != "" ? element [ 2 ] : element [ 1 ]) + " \r\n " ;
contributorsTask = element [ 0 ];
}
2023-08-23 15:07:50 +03:00
auto textFile = CResourceHandler :: get () -> load ( ResourcePath ( "DATA/CREDITS.TXT" )) -> readAll ();
2018-01-05 20:21:07 +03:00
std :: string text (( char * ) textFile . first . get (), textFile . second );
size_t firstQuote = text . find ( '\"' ) + 1 ;
text = text . substr ( firstQuote , text . find ( '\"' , firstQuote ) - firstQuote );
2023-09-12 11:52:19 +02:00
text = "{- VCMI -} \r\n\r\n " + contributorsText + " \r\n\r\n {Website:} \r\n https://vcmi.eu \r\n\r\n\r\n\r\n\r\n {- Heroes of Might and Magic III -} \r\n\r\n " + text ;
2022-11-26 23:12:20 +02:00
credits = std :: make_shared < CMultiLineLabel > ( Rect ( pos . w - 350 , 0 , 350 , 600 ), FONT_CREDITS , ETextAlignment :: CENTER , Colors :: WHITE , text );
2018-01-05 20:21:07 +03:00
credits -> scrollTextTo ( - 600 ); // move all text below the screen
}
2024-07-20 08:28:35 +00:00
void CreditsScreen :: tick ( uint32_t msPassed )
2018-01-05 20:21:07 +03:00
{
2024-07-20 08:28:35 +00:00
static const int timeToScrollByOnePx = 20 ;
timePassed += msPassed ;
int scrollPosition = timePassed / timeToScrollByOnePx - 600 ;
credits -> scrollTextTo ( scrollPosition );
2018-01-05 20:21:07 +03:00
//end of credits, close this screen
2024-07-20 08:28:35 +00:00
if ( credits -> textSize . y < scrollPosition )
2023-07-08 14:33:04 +03:00
clickPressed ( GH . getCursorPosition ());
2018-01-05 20:21:07 +03:00
}
2023-07-08 14:33:04 +03:00
void CreditsScreen :: clickPressed ( const Point & cursorPosition )
2018-01-05 20:21:07 +03:00
{
CTabbedInt * menu = dynamic_cast < CTabbedInt *> ( parent );
assert ( menu );
menu -> setActive ( 0 );
}