#define  COMMON_MAP_H aaa
//----------------------------------------------------------------------------
//  @brief
//        карта
//        

//  @ingroup
    
//  2006Nov14 created. wit, zm
//  (C) 2006    Sigma-Team
//-----------------------------------------------------------------------------

#ifndef COMMON_DEFS_H
    #include "maps\common_defs.lgc"
#endif

int gbMapShown = 0;
int gbMapImmediateExit = 1;// если 1 то выбора не дается сразу грузится др. карта
bool gbMapMainMenu = false;

//------------------------------------------------------------------------------------------
GetMaxLevelEx(bool bCurGame, bool bCheckDemoMaxLev)
{
	int ret = 1;
	if(bCurGame)
		ret = GetValI("SaveLevel0", 1);
	else
		ret = GetValI("MaxLevel", 1);
	//
	if(ret > MAX_LEVEL_NUM && (bCheckDemoMaxLev || !DEMO_VERSION))
		ret = MAX_LEVEL_NUM;
	return ret;
}


//------------------------------------------------------------------------------------------
SetMaxLevelTry(int iNewMaxLev)
{
	int buf = GetValI("SaveLevel0", 1);
	if(iNewMaxLev > buf)
		SetValI("SaveLevel0", iNewMaxLev);
	//
	buf = GetValI("MaxLevel", 0);
	if(iNewMaxLev > buf)
		SetValI("MaxLevel", iNewMaxLev);
	//
	SetValI("GameIsNew", 0);
}


//------------------------------------------------------------------------------------------
RefreshMapTip()
{
	string str;
	//
	//по умолчанию показываем из level_00
	int levNum = -1;//(GetMaxLevelEx(..)-1)*100;
	//
	if(MenuNVidUnderCursor()==731)
	{
		int sp = Call_v(EXT_GetSprUnderCur);
		if(sp)
		{
			if(GetDirection(sp) >= GetMaxLevelEx(false, true))
				levNum = -1;
			else
				levNum = GetDirection(sp)*100;
		}
	}
	//
	int size = Call_i(EXT_GetItemsCnt, levNum);
	//
	int spr = MenuFind(3);
	if(spr)
	{
		str = "";
		if(size > 0)
			str = Call_ii(EXT_GetText, levNum, 0);
		Action(spr, ACT_SET_TEXT, &str);
	}
	//
	spr = MenuFind(4);
	if(spr)
	{
		str = "";
		if(size > 1)
			str = Call_ii(EXT_GetText, levNum, 1);
		Action(spr, ACT_SET_TEXT, &str);
	}
}


//------------------------------------------------------------------------------------------
int g_iCurLevHighlight = -1;
int g_aSpr737[20];


//------------------------------------------------------------------------------------------
MapCurLevHighlight2(bool bShowMaxLev)
{
	int level_number = -1;
	int iMaxLev = GetMaxLevelEx(!gbMapMainMenu || gbMapImmediateExit, true)-1;
	if(bShowMaxLev)
		level_number = iMaxLev;
	else
	{
		int spr = Call_v(EXT_GetSprUnderCur);
		if(spr && GetUnitVid(spr) == 731)
		{
			int dir = GetDirection(spr);
			if(dir >= 0 && dir <= iMaxLev)
				level_number = dir;
		}
	}
	//
	int i;
	for(i = 0; i < 20; i++)
	{
		if(g_aSpr737[i])
		{
			if ( GetDirection(g_aSpr737[i]) <= iMaxLev )
			{
				if(GetAnimation(g_aSpr737[i]) != ANI_MENUSELECTDOWN)
					Action(g_aSpr737[i], ANI_MENUSTANDUP);
			}
			else
				Action(g_aSpr737[i], ANI_MENUSTAND);
		}
	}
//	//
//	if(g_iCurLevHighlight == level_number)
//		return;
//	g_iCurLevHighlight = level_number;
	//
	static int PrevSpr = 0;
	if(PrevSpr)
		Action(PrevSpr, ACT_SET_INVISIBLE, 1);
	//
	if(level_number < 0 || level_number >= 20)
		return;
	//
	int spr = g_aSpr737[level_number];
	if(spr)
	{
		if(GetAnimation(spr) != ANI_MENUSELECTDOWN)
			Action(spr, ANI_MENUSELECTDOWN);
	}
	//
	spr = MenuFind(741, level_number);
	if(spr)
		Action(spr, ACT_SET_INVISIBLE, 0);
	PrevSpr = spr;
}


//------------------------------------------------------------------------------------------
ShowMap(bool bMainMenu)
{
	int i, level_number, spr;
	//
	MenuRelease();
	Pause2(1);
	//
	gbMapShown = 1;
	gbMapMainMenu = bMainMenu;
	MenuLoad("maps\\map.men");
	if(bMainMenu && !gbMapImmediateExit)
	{
		MenuLoad("maps\\map_new.men");
		RefreshMapTip();
	}
	g_iCurLevHighlight = -1;
	//
	level_number = GetMaxLevelEx(!bMainMenu || gbMapImmediateExit, true);
	//Log("level_number = " + itoa(level_number));
	//
	for(i = 0; i < 20; i++)
		g_aSpr737[i] = 0;
	for( spr = FirstSprite(); spr ;spr = NextSprite() )
	{
		//*zm070208 чтобы было всем смешно будем менять щас 737-ой vid на 731-ый
		//+еще анимации естественно все поменялись. так ведь смешнее!
		//арбуз, ребята, арбуз

		/*if ( GetUnitVid(spr) == 731 )
		{
			if ( GetDirection(spr) < level_number )
				Action(spr, ANI_MENUSTANDUP);
		}
		else */if ( GetUnitVid(spr) == 732 )
		{
			if ( (GetDirection(spr)/4 + 1) < level_number )
				Action(spr, ANI_MENUSTANDUP);
		}
		else if ( GetUnitVid(spr) == 731 )
		{
			int dir = GetDirection(spr);
			if(dir < 20 && dir >= 0)
				g_aSpr737[dir] = spr;
		}
		else if ( GetUnitVid(spr) == 740 )
		{
			int dir = GetDirection(spr);
			int needDir = -1;
			if(level_number >= 2)
				needDir = Call_ii(EXT_GetAbsDir, 740, level_number-2);
			//
			if(dir <= needDir)
				Action(spr, ANI_STAND_OPEN);
		}
		else if ( GetUnitVid(spr) == 741 )
			Action(spr, ACT_SET_INVISIBLE, 1);
	}
	//
	MapCurLevHighlight2(gbMapImmediateExit);
	//
	if(!gbMapImmediateExit)
		SetCursor(CURSOR_NORMAL);
}


//------------------------------------------------------------------------------------------
HideMap()
{
	gbMapShown = 0;
	MenuRelease("maps\\map.men");
	MenuRelease("maps\\map_new.men");
	Pause2(0);
}


//------------------------------------------------------------------------------------------
MapTact()
{
    if( !gbMapShown )
        return 0;
    //
	MapCurLevHighlight2(gbMapImmediateExit);
	//
    if(GetKey() == VK_ESCAPE ||
		MenuLClick() && MenuNVidUnderCursor()==739)
	{
        return 1;
	}
	//
    if ( gbMapImmediateExit || (MenuLClick() && MenuNVidUnderCursor()==704 && ToScreenX(GetX(MenuLClick())) > ScreenX()/2) )
	{
		//кнопка continue
		Pause2(0);
		int levNum = GetMaxLevelEx(true, false);
		MapCurLevHighlight2(true);
		bPlayVehiMove = false;
		StopSFX(-1);
		if(levNum > MAX_LEVEL_NUM)
		{
			if(!DEMO_VERSION)
				Load("maps\\mainmenu.map");
			else
			{
				SetGlobValI("SlideFromMainMenu",0);
				Load("maps\\slide.map");
			}
		}
		else
			Load("maps\\level_0" + itoa(levNum) + ".map");
		MenuRelease("maps\\map_new.men");
	}
	//
	if(MenuLClick() && MenuNVidUnderCursor()==731)
	{
		int dir;
		dir = GetDirection(MenuLClick())+1;
		if(dir <= GetMaxLevelEx(!gbMapMainMenu, true))
		{
			Pause2(0);
			MapCurLevHighlight2(false);
			Load("maps\\level_0" + itoa(dir) + ".map");
			MenuRelease("maps\\map_new.men");
		}
	}
	RefreshMapTip();
	//
    return 0;
}

