//-----------------------------------------------------------------------------
// Purpose: Recalculate the internal scoreboard data
//-----------------------------------------------------------------------------
void ScorePanel::Update()
{
	// Set the title
	if (gViewPort->m_szServerName)
	{
		char sz[MAX_SERVERNAME_LENGTH + 16];
		sprintf(sz, "  SCORES: %s", gViewPort->m_szServerName );
		m_pTitleLabel->setText(sz);
	}

	_tablePanel->m_iRows = 0;
	gViewPort->GetAllPlayersInfo();

	// Clear out sorts
	for (int i = 0; i < MAX_PLAYERS; i++)
	{
		_tablePanel->m_iSortedRows[i] = 0;
		_tablePanel->m_iIsATeam[i] = TEAM_NO;
		_tablePanel->m_bHasBeenSorted[i] = false;
	}

	// If it's not teamplay, sort all the players. Otherwise, sort the teams.
	if ( !gHUD.m_Teamplay )
		SortPlayers( 0, NULL );
	else
		SortTeams();
}
void CFolderJoin::UpdateGetAllData(HSURFACE hDestSurf)
{
	// Update the ping stuff...

	SortPlayers();
	HSTRING hStr = g_pLTClient->FormatString(IDS_STATUS_GETEXTRA, m_nNumServers, m_nNumServersListed);
	SetDummyStatusState(hStr, 1000);
	g_pLTClient->FreeString(hStr);

}
Exemple #3
0
//-----------------------------------------------------------------------------
// Purpose: Recalculate the internal scoreboard data
//-----------------------------------------------------------------------------
void ScorePanel::Update()
{
	// Set the title
	if (gViewPort->m_szServerName)
	{
		char sz[MAX_SERVERNAME_LENGTH + 16];
		sprintf(sz, "%s", gViewPort->m_szServerName );
		m_TitleLabel.setText(sz);
	}

	m_iRows = 0;
	gViewPort->GetAllPlayersInfo();

	
	//Hide or show the QUEUE and WINS labels.
	if ( g_iArenaMode == TRUE )
	{
		 m_HeaderLabels[2].setVisible ( true );
		 m_HeaderLabels[3].setVisible ( true );
	}
	else
	{
	     m_HeaderLabels[2].setVisible ( false );
		 m_HeaderLabels[3].setVisible ( false );
	}

	// Clear out sorts
	for (int i = 0; i < NUM_ROWS; i++)
	{
		m_iSortedRows[i] = 0;
		m_iIsATeam[i] = TEAM_NO;
	}
	for (int i = 0; i < MAX_PLAYERS; i++)
	{
		m_bHasBeenSorted[i] = false;
	}

	SortTeams();

	// If it's not teamplay, sort all the players. Otherwise, sort the teams.
//	if ( !gHUD.m_Teamplay )
		SortPlayers( 0, NULL );
//	else
		

	// set scrollbar range
	m_PlayerList.SetScrollRange(m_iRows);

	FillGrid();
}
Exemple #4
0
void ScorePanel::SortActivePlayers(char* inTeam, bool inSortByEntityIndex)
{
	for(int i = 1; i <= m_iNumTeams; i++)
	{
		if(!strcmp(g_TeamInfo[i].name, inTeam))
		{
			int best_team = i;
			
			// Put this team in the sorted list
			m_iSortedRows[ m_iRows ] = best_team;
			m_iIsATeam[ m_iRows ] = TEAM_YES;
			g_TeamInfo[best_team].already_drawn = TRUE;  // set the already_drawn to be TRUE, so this team won't get sorted again
			m_iRows++;
			
			// Now sort all the players on this team
			SortPlayers(0, g_TeamInfo[best_team].name, inSortByEntityIndex);
		}
	}
}
Exemple #5
0
//-----------------------------------------------------------------------------
// Purpose: Recalculate the internal scoreboard data
//-----------------------------------------------------------------------------
void ScorePanel::Update()
{
	// Set the title
	if (gViewPort->m_szServerName)
	{
		char sz[MAX_SERVERNAME_LENGTH + 16];
		sprintf(sz, "%s", gViewPort->m_szServerName );
		m_TitleLabel.setText(sz);
	}

	m_iRows = 0;
	gViewPort->GetAllPlayersInfo();

	// Clear out sorts
	// modified by jason
	for (int i = 0; i < MAX_PLAYERS; i++)
	{
		m_iSortedRows[i] = 0;
		m_iIsATeam[i] = TEAM_NO;
		m_bHasBeenSorted[i] = false;
	}

	// If it's not teamplay, sort all the players. Otherwise, sort the teams.
	if ( !gHUD.m_Teamplay )
		SortPlayers( 0, NULL );
	else
		SortTeams();

	// set scrollbar range
	m_PlayerList.SetScrollRange(m_iRows);

	FillGrid();

	if ( gViewPort->m_pSpectatorPanel->m_menuVisible )
	{
		 m_pCloseButton->setVisible ( true );
	}
	else 
	{
		 m_pCloseButton->setVisible ( false );
	}
}
//-----------------------------------------------------------------------------
// Purpose: Sort all the teams
//-----------------------------------------------------------------------------
void ScorePanel::SortTeams()
{
	// clear out team scores
	for ( int i = 1; i <= m_iNumTeams; i++ )
	{
		if ( !g_TeamInfo[i].scores_overriden )
			g_TeamInfo[i].frags = g_TeamInfo[i].deaths = 0;
		g_TeamInfo[i].ping = g_TeamInfo[i].packetloss = 0;
	}

	// recalc the team scores, then draw them
	for ( i = 1; i < MAX_PLAYERS; i++ )
	{
		if ( g_PlayerInfoList[i].name == NULL )
			continue; // empty player slot, skip

		if ( g_PlayerExtraInfo[i].teamname[0] == 0 )
			continue; // skip over players who are not in a team

		// find what team this player is in
		for ( int j = 1; j <= m_iNumTeams; j++ )
		{
			if ( !stricmp( g_PlayerExtraInfo[i].teamname, g_TeamInfo[j].name ) )
				break;
		}
		if ( j > m_iNumTeams )  // player is not in a team, skip to the next guy
			continue;

		if ( !g_TeamInfo[j].scores_overriden )
		{
			g_TeamInfo[j].frags += g_PlayerExtraInfo[i].frags;
			g_TeamInfo[j].deaths += g_PlayerExtraInfo[i].deaths;
		}

		g_TeamInfo[j].ping += g_PlayerInfoList[i].ping;
		g_TeamInfo[j].packetloss += g_PlayerInfoList[i].packetloss;

		if ( g_PlayerInfoList[i].thisplayer )
			g_TeamInfo[j].ownteam = TRUE;
		else
			g_TeamInfo[j].ownteam = FALSE;

		// Set the team's number (used for team colors)
		g_TeamInfo[j].teamnumber = g_PlayerExtraInfo[i].teamnumber;
	}

	// find team ping/packetloss averages
	for ( i = 1; i <= m_iNumTeams; i++ )
	{
		g_TeamInfo[i].already_drawn = FALSE;

		if ( g_TeamInfo[i].players > 0 )
		{
			g_TeamInfo[i].ping /= g_TeamInfo[i].players;  // use the average ping of all the players in the team as the teams ping
			g_TeamInfo[i].packetloss /= g_TeamInfo[i].players;  // use the average ping of all the players in the team as the teams ping
		}
	}

	// Draw the teams
	while ( 1 )
	{
		int highest_frags = -99999; int lowest_deaths = 99999;
		int best_team = 0;

		for ( i = 1; i <= m_iNumTeams; i++ )
		{
			if ( g_TeamInfo[i].players < 1 )
				continue;

			if ( !g_TeamInfo[i].already_drawn && g_TeamInfo[i].frags >= highest_frags )
			{
				if ( g_TeamInfo[i].frags > highest_frags || g_TeamInfo[i].deaths < lowest_deaths )
				{
					best_team = i;
					lowest_deaths = g_TeamInfo[i].deaths;
					highest_frags = g_TeamInfo[i].frags;
				}
			}
		}

		// draw the best team on the scoreboard
		if ( !best_team )
			break;

		// Put this team in the sorted list
		_tablePanel->m_iSortedRows[ _tablePanel->m_iRows ] = best_team;
		_tablePanel->m_iIsATeam[ _tablePanel->m_iRows ] = TEAM_YES;
		g_TeamInfo[best_team].already_drawn = TRUE;  // set the already_drawn to be TRUE, so this team won't get sorted again
		_tablePanel->m_iRows++;

		// Now sort all the players on this team
		SortPlayers( 0, g_TeamInfo[best_team].name );
	}

	// Now add all the spectators
	SortPlayers( TEAM_SPECTATORS, NULL );

	// Now add all the players who aren't in a team yet
	SortPlayers( TEAM_UNASSIGNED, NULL );
}
uint32 CFolderJoin::OnCommand(uint32 dwCommand, uint32 dwParam1, uint32 dwParam2)
{
	switch(dwCommand)
	{
	case CMD_SELECT_SERVER:
		{
			int nIndex = m_pServerList->GetSelectedItem();
            void* pGame = LTNULL;
			if (nIndex != CListCtrl::kNoSelection)
			{
				pGame = (void*)m_pServerList->GetControl(nIndex)->GetParam1();
			}

			if (pGame != GetCurGameServerHandle())
			{
				SetCurGameServerHandle(pGame);
				SetState(FSS_GETALLDATA);

			}
			UpdatePlayers(TRUE);


		} break;
	case CMD_REFRESH_SERVERS:
		{
			SetState(FSS_GETSERVICES);
			break;
		}

	case CMD_REPING_SERVERS:
		{
			//SetState(FSS_GETPINGS);
			break;
		}

	case CMD_VERSION_FILTER:
		{
			m_nVersionFilter = !m_nVersionFilter;
            m_pVersionFilter->UpdateData(LTFALSE);
			ForceNextUpdate();

		} break;

	case CMD_GAME_FILTER:
		{
			m_nGameFilter++;
			if (m_nGameFilter > NGT_FILTER_LAST)
				m_nGameFilter = 0;
            m_pGameFilter->UpdateData(LTFALSE);
			ForceNextUpdate();

		} break;
	case CMD_POP_FILTER:
		{
			m_nPopFilter++;
			if (m_nPopFilter > POP_FILTER_LAST)
				m_nPopFilter = 0;
            m_pPopFilter->UpdateData(LTFALSE);
			ForceNextUpdate();

		} break;
	case CMD_SORT_SERV_NAME:
		{
			SetServerSort(FSS_SORT_NAME);
			SortServers();
		} break;

	case CMD_SORT_SERV_PLAYERS:
		{
			SetServerSort(FSS_SORT_PLAYERS);
			SortServers();
		} break;
	case CMD_SORT_SERV_PING:
		{
			SetServerSort(FSS_SORT_PING);
			SortServers();
		} break;
	case CMD_SORT_SERV_GAME:
		{
			SetServerSort(FSS_SORT_GAME);
			SortServers();
		} break;
	case CMD_SORT_SERV_MAP:
		{
			SetServerSort(FSS_SORT_MAP);
			SortServers();
		} break;
	case CMD_SORT_PLYR_NAME:
		{
			SetPlayerSort(FSS_SORT_NAME);
			SortPlayers();
		} break;
	case CMD_SORT_PLYR_SCORE:
		{
			SetPlayerSort(FSS_SORT_FRAGS);
			SortPlayers();
		} break;
	case CMD_SORT_PLYR_PING:
		{
			SetPlayerSort(FSS_SORT_PING);
			SortPlayers();
		} break;
	case CMD_EDIT_PASS:
		{
			SetCapture(LTNULL);
			m_pPassEdit->UpdateData();
			RemoveFixedControl(m_pPassEdit);
			RemoveFixedControl(m_pPassLabel);
			RemoveFixedControl(m_pPassBack);
			m_bAskingForPassword = LTFALSE;
			ForceMouseUpdate();
			JoinCurGame(LTTRUE);
		} break;
	case CMD_JOIN:
		{
			CGameSpyServer* pGame = GetGameSpyClientMgr()->GetServerFromHandle(m_pCurServerHandle);
		    if (g_pGameClientShell->IsInWorld() && pGame)
		    {

				if (IsCurrentGame(pGame))
				{
					HLOCALOBJ hPlayerObj = g_pLTClient->GetClientObject();
					if (g_pGameClientShell->IsInWorld() && hPlayerObj)
					{
						g_pInterfaceMgr->ChangeState(GS_PLAYING);
					}
				}
				else
				{
					HSTRING hString = g_pLTClient->FormatString(IDS_ENDCURRENTGAME);
					g_pInterfaceMgr->ShowMessageBox(hString,LTMB_YESNO,JoinCallBack,this);
					g_pLTClient->FreeString(hString);
				}
		    }
		    else
		    {
				JoinCurGame();
		    }


		} break;

	default:
		return CBaseFolder::OnCommand(dwCommand,dwParam1,dwParam2);
	}
	return 1;
};