From 70162ece95d0d24784b2b5cfd2624fd9e9178ff0 Mon Sep 17 00:00:00 2001 From: Flugente Date: Thu, 4 Jan 2018 18:57:33 +0000 Subject: [PATCH] Change: In the militia overview laptop website, do not display militia faces, instead colour their names. This way we can display more militia at once without losing information git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8514 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Laptop/BaseTable.cpp | 14 ++++++++++---- Laptop/BaseTable.h | 8 +++++++- Laptop/MilitiaWebsite.cpp | 32 +++++++++++++++++++++++++++++--- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/Laptop/BaseTable.cpp b/Laptop/BaseTable.cpp index 7b21984b..5d6b4ea5 100644 --- a/Laptop/BaseTable.cpp +++ b/Laptop/BaseTable.cpp @@ -15,6 +15,10 @@ #include "input.h" // for gfLeftButtonState #include "insurance.h" // for DisplaySmallColouredLineWithShadow +#define TESTTABLE_FONT_MED FONT12ARIAL +#define TESTTABLE_OFFSET_ROW 20 +#define TESTTABLE_FONT_COLOR_REGULAR 2 + BaseTable::BaseTable( ) : WidgetBase( ), mName(L""), @@ -105,6 +109,11 @@ STR16 cdp_string_func_dummy( UINT32 aNum ) return L"nothing found"; } +UINT8 cdp_textcolour_func_dummy( UINT32 aNum ) +{ + return TESTTABLE_FONT_COLOR_REGULAR; +} + void cdp_image_func_dummy( UINT32 aNum, UINT32& arImageLib, UINT16& arImage ) { @@ -194,9 +203,6 @@ ColumnDataProvider::DestroyMouseRegions( ) } // Flugente: this unused page will now be a testbed for the BaseTable development -#define TESTTABLE_FONT_MED FONT12ARIAL -#define TESTTABLE_OFFSET_ROW 20 -#define TESTTABLE_FONT_COLOR_REGULAR 2 ////////////// TestPanel/////////////////////////////////////// TestPanel::TestPanel( ) @@ -575,7 +581,7 @@ TestTable::Display( ) { swprintf( sText, (*it).GetString( i ) ); - DrawTextToScreen( sText, usPosX, usPosY + 7, GetWidth( ), TESTTABLE_FONT_MED, TESTTABLE_FONT_COLOR_REGULAR, FONT_MCOLOR_BLACK, FALSE, 0 ); + DrawTextToScreen( sText, usPosX, usPosY + 7, GetWidth( ), TESTTABLE_FONT_MED, (*it).GetColour( i ), FONT_MCOLOR_BLACK, FALSE, 0 ); } else if ( it->GetProviderType( ) == ColumnDataProvider::CDP_IMAGE ) { diff --git a/Laptop/BaseTable.h b/Laptop/BaseTable.h index a0b35715..9db4781d 100644 --- a/Laptop/BaseTable.h +++ b/Laptop/BaseTable.h @@ -163,6 +163,9 @@ public: typedef STR16( *cdp_string_func )(UINT32 aNum); STR16 cdp_string_func_dummy( UINT32 aNum ); +typedef UINT8( *cdp_textcolour_func )( UINT32 aNum ); +UINT8 cdp_textcolour_func_dummy( UINT32 aNum ); + typedef void( *cdp_image_func )(UINT32 aNum, UINT32& arImageLib, UINT16& arImage ); void cdp_image_func_dummy( UINT32 aNum, UINT32& arImageLib, UINT16& arImage ); @@ -176,7 +179,7 @@ class ColumnDataProvider public: ColumnDataProvider( STR16 aName ) : mName( aName ), mNumberOfEntries( 0 ), mRequiredLength(20), mRequiredHeigth( 20 ), mType( CDP_STRING ), mCallbackType( CDP_DEFAULT ), - mFuncString( cdp_string_func_dummy ), mFuncImage( cdp_image_func_dummy ) + mFuncString( cdp_string_func_dummy ), mFuncTextColour( cdp_textcolour_func_dummy ), mFuncImage( cdp_image_func_dummy ), mFuncStatusBar( cdp_statusbar_func_dummy ) { for ( int i = 0; i < COLUMNDATAPROVIDER_MOUSEREGIONS; ++i ) { @@ -216,6 +219,8 @@ public: // functions for handling string contents void SetMethodString( cdp_string_func afunc ) { mFuncString = afunc; SetProviderType( CDP_STRING ); CalcRequiredLength( ); } STR16 GetString( UINT32 aNum ) { return mFuncString( aNum ); } + void SetMethodTextColour( cdp_textcolour_func afunc ) { mFuncTextColour = afunc; } + UINT8 GetColour( UINT32 aNum ) { return mFuncTextColour( aNum ); } // functions for handling images void SetMethodImage( cdp_image_func afunc ) { mFuncImage = afunc; SetProviderType( CDP_IMAGE ); CalcRequiredLength( ); } @@ -252,6 +257,7 @@ private: CDP_CALLBACKTYPE mCallbackType; cdp_string_func mFuncString; + cdp_textcolour_func mFuncTextColour; cdp_image_func mFuncImage; cdp_statusbar_func mFuncStatusBar; }; diff --git a/Laptop/MilitiaWebsite.cpp b/Laptop/MilitiaWebsite.cpp index 87fd89ab..f7f9ce52 100644 --- a/Laptop/MilitiaWebsite.cpp +++ b/Laptop/MilitiaWebsite.cpp @@ -458,6 +458,31 @@ STR16 Profilenamegetter( UINT32 aNum ) return L"No entry found in database"; } +// a militia's name is written in a different colour, depending on their rank and whether they are dead +UINT8 MilitiaNameTextColourGetter( UINT32 aNum ) +{ + if ( aNum < gIndividualMilitiaFilteredIdsVector.size() ) + { + UINT32 militiaid = gIndividualMilitiaFilteredIdsVector[aNum]; + + MILITIA militia; + if ( GetMilitia( militiaid, &militia ) ) + { + if ( militia.flagmask & MILITIAFLAG_DEAD ) + return 243; + + switch ( militia.militiarank ) + { + case GREEN_MILITIA: return 184; break; + case REGULAR_MILITIA: return 201; break; + case ELITE_MILITIA: return 203; break; + } + } + } + + return 2; +} + STR16 Sectornamegetter( UINT32 aNum ) { if ( aNum < gIndividualMilitiaFilteredIdsVector.size( ) ) @@ -728,13 +753,13 @@ template<> void TestTableTemplate<3>::Init( UINT16 sX, UINT16 sY, UINT16 sX_End ColumnDataProvider healthbarcol( L"" ); healthbarcol.SetMethodStatusBar( MilitiaHealthBar ); healthbarcol.SetNumberOfEntries( gIndividualMilitiaFilteredIdsVector.size( ) ); - healthbarcol.SetRequiredHeigth( 29 ); + //healthbarcol.SetRequiredHeigth( 29 ); healthbarcol.SetCallBackType( ColumnDataProvider::CDP_MILITIA_LIST ); AddColumnDataProvider( healthbarcol ); } - // face + /*// face ColumnDataProvider imagecol( L"" ); imagecol.SetMethodImage( AutoResolveFaces ); imagecol.SetNumberOfEntries( gIndividualMilitiaFilteredIdsVector.size( ) ); @@ -742,11 +767,12 @@ template<> void TestTableTemplate<3>::Init( UINT16 sX, UINT16 sY, UINT16 sX_End imagecol.SetRequiredLength( 35 ); imagecol.SetCallBackType( ColumnDataProvider::CDP_MILITIA_LIST ); - AddColumnDataProvider( imagecol ); + AddColumnDataProvider( imagecol );*/ // name ColumnDataProvider namcol( szIdividualMilitiaWebsiteText[12] ); namcol.SetMethodString( Profilenamegetter ); + namcol.SetMethodTextColour( MilitiaNameTextColourGetter ); namcol.SetNumberOfEntries( gIndividualMilitiaFilteredIdsVector.size( ) ); namcol.SetCallBackType( ColumnDataProvider::CDP_MILITIA_LIST );