
#ifndef NEW_SURVIVE
	#include "maps\survive_birth.lgc"
#endif


#ifndef MONSTERS_H
	#include "maps\monsters.lgc"
#endif

static int PrevBossTime = 0;
  

InitSurviveGame()
{
  int i;

//  SetScrollType(SCROLL_FLAGMAN_IN_CENTER);

  // выставляется для всех VID с weapon==31 LIFETIME
  PlayerItem[7]=0;//количество жизней у игрока в сурвайве 0
  SetVidData(302,VID_LIFETIME,20000);
  PrevBossTime = GetTime();

  for( i = 0; i < sizeof(MonstersVid)/4; i++ )
  {
    SetVidData(MonstersVid[i],VID_DETECTRANGE,2000);
//    SetVidData(MonstersVid[i],VID_SPEED,(GetVidData(MonstersVid[i],VID_SPEED)*7)/10);
  }
}

SurviveGameTact()
{
  static int prev_time=0, prev_shift=-1;
  static int arrowed_unit=0;
  int        shift,i,x,y,delta,dir,unit;
  if ( (GetTime()-prev_time)>100 )
  {
    prev_time = GetTime();
    shift = ((GetTime()-StartGameTime)/30000)*MONST_VID_CNT;
    if( shift > 39*MONST_VID_CNT )
      shift = 39*MONST_VID_CNT;
    if( shift!=prev_shift )
    {
      prev_shift = shift;
      for( i = 0; i < sizeof(MonstersVid)/4; i++ )
        if ( !IsBossVid( MonstersVid[i] ) )//на боссов не действовать
        {
          delta = (GetVidData(MonstersVid[i],VID_SPEED)*MonsterSpeedPercent[shift/MONST_VID_CNT])/100;
          SetVidData(MonstersVid[i],VID_SPEED,GetVidData(MonstersVid[i],VID_SPEED) + delta);
          SetVidData(MonstersVid[i],VID_HP_COEFF1,MonsterHpPercent[shift/MONST_VID_CNT]);
        }
    }
    for( i = 0; i < MONST_VID_CNT; i++ )
    {
      if( MonsterBirthP[shift+i] )
      {
        if ( !Random( 600/MonsterBirthP[shift+i] - 1 ) ||
            (MonsterBirthP[shift+i]==1 && ((GetTime()-StartGameTime)%30000) > 15000) )//если в этой минуте должен был родится 1 монстр и не родился за 55 секунд то рожаем
        {
          do
          {
            x=Random(3);
            if     ( x==0 ) { x=-50;                y=Random(MapSizeY()); }
            else if( x==1 ) { x=MapSizeX()+50;      y=Random(MapSizeY()); }
            else if( x==2 ) { x=Random(MapSizeX()); y=-50;                }
            else            { x=Random(MapSizeX()); y=MapSizeY()+50;      }
          } while( CanPlace(MonstersVid[i],x,y,0) );
//          Action( CreateSprite((4+i/3)*10+(i%3)*3,x,y,0), ACT_ATTACK,Flagman(0),0);
          unit = CreateSprite(MonstersVid[i],x,y,0);
          Action( unit, ACT_ATTACK,Flagman(0),0);
          if( IsBossVid( MonstersVid[i] ) )
          {
            arrowed_unit = unit;
            PrevBossTime = GetTime();
          }
          if( MonsterBirthP[shift+i] == 1 )
            MonsterBirthP[shift+i] = 0;
        }
      }
    }
    // вывести полоску времени оставшегося до появления босса
    giSurviveBeforeBoss = 250;
    for( i = shift; i < 39*MONST_VID_CNT; i += MONST_VID_CNT )
        if ( MonsterBirthP[i + 0] == 1 || MonsterBirthP[i + 1] == 1 || MonsterBirthP[i + 2] == 1 || MonsterBirthP[i + 3] == 1
            || MonsterBirthP[i + 4] == 1 || MonsterBirthP[i + 5] == 1 || MonsterBirthP[i + 6] == 1 )
        {// в этой строке времени будет рожаться босс
            giSurviveBeforeBoss = (250 * (GetTime() - PrevBossTime)) / (i / MONST_VID_CNT * 30000 - PrevBossTime + 15000);
            if ( giSurviveBeforeBoss > 250 )
                giSurviveBeforeBoss = 250;
            break;
        }

    if( Flagman(0) )
    {
      if( arrowed_unit )
      {
        if( !ArrowHint )
          ArrowHint = CreateSprite(786,GetX(Flagman(0)),GetY(Flagman(0)) + 10,GetZ(Flagman(0)) + 10);
      }
      else if( ArrowHint )
      {
        Destroy(ArrowHint);
        ArrowHint = 0;
      }
    }
  }
  if( ArrowHint )
    if( arrowed_unit )
    {
      dir = DirectionTo(Flagman(0),GetX(arrowed_unit),GetY(arrowed_unit));
      Action(ArrowHint,ACT_CHANGE_DIRECTION,dir);
//        Action(ArrowHint,ACT_CHANGE_COOR,GetX(Flagman(0)),GetY(Flagman(0)),GetZ(Flagman(0))+11);
      Action(ArrowHint,ACT_CHANGE_COOR,GetX(Flagman(0))+Sin(dir)/25,GetY(Flagman(0))-Cos(dir)/25 + 10,GetZ(Flagman(0)) + 10);
    }
}
