Beispiel #1
0
void Battle::FixColours()
{
    if ( !IsFounderMe() )return;
    std::vector<wxColour> &palette = GetFixColoursPalette( m_teams_sizes.size() + 1 );
    std::vector<int> palette_use( palette.size(), 0 );

    wxColour my_col = GetMe().BattleStatus().colour; // Never changes color of founder (me) :-)
    int my_diff = 0;
    int my_col_i = GetClosestFixColour( my_col, palette_use,my_diff );
    palette_use[my_col_i]++;
    std::set<int> parsed_teams;

    for ( user_map_t::size_type i = 0; i < GetNumUsers(); i++ )
    {
        User &user=GetUser(i);
        if ( &user == &GetMe() ) continue; // skip founder ( yourself )
        UserBattleStatus& status = user.BattleStatus();
        if ( status.spectator ) continue;
        if ( parsed_teams.find( status.team ) != parsed_teams.end() ) continue; // skip duplicates
        parsed_teams.insert( status.team );

        wxColour &user_col=status.colour;
        int user_col_i=GetClosestFixColour(user_col,palette_use, 60);
        palette_use[user_col_i]++;
				for ( user_map_t::size_type j = 0; j < GetNumUsers(); j++ )
				{
					User &usr=GetUser(j);
					if ( usr.BattleStatus().team == status.team )
					{
						 ForceColour( usr, palette[user_col_i]);
					}
				}
    }
}
Beispiel #2
0
int IBattle::GetClosestFixColour(const wxColour &col, const std::vector<int> &excludes, int difference) const
{
	std::vector<wxColour> palette = GetFixColoursPalette( m_teams_sizes.size() + 1 );
	int result=0;
	int t1=palette.size();
	int t2=excludes.size();
	wxLogMessage(_T("GetClosestFixColour %d %d"),t1,t2);
	for (size_t i=0; i<palette.size(); ++i) {
		if ((i>=excludes.size()) || (!excludes[i])) {
			if (AreColoursSimilar( palette[i],col, difference )) {
				return i;
			}
		}
	}
	return result;
}
Beispiel #3
0
wxColour IBattle::GetFreeColour( User * ) const
{
	typedef std::vector<wxColour>
	ColorVec;

	ColorVec current_used_colors;
	for ( user_map_t::size_type i = 0; i < GetNumUsers(); ++i ) {
		UserBattleStatus& bs = GetUser( i ).BattleStatus();
		current_used_colors.push_back( bs.colour );
	}

	int inc = 1;
	while ( true ) {
		ColorVec fixcolourspalette = GetFixColoursPalette( m_teams_sizes.size() + inc++ );

		ColorVec::iterator fixcolourspalette_new_end = std::unique( fixcolourspalette.begin(), fixcolourspalette.end(), AreColoursSimilarProxy( 20 ) );

		fixcolourspalette_new_end = std::remove_if( fixcolourspalette.begin(), fixcolourspalette.end(), DismissColor( current_used_colors ) );

		if ( fixcolourspalette_new_end != fixcolourspalette.begin() )
			return (*fixcolourspalette.begin());
	}
}
Beispiel #4
0
wxColour IBattle::GetFixColour(int i) const
{
	int size = m_teams_sizes.size();
	std::vector<wxColour> palette = GetFixColoursPalette( size );
	return palette[i];
}