@@ -876,6 +876,19 @@ const FieldParse InGameUI::s_fieldParseTable[] =
876
876
{ " ClearMinesRadiusCursor" , RadiusDecalTemplate::parseRadiusDecalTemplate, NULL , offsetof ( InGameUI, m_radiusCursors[ RADIUSCURSOR_CLEARMINES] ) },
877
877
{ " AmbulanceRadiusCursor" , RadiusDecalTemplate::parseRadiusDecalTemplate, NULL , offsetof ( InGameUI, m_radiusCursors[ RADIUSCURSOR_AMBULANCE] ) },
878
878
879
+ // TheSuperHackers @info ui enhancement configuration
880
+ { " SystemTimeFont" , INI::parseAsciiString, NULL , offsetof ( InGameUI, m_systemTimeFont ) },
881
+ { " SystemTimeBold" , INI::parseBool, NULL , offsetof ( InGameUI, m_systemTimeBold ) },
882
+ { " SystemTimePosition" , INI::parseCoord2D, NULL , offsetof ( InGameUI, m_systemTimePosition ) },
883
+ { " SystemTimeColor" , INI::parseColorInt, NULL , offsetof ( InGameUI, m_systemTimeColor ) },
884
+ { " SystemTimeDropColor" , INI::parseColorInt, NULL , offsetof ( InGameUI, m_systemTimeDropColor ) },
885
+
886
+ { " GameTimeFont" , INI::parseAsciiString, NULL , offsetof ( InGameUI, m_gameTimeFont ) },
887
+ { " GameTimeBold" , INI::parseBool, NULL , offsetof ( InGameUI, m_gameTimeBold ) },
888
+ { " GameTimePosition" , INI::parseCoord2D, NULL , offsetof ( InGameUI, m_gameTimePosition ) },
889
+ { " GameTimeColor" , INI::parseColorInt, NULL , offsetof ( InGameUI, m_gameTimeColor ) },
890
+ { " GameTimeDropColor" , INI::parseColorInt, NULL , offsetof ( InGameUI, m_gameTimeDropColor ) },
891
+
879
892
{ NULL , NULL , NULL , 0 } // keep this last
880
893
};
881
894
@@ -1001,6 +1014,25 @@ InGameUI::InGameUI()
1001
1014
m_replayWindow = NULL ;
1002
1015
m_messagesOn = TRUE ;
1003
1016
1017
+ m_systemTimeString = NULL ;
1018
+ m_systemTimeFont = " Tahoma" ;
1019
+ m_systemTimePointSize = TheGlobalData->m_systemTimeFontSize ;
1020
+ m_systemTimeBold = TRUE ;
1021
+ m_systemTimePosition.x = 3 ; // TheSuperHackers @info relative to the left of the screen
1022
+ m_systemTimePosition.y = -1 ;
1023
+ m_systemTimeColor = GameMakeColor ( 255 , 255 , 255 , 255 );
1024
+ m_systemTimeDropColor = GameMakeColor ( 0 , 0 , 0 , 255 );
1025
+
1026
+ m_gameTimeString = NULL ;
1027
+ m_gameTimeFrameString = NULL ;
1028
+ m_gameTimeFont = " Tahoma" ;
1029
+ m_gameTimePointSize = TheGlobalData->m_gameTimeFontSize ;
1030
+ m_gameTimeBold = TRUE ;
1031
+ m_gameTimePosition.x = 3 ; // TheSuperHackers @info relative to the right of the screen
1032
+ m_gameTimePosition.y = -1 ;
1033
+ m_gameTimeColor = GameMakeColor ( 255 , 255 , 255 , 255 );
1034
+ m_gameTimeDropColor = GameMakeColor ( 0 , 0 , 0 , 255 );
1035
+
1004
1036
m_superweaponPosition.x = 0 .7f ;
1005
1037
m_superweaponPosition.y = 0 .7f ;
1006
1038
m_superweaponFlashDuration = 1 .0f ;
@@ -1082,6 +1114,9 @@ InGameUI::~InGameUI()
1082
1114
// delete the message resources
1083
1115
freeMessageResources ();
1084
1116
1117
+ // free custom ui strings
1118
+ freeCustomUiResources ();
1119
+
1085
1120
// delete the array for the drawbles
1086
1121
delete [] m_placeIcon;
1087
1122
m_placeIcon = NULL ;
@@ -1924,6 +1959,9 @@ void InGameUI::reset( void )
1924
1959
// free any message resources allocated
1925
1960
freeMessageResources ();
1926
1961
1962
+ // free custom ui strings
1963
+ freeCustomUiResources ();
1964
+
1927
1965
Int i;
1928
1966
for (i=0 ; i<MAX_PLAYER_COUNT; ++i)
1929
1967
{
@@ -2009,6 +2047,16 @@ void InGameUI::freeMessageResources( void )
2009
2047
2010
2048
} // end freeMessageResources
2011
2049
2050
+ void InGameUI::freeCustomUiResources ( void )
2051
+ {
2052
+ TheDisplayStringManager->freeDisplayString (m_systemTimeString);
2053
+ m_systemTimeString = NULL ;
2054
+ TheDisplayStringManager->freeDisplayString (m_gameTimeString);
2055
+ m_gameTimeString = NULL ;
2056
+ TheDisplayStringManager->freeDisplayString (m_gameTimeFrameString);
2057
+ m_gameTimeFrameString = NULL ;
2058
+ }
2059
+
2012
2060
// -------------------------------------------------------------------------------------------------
2013
2061
/* * Same as the unicode message method, but this takes an ascii string which is assumed
2014
2062
* to me a string manager label */
@@ -3465,6 +3513,17 @@ void InGameUI::disregardDrawable( Drawable *draw )
3465
3513
void InGameUI::postDraw ( void )
3466
3514
{
3467
3515
3516
+ // TheSuperHackers @info render the system time and game time first, this way other text will render over them if they overlap
3517
+ if (m_systemTimePointSize > 0 )
3518
+ {
3519
+ drawSystemTime ();
3520
+ }
3521
+
3522
+ if (m_gameTimePointSize > 0 && !TheGameLogic->isInShellGame ())
3523
+ {
3524
+ drawGameTime ();
3525
+ }
3526
+
3468
3527
// render our display strings for the messages if on
3469
3528
if ( m_messagesOn )
3470
3529
{
@@ -5726,4 +5785,59 @@ WindowMsgHandledType IdleWorkerSystem( GameWindow *window, UnsignedInt msg,
5726
5785
5727
5786
}
5728
5787
5788
+ void InGameUI::drawSystemTime ()
5789
+ {
5790
+ if (!m_systemTimeString) {
5791
+ m_systemTimeString = TheDisplayStringManager->newDisplayString ();
5792
+ }
5729
5793
5794
+ // current system time
5795
+ SYSTEMTIME systemTime;
5796
+ GetLocalTime ( &systemTime );
5797
+
5798
+ UnicodeString TimeString;
5799
+ TimeString.format (L" %2.2d:%2.2d:%2.2d" , systemTime.wHour , systemTime.wMinute , systemTime.wSecond );
5800
+ Int adjustedSystemTimeFontSize = TheGlobalLanguageData->adjustFontSize (m_systemTimePointSize);
5801
+ GameFont* systemTimeFont = TheWindowManager->winFindFont (m_systemTimeFont, adjustedSystemTimeFontSize, m_systemTimeBold);
5802
+ m_systemTimeString->setFont (systemTimeFont);
5803
+ m_systemTimeString->setText (TimeString);
5804
+
5805
+ m_systemTimeString->draw (m_systemTimePosition.x , m_systemTimePosition.y , m_systemTimeColor, m_systemTimeDropColor);
5806
+ }
5807
+
5808
+ void InGameUI::drawGameTime ()
5809
+ {
5810
+ if (!m_gameTimeString) {
5811
+ m_gameTimeString = TheDisplayStringManager->newDisplayString ();
5812
+ }
5813
+
5814
+ if (!m_gameTimeFrameString) {
5815
+ m_gameTimeFrameString = TheDisplayStringManager->newDisplayString ();
5816
+ }
5817
+
5818
+ Int currentFrame = TheGameLogic->getFrame ();
5819
+ Int gameSeconds = (Int) (SECONDS_PER_LOGICFRAME_REAL * currentFrame );
5820
+ Int hours = gameSeconds / 60 / 60 ;
5821
+ Int minutes = (gameSeconds / 60 ) % 60 ;
5822
+ Int seconds = gameSeconds % 60 ;
5823
+ Int frame = currentFrame % 30 ;
5824
+
5825
+ UnicodeString gameTimeString;
5826
+ gameTimeString.format (L" %2.2d:%2.2d:%2.2d" , hours, minutes, seconds);
5827
+ Int adjustedGameTimeFontSize = TheGlobalLanguageData->adjustFontSize (m_gameTimePointSize);
5828
+ GameFont* gameTimeFont = TheWindowManager->winFindFont (m_gameTimeFont, adjustedGameTimeFontSize, m_gameTimeBold);
5829
+ m_gameTimeString->setFont (gameTimeFont);
5830
+ m_gameTimeString->setText (gameTimeString);
5831
+
5832
+ UnicodeString gameTimeFrameString;
5833
+ gameTimeFrameString.format (L" .%2.2d" , frame);
5834
+ m_gameTimeFrameString->setFont (gameTimeFont);
5835
+ m_gameTimeFrameString->setText (gameTimeFrameString);
5836
+
5837
+ // TheSuperHackers @info this implicitly offsets the game timer from the right instead of left of the screen
5838
+ int horizontalTimerOffset = TheDisplay->getWidth () - (Int)m_gameTimePosition.x - m_gameTimeString->getWidth () - m_gameTimeFrameString->getWidth ();
5839
+ int horizontalFrameOffset = TheDisplay->getWidth () - (Int)m_gameTimePosition.x - m_gameTimeFrameString->getWidth ();
5840
+
5841
+ m_gameTimeString->draw (horizontalTimerOffset, m_gameTimePosition.y , m_gameTimeColor, m_gameTimeDropColor);
5842
+ m_gameTimeFrameString->draw (horizontalFrameOffset, m_gameTimePosition.y , GameMakeColor (180 ,180 ,180 ,255 ), m_gameTimeDropColor);
5843
+ }
0 commit comments