#define COMMON_RADAR_H aaa
//------------------------------------------------------------------------------------------
//  @brief
//        здесь сделана вся обработка радара
//        

//  @ingroup
    
//  2004____ created. Zmanovsky Peter.
//  2005Jul25 *modified for Theseus.
//  (C) 2005    Sigma-Team
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
#define false				0
#define true				1
#define bool				int



//------------------------------------------------------------------------------------------
//длительность полного цикла работы радара
#define RADAR_FULL_TIME         5000
//количество отрисовок за полный цикл
#define RADAR_CADR_NUM          10
//дальность действия радара
#define RADAR_SEARCH_SIZE       1500
//величина радара в пикселях по оси X (половинчатая)
#define RADAR_SIZE_X            30
//величина радара в пикселях по оси Y (половинчатая)
#define RADAR_SIZE_Y            30
//высота рождения точек радара
#define RADAR_POINT_TOPZ        510
//вид точек радара
#define RADAR_POINT_VID         818
#define RADAR_POINTBIG_VID      819
//гаммы, в кот. красятся точки на радаре для юнитов различных армий
static int GammaByArmy[] = { 0x7F0E7F, 0x0E7F7F, 0x0E0E7F, 0x7F7F0E, 0, 0, 0, 0 };


//------------------------------------------------------------------------------------------
F817_00( int iRadarSprite )
{
    if( !Flagman(0) )
        return;

	iff( 1 )
	{
		int i;
		for( i = 0; i < 4; i++ )
		{
			SetVidData( RADAR_POINT_VID, VID_GAMMA+i, GammaByArmy[i] );
			SetVidData( RADAR_POINTBIG_VID, VID_GAMMA+i, GammaByArmy[i] );
		}
	}

    //получим текущий кадр
    static int CurCadr = -1;
    CurCadr++;
    if( CurCadr >= RADAR_CADR_NUM )
    	CurCadr = 0;
    //
    int DistMin, DistMax;
    DistMin = CurCadr * RADAR_SEARCH_SIZE / RADAR_CADR_NUM;
    DistMax = ( CurCadr + 1 ) * RADAR_SEARCH_SIZE / RADAR_CADR_NUM;

    //search for monsters and create points on radar if needed
    int monster, Army, HeroX, HeroY, Dist, MonsterX, MonsterY, DeltaX, DeltaY, Z, RadarX, RadarY, Vid, buf;
    for( monster = FirstUnit( U_UNIT ); monster; monster = NextUnit() )
    {
        Army = Action( monster, ACT_GET_ARMY );
        Vid = GetUnitVid(monster);
        if( Vid == 179 )
        	Army = 1;
        //
        if( (Army!=2)&&(Vid!=908)&&(Vid!=1966)&&(Vid!=290)&&(Vid!=450)&&(Vid!=790)&&
            ( Vid<800 || Vid>814 )&&(Vid!=901)&&(Vid!=909)&&(Vid!=1000)&&(Vid!=1226)&&(Vid!=1449)
            &&(Vid!=1450)&&(Vid!=1984))
        {
            HeroX = GetX( Flagman(0) );
            HeroY = GetY( Flagman(0) );
            Dist = SizeTo( monster, HeroX, HeroY );
			//
            if( Dist >= DistMin && Dist < DistMax )
            {
                MonsterX = GetX( monster );
                MonsterY = GetY( monster );

                //get delta from the center of the radar point
                DeltaX = (MonsterX - HeroX) * RADAR_SIZE_X / RADAR_SEARCH_SIZE;
                DeltaY = (MonsterY - HeroY) * RADAR_SIZE_Y / RADAR_SEARCH_SIZE;
                Z = RADAR_POINT_TOPZ;

                //get center of radar sprite
                RadarX = ToScreenX( GetX( iRadarSprite ) );
                RadarY = ToScreenY( GetY( iRadarSprite ), GetZ( iRadarSprite ) );

                //create point and set gamma
                buf = RADAR_POINT_VID;
                if( Vid == 560 || Vid == 562 || Vid == 564 || Vid == 566 ||
                    Vid == 179 || monster == Flagman(0) )
                {
                	buf = RADAR_POINTBIG_VID;
				}
				if(Vid == 179)
					Army = 2;
                //
                int spr;
                spr = CreateSprite( buf, RadarX + DeltaX, RadarY + DeltaY + Z, Z );
                Action( spr, ACT_SET_ARMY, Army );
            }
        }
    }
}

