|
|
@ -28,7 +28,7 @@ |
|
|
|
|
|
|
|
|
|
|
|
DECLARE_MESSAGE( m_MOTD, MOTD ) |
|
|
|
DECLARE_MESSAGE( m_MOTD, MOTD ) |
|
|
|
|
|
|
|
|
|
|
|
int CHudMOTD :: Init( void ) |
|
|
|
int CHudMOTD::Init( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
gHUD.AddHudElem( this ); |
|
|
|
gHUD.AddHudElem( this ); |
|
|
|
|
|
|
|
|
|
|
@ -42,13 +42,13 @@ int CHudMOTD :: Init( void ) |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int CHudMOTD :: VidInit( void ) |
|
|
|
int CHudMOTD::VidInit( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Load sprites here
|
|
|
|
// Load sprites here
|
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void CHudMOTD :: Reset( void ) |
|
|
|
void CHudMOTD::Reset( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_iFlags &= ~HUD_ACTIVE; // start out inactive
|
|
|
|
m_iFlags &= ~HUD_ACTIVE; // start out inactive
|
|
|
|
m_szMOTD[0] = 0; |
|
|
|
m_szMOTD[0] = 0; |
|
|
@ -60,7 +60,7 @@ void CHudMOTD :: Reset( void ) |
|
|
|
#define ROW_GAP 13 |
|
|
|
#define ROW_GAP 13 |
|
|
|
#define ROW_RANGE_MIN 30 |
|
|
|
#define ROW_RANGE_MIN 30 |
|
|
|
#define ROW_RANGE_MAX ( ScreenHeight - 100 ) |
|
|
|
#define ROW_RANGE_MAX ( ScreenHeight - 100 ) |
|
|
|
int CHudMOTD :: Draw( float fTime ) |
|
|
|
int CHudMOTD::Draw( float fTime ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
gHUD.m_iNoConsolePrint &= ~( 1 << 1 ); |
|
|
|
gHUD.m_iNoConsolePrint &= ~( 1 << 1 ); |
|
|
|
if( !m_bShow ) |
|
|
|
if( !m_bShow ) |
|
|
@ -68,60 +68,61 @@ int CHudMOTD :: Draw( float fTime ) |
|
|
|
gHUD.m_iNoConsolePrint |= 1 << 1; |
|
|
|
gHUD.m_iNoConsolePrint |= 1 << 1; |
|
|
|
bool bScroll; |
|
|
|
bool bScroll; |
|
|
|
// find the top of where the MOTD should be drawn, so the whole thing is centered in the screen
|
|
|
|
// find the top of where the MOTD should be drawn, so the whole thing is centered in the screen
|
|
|
|
int ypos = (ScreenHeight - LINE_HEIGHT * m_iLines)/2; // shift it up slightly
|
|
|
|
int ypos = ( ScreenHeight - LINE_HEIGHT * m_iLines ) / 2; // shift it up slightly
|
|
|
|
char *ch = m_szMOTD; |
|
|
|
char *ch = m_szMOTD; |
|
|
|
int xpos = (ScreenWidth - gHUD.m_scrinfo.charWidths[ 'M' ] * m_iMaxLength) / 2; |
|
|
|
int xpos = ( ScreenWidth - gHUD.m_scrinfo.charWidths['M'] * m_iMaxLength ) / 2; |
|
|
|
if( xpos < 30 ) xpos = 30; |
|
|
|
if( xpos < 30 ) |
|
|
|
int xmax = xpos + gHUD.m_scrinfo.charWidths[ 'M' ] * m_iMaxLength; |
|
|
|
xpos = 30; |
|
|
|
|
|
|
|
int xmax = xpos + gHUD.m_scrinfo.charWidths['M'] * m_iMaxLength; |
|
|
|
int height = LINE_HEIGHT * m_iLines; |
|
|
|
int height = LINE_HEIGHT * m_iLines; |
|
|
|
int ypos_r=ypos; |
|
|
|
int ypos_r=ypos; |
|
|
|
if( height > ROW_RANGE_MAX ) |
|
|
|
if( height > ROW_RANGE_MAX ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ypos = ROW_RANGE_MIN + 7 + scroll; |
|
|
|
ypos = ROW_RANGE_MIN + 7 + scroll; |
|
|
|
if( ypos > ROW_RANGE_MIN + 4 ) |
|
|
|
if( ypos > ROW_RANGE_MIN + 4 ) |
|
|
|
scroll-= (ypos - ( ROW_RANGE_MIN + 4))/3.0; |
|
|
|
scroll-= ( ypos - ( ROW_RANGE_MIN + 4 ) ) / 3.0; |
|
|
|
if( ypos + height < ROW_RANGE_MAX ) |
|
|
|
if( ypos + height < ROW_RANGE_MAX ) |
|
|
|
scroll+= (ROW_RANGE_MAX - (ypos + height))/ 3.0; |
|
|
|
scroll+= ( ROW_RANGE_MAX - ( ypos + height ) ) / 3.0; |
|
|
|
ypos_r = ROW_RANGE_MIN; |
|
|
|
ypos_r = ROW_RANGE_MIN; |
|
|
|
height = ROW_RANGE_MAX; |
|
|
|
height = ROW_RANGE_MAX; |
|
|
|
} |
|
|
|
} |
|
|
|
int ymax = ypos + height; |
|
|
|
int ymax = ypos + height; |
|
|
|
if( xmax > ScreenWidth - 30 ) xmax = ScreenWidth - 30; |
|
|
|
if( xmax > ScreenWidth - 30 ) xmax = ScreenWidth - 30; |
|
|
|
gHUD.DrawDarkRectangle(xpos-5, ypos_r - 5, xmax - xpos+10, height + 10); |
|
|
|
gHUD.DrawDarkRectangle( xpos - 5, ypos_r - 5, xmax - xpos + 10, height + 10 ); |
|
|
|
while ( *ch ) |
|
|
|
while( *ch ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
char *next_line; |
|
|
|
char *next_line; |
|
|
|
int line_length = 0; // count the length of the current line
|
|
|
|
int line_length = 0; // count the length of the current line
|
|
|
|
for ( next_line = ch; *next_line != '\n' && *next_line != 0; next_line++ ) |
|
|
|
for( next_line = ch; *next_line != '\n' && *next_line != 0; next_line++ ) |
|
|
|
line_length += gHUD.m_scrinfo.charWidths[ *next_line ]; |
|
|
|
line_length += gHUD.m_scrinfo.charWidths[*next_line]; |
|
|
|
char *top = next_line; |
|
|
|
char *top = next_line; |
|
|
|
if ( *top == '\n' ) |
|
|
|
if( *top == '\n' ) |
|
|
|
*top = 0; |
|
|
|
*top = 0; |
|
|
|
else |
|
|
|
else |
|
|
|
top = NULL; |
|
|
|
top = NULL; |
|
|
|
|
|
|
|
|
|
|
|
// find where to start drawing the line
|
|
|
|
// find where to start drawing the line
|
|
|
|
if( (ypos > ROW_RANGE_MIN) && (ypos + LINE_HEIGHT <= ypos_r + height) ) |
|
|
|
if( ( ypos > ROW_RANGE_MIN ) && ( ypos + LINE_HEIGHT <= ypos_r + height ) ) |
|
|
|
gHUD.DrawHudString( xpos, ypos, xmax, ch, 255, 180, 0 ); |
|
|
|
gHUD.DrawHudString( xpos, ypos, xmax, ch, 255, 180, 0 ); |
|
|
|
|
|
|
|
|
|
|
|
ypos += LINE_HEIGHT; |
|
|
|
ypos += LINE_HEIGHT; |
|
|
|
|
|
|
|
|
|
|
|
if ( top ) // restore
|
|
|
|
if( top ) // restore
|
|
|
|
*top = '\n'; |
|
|
|
*top = '\n'; |
|
|
|
ch = next_line; |
|
|
|
ch = next_line; |
|
|
|
if ( *ch == '\n' ) |
|
|
|
if( *ch == '\n' ) |
|
|
|
ch++; |
|
|
|
ch++; |
|
|
|
|
|
|
|
|
|
|
|
if ( ypos > (ScreenHeight - 20) ) |
|
|
|
if( ypos > ( ScreenHeight - 20 ) ) |
|
|
|
break; // don't let it draw too low
|
|
|
|
break; // don't let it draw too low
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int CHudMOTD :: MsgFunc_MOTD( const char *pszName, int iSize, void *pbuf ) |
|
|
|
int CHudMOTD::MsgFunc_MOTD( const char *pszName, int iSize, void *pbuf ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( m_iFlags & HUD_ACTIVE ) |
|
|
|
if( m_iFlags & HUD_ACTIVE ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Reset(); // clear the current MOTD in prep for this one
|
|
|
|
Reset(); // clear the current MOTD in prep for this one
|
|
|
|
} |
|
|
|
} |
|
|
@ -131,17 +132,16 @@ int CHudMOTD :: MsgFunc_MOTD( const char *pszName, int iSize, void *pbuf ) |
|
|
|
int is_finished = READ_BYTE(); |
|
|
|
int is_finished = READ_BYTE(); |
|
|
|
strncat( m_szMOTD, READ_STRING(), sizeof(m_szMOTD) ); |
|
|
|
strncat( m_szMOTD, READ_STRING(), sizeof(m_szMOTD) ); |
|
|
|
|
|
|
|
|
|
|
|
if ( is_finished ) |
|
|
|
if( is_finished ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int length = 0; |
|
|
|
int length = 0; |
|
|
|
|
|
|
|
|
|
|
|
m_iMaxLength = 0; |
|
|
|
m_iMaxLength = 0; |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for( char *sz = m_szMOTD; *sz != 0; sz++ ) // count the number of lines in the MOTD
|
|
|
|
for ( char *sz = m_szMOTD; *sz != 0; sz++ ) // count the number of lines in the MOTD
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( *sz == '\n' ) |
|
|
|
if( *sz == '\n' ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_iLines++; |
|
|
|
m_iLines++; |
|
|
|
if( length > m_iMaxLength ) |
|
|
|
if( length > m_iMaxLength ) |
|
|
|