void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time ) { int i, j, length, width; const char *pText; //unsigned char line[80]; unsigned char line[256]; pText = pMessage->pMessage; ASSERT(pText != NULL); // Count lines m_parms.lines = 1; m_parms.time = time; m_parms.pMessage = pMessage; length = 0; width = 0; m_parms.totalWidth = 0; while ( *pText ) { if ( *pText == '\n' ) { m_parms.lines++; if ( width > m_parms.totalWidth ) m_parms.totalWidth = width; width = 0; } else width += gHUD.m_scrinfo.charWidths[*pText]; pText++; length++; } m_parms.length = length; m_parms.totalHeight = (m_parms.lines * gHUD.m_scrinfo.iCharHeight); m_parms.y = YPosition( pMessage->y, m_parms.totalHeight ); pText = pMessage->pMessage; m_parms.charTime = 0; MessageScanStart(); for ( i = 0; i < m_parms.lines; i++ ) { m_parms.lineLength = 0; m_parms.width = 0; while ( *pText && *pText != '\n' ) { unsigned char c = *pText; line[m_parms.lineLength] = c; m_parms.width += gHUD.m_scrinfo.charWidths[c]; m_parms.lineLength++; pText++; } pText++; // Skip LF line[m_parms.lineLength] = 0; m_parms.x = XPosition( pMessage->x, m_parms.width, m_parms.totalWidth ); for ( j = 0; j < m_parms.lineLength; j++ ) { m_parms.text = line[j]; int next = m_parms.x + gHUD.m_scrinfo.charWidths[ m_parms.text ]; MessageScanNextChar(); if ( m_parms.x >= 0 && m_parms.y >= 0 && next <= ScreenWidth() ) TextMessageDrawChar( m_parms.x, m_parms.y, m_parms.text, m_parms.r, m_parms.g, m_parms.b ); m_parms.x = next; } m_parms.y += gHUD.m_scrinfo.iCharHeight; } }
int CHudMessage::Draw( float fTime ) { int i, drawn; client_textmessage_t *pMessage; drawn = 0; if ( m_gameTitleTime > 0 ) { float localTime = gHUD.m_flTime - m_gameTitleTime; float brightness; // Maybe timer isn't set yet if ( m_gameTitleTime > gHUD.m_flTime ) m_gameTitleTime = gHUD.m_flTime; if ( localTime > (m_pGameTitle->fadein + m_pGameTitle->holdtime + m_pGameTitle->fadeout) ) m_gameTitleTime = 0; else { brightness = FadeBlend( m_pGameTitle->fadein, m_pGameTitle->fadeout, m_pGameTitle->holdtime, localTime ); int halfWidth = gHUD.GetSpriteRect(m_HUD_title_half).right - gHUD.GetSpriteRect(m_HUD_title_half).left; int fullWidth = halfWidth + gHUD.GetSpriteRect(m_HUD_title_life).right - gHUD.GetSpriteRect(m_HUD_title_life).left; int fullHeight = gHUD.GetSpriteRect(m_HUD_title_half).bottom - gHUD.GetSpriteRect(m_HUD_title_half).top; int x = XPosition( m_pGameTitle->x, fullWidth, fullWidth ); int y = YPosition( m_pGameTitle->y, fullHeight ); SPR_Set( gHUD.GetSprite(m_HUD_title_half), brightness * m_pGameTitle->r1, brightness * m_pGameTitle->g1, brightness * m_pGameTitle->b1 ); SPR_DrawAdditive( 0, x, y, &gHUD.GetSpriteRect(m_HUD_title_half) ); SPR_Set( gHUD.GetSprite(m_HUD_title_life), brightness * m_pGameTitle->r1, brightness * m_pGameTitle->g1, brightness * m_pGameTitle->b1 ); SPR_DrawAdditive( 0, x + halfWidth, y, &gHUD.GetSpriteRect(m_HUD_title_life) ); drawn++; } } // Draw player id // if(this->mPlayerIDTime > 0) // { // float localTime = gHUD.m_flTime - this->mPlayerIDTime; // //float brightness; // // // Maybe timer isn't set yet // if ( this->mPlayerIDTime > gHUD.m_flTime ) // this->mPlayerIDTime = gHUD.m_flTime; // // if ( localTime > (this->mPlayerIDMessage.fadein + this->mPlayerIDMessage.holdtime + this->mPlayerIDMessage.fadeout) ) // { // this->mPlayerIDTime = 0; // this->mPlayerIDMessage.pName = NULL; // this->mPlayerIDMessage.pMessage = NULL; // } // else // { // drawn++; // } // } // Fixup level transitions for ( i = 0; i < maxHUDMessages; i++ ) { // Assume m_parms.time contains last time if ( m_pMessages[i] ) { pMessage = m_pMessages[i]; if ( m_startTime[i] > gHUD.m_flTime ) m_startTime[i] = gHUD.m_flTime + m_parms.time - m_startTime[i] + 0.2; // Server takes 0.2 seconds to spawn, adjust for this } } for ( i = 0; i < maxHUDMessages; i++ ) { client_textmessage_t* theMessage = this->m_pMessages[i]; if(theMessage) { if(this->DrawMessage(theMessage, this->m_startTime[i], fTime)) { drawn++; } else { // The message is over this->m_pMessages[i] = NULL; } } } if(this->DrawMessage(&this->mPlayerIDMessage, this->mPlayerIDTime, fTime)) { drawn++; } else { this->mPlayerIDMessage.pName = NULL; this->mPlayerIDMessage.pMessage = NULL; } // Remember the time -- to fix up level transitions m_parms.time = gHUD.m_flTime; // Don't call until we get another message if ( !drawn ) m_iFlags &= ~HUD_ACTIVE; return 1; }
int CHudMessage::Draw( float fTime ) { int i, drawn; client_textmessage_t *pMessage; float endTime; drawn = 0; if ( m_gameTitleTime > 0 ) { float localTime = gHUD.m_flTime - m_gameTitleTime; float brightness; // Maybe timer isn't set yet if ( m_gameTitleTime > gHUD.m_flTime ) m_gameTitleTime = gHUD.m_flTime; if ( localTime > (m_pGameTitle->fadein + m_pGameTitle->holdtime + m_pGameTitle->fadeout) ) m_gameTitleTime = 0; else { brightness = FadeBlend( m_pGameTitle->fadein, m_pGameTitle->fadeout, m_pGameTitle->holdtime, localTime ); int halfWidth = gHUD.GetSpriteRect(m_HUD_title_half).right - gHUD.GetSpriteRect(m_HUD_title_half).left; int fullWidth = halfWidth + gHUD.GetSpriteRect(m_HUD_title_life).right - gHUD.GetSpriteRect(m_HUD_title_life).left; int fullHeight = gHUD.GetSpriteRect(m_HUD_title_half).bottom - gHUD.GetSpriteRect(m_HUD_title_half).top; int x = XPosition( m_pGameTitle->x, fullWidth, fullWidth ); int y = YPosition( m_pGameTitle->y, fullHeight ); SPR_Set( gHUD.GetSprite(m_HUD_title_half), brightness * m_pGameTitle->r1, brightness * m_pGameTitle->g1, brightness * m_pGameTitle->b1 ); SPR_DrawAdditive( 0, x, y, &gHUD.GetSpriteRect(m_HUD_title_half) ); SPR_Set( gHUD.GetSprite(m_HUD_title_life), brightness * m_pGameTitle->r1, brightness * m_pGameTitle->g1, brightness * m_pGameTitle->b1 ); SPR_DrawAdditive( 0, x + halfWidth, y, &gHUD.GetSpriteRect(m_HUD_title_life) ); drawn = 1; } } // Fixup level transitions for ( i = 0; i < maxHUDMessages; i++ ) { // Assume m_parms.time contains last time if ( m_pMessages[i] ) { pMessage = m_pMessages[i]; if ( m_startTime[i] > gHUD.m_flTime ) m_startTime[i] = gHUD.m_flTime + m_parms.time - m_startTime[i] + 0.2; // Server takes 0.2 seconds to spawn, adjust for this } } for ( i = 0; i < maxHUDMessages; i++ ) { if ( m_pMessages[i] ) { pMessage = m_pMessages[i]; // This is when the message is over switch( pMessage->effect ) { case 0: case 1: endTime = m_startTime[i] + pMessage->fadein + pMessage->fadeout + pMessage->holdtime; break; // Fade in is per character in scanning messages case 2: endTime = m_startTime[i] + (pMessage->fadein * strlen( pMessage->pMessage )) + pMessage->fadeout + pMessage->holdtime; break; } if ( fTime <= endTime ) { float messageTime = fTime - m_startTime[i]; // Draw the message // effect 0 is fade in/fade out // effect 1 is flickery credits // effect 2 is write out (training room) MessageDrawScan( pMessage, messageTime ); drawn++; } else { // The message is over m_pMessages[i] = NULL; } } } // Remember the time -- to fix up level transitions m_parms.time = gHUD.m_flTime; // Don't call until we get another message if ( !drawn ) m_iFlags &= ~HUD_ACTIVE; return 1; }