//==========================================================================================
//
//	caha_tavern_b2.gm
//
//	Who	When		What
//------------------------------------------------------------------------------------------
//	MickyP	6 Febuary 2011	Initial Script
//
//==========================================================================================
//

global Map =
{

	BUILD_1st_Floor_ladder_Built = function( trigger )
	{
		Util.MapDebugPrint( "BUILD_1st_Floor_ladder_Built" );
	},

	BUILD_3rd_Floor_ladder_Built = function( trigger )
	{
		Util.MapDebugPrint( "BUILD_3rd_Floor_ladder_Built" );
	},

	BUILD_4th_Floor_ladder_Built = function( trigger )
	{
		Util.MapDebugPrint( "BUILD_4th_Floor_ladder_Built" );
	},

	Stairs_Wall_Built = function( trigger )
	{
		Util.MapDebugPrint( "Stairs_Wall_Built" );
	},

	Stairs_Wall_1_Built = function( trigger )
	{
		Util.MapDebugPrint( "Stairs_Wall_1_Built" );
	},

	ladder_Fence_Built = function( trigger )
	{
		Util.MapDebugPrint( "ladder_Fence_Built" );
	},

	PLANT_1st_Floor_ladder_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "1st_Floor_ladder_Destroyed" );
	},

	PLANT_3rd_Floor_ladder_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "3rd_Floor_ladder_Destroyed" );
	},

	PLANT_4th_Floor_ladder_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "4th_Floor_ladder_Destroyed" );
	},

	Cellar_Wall_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_Fake.*" );
		Map.WallTraceLineThreadId = thread(Map.WallTraceLineThread);
		Util.MapDebugPrint( "Cellar_Wall_Destroyed" );
	},

	Security_Power_Generator_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "Security_Power_Generator_Destroyed" );
	},

	Security_Power_Generator_B_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "Security_Power_Generator_B_Destroyed" );
	},

	Stairs_Wall_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "Stairs_Wall_Destroyed" );
	},

	Stairs_Wall_1_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "Stairs_Wall_1_Destroyed" );
	},

	ladder_Fence_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "ladder_Fence_Destroyed" );
	},

	Spy_Lists_Taken = function( trigger )
	{
		Util.MapDebugPrint( "Spy_Lists_Taken" );
	},

	Spy_Lists_Returned = function( trigger )
	{
		Util.MapDebugPrint( "Spy_Lists_Returned" );
	},

	Spy_Lists_Secured = function( trigger )
	{
		Util.MapDebugPrint( "Spy_Lists_Secured" );
	},

	floor1_Axis_Captured = function( trigger )
	{
		Util.MapDebugPrint( "floor1_Axis_Captured" );
	},

	floor1_Allies_Captured = function( trigger )
	{
		Util.MapDebugPrint( "floor1_Allies_Captured" );
	},

	floor2_Axis_Captured = function( trigger )
	{
		Util.MapDebugPrint( "floor2_Axis_Captured" );
	},

	floor2_Allies_Captured = function( trigger )
	{
		Util.MapDebugPrint( "floor2_Allies_Captured" );
	},

	floor3_Axis_Captured = function( trigger )
	{
		Util.MapDebugPrint( "floor3_Axis_Captured" );
	},

	floor3_Allies_Captured = function( trigger )
	{
		Util.MapDebugPrint( "floor3_Allies_Captured" );
	},

	floor4_Axis_Captured = function( trigger )
	{
		Util.MapDebugPrint( "floor4_Axis_Captured" );
	},

	floor4_Allies_Captured = function( trigger )
	{
		Util.MapDebugPrint( "floor4_Allies_Captured" );
	},

	Security_Power_disabled = function( trigger )
	{
		sleep(15);
		Wp.SetWaypointFlag( "LockDoor", "closed", false );
		SetAvailableMapGoals( TEAM.AXIS, true, "GRENADE_Wall" );

		Util.MapDebugPrint( "Security_Power_disabled" );
	},

	WallTraceLineThread = function()
	{
	// two map coordinates:
	start = Vector3(730.779, 930.043, -201.875);
	end = Vector3(880.478, 934.870, -279.875);
	while (1)
		{
		tr = TraceLine(start, end, null, TRACE.SHOT, 0, false);
		// The tr.fraction value tells us of a collision or not.
		// If it's 1, there was no  collision. If less than 1 there was a collision.
		if(tr.fraction < 1)
			{
			//print("Wall_built");
			DrawDebugLine(start, end, COLOR.RED, 2);
			SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_Fake.*" );
			Map.Wall_Built();
			}
		else
			{
			//print("Not_built");
			DrawDebugLine(start, end, COLOR.GREEN, 2);
			}
		sleep(2);
		}
	},

	Wall_Built = function( trigger )
	{
		Util.MapDebugPrint( "Wall_Built" );
		threadKill(Map.WallTraceLineThreadId);
	},
};

global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "Axis team has built the ^31st. ^7Floor ladder!", Map.BUILD_1st_Floor_ladder_Built );
	OnTrigger( "Axis team has built the ^x3rd. ^7Floor ladder!", Map.BUILD_3rd_Floor_ladder_Built );
	OnTrigger( "Axis team has built the ^14th. ^7Floor ladder!", Map.BUILD_4th_Floor_ladder_Built );
	OnTrigger( "Allied team has built the ^xStairs Wall^7!", Map.Stairs_Wall_Built );
	OnTrigger( "MISSING_STRING", Map.Stairs_Wall_1_Built );
	OnTrigger( "Allied team has built the ladder ^xFence^7!", Map.ladder_Fence_Built );
	OnTrigger( "Allied team has destroyed the ^31st. ^7Floor ladder!", Map.PLANT_1st_Floor_ladder_Destroyed );
	OnTrigger( "Allied team has destroyed the ^x3rd. ^7Floor ladder!", Map.PLANT_3rd_Floor_ladder_Destroyed );
	OnTrigger( "Allied team has destroyed the ^14th. ^7Floor ladder!", Map.PLANT_4th_Floor_ladder_Destroyed );
	OnTrigger( "^1Objective Info: ^7Axis have breached the Cellar Wall!", Map.Cellar_Wall_Destroyed );
	OnTrigger( "^1Objective Info: ^7Axis have destroyed the Power Generator A!", Map.Security_Power_Generator_Destroyed );
	OnTrigger( "^1Objective info: ^7Axis has blown up the Power Generator B!", Map.Security_Power_Generator_B_Destroyed );
	OnTrigger( "Axis team has destroyed the ^xStairs Wall^7!", Map.Stairs_Wall_Destroyed );
	OnTrigger( "MISSING_STRING", Map.Stairs_Wall_1_Destroyed );
	OnTrigger( "Axis team has destroyed the ladder ^xFence^7!", Map.ladder_Fence_Destroyed );
	OnTrigger( "MISSING_STRING", Map.Spy_Lists_Taken );
	OnTrigger( "MISSING_STRING", Map.Spy_Lists_Returned );
	OnTrigger( "Axis team has escaped with the Spy Lists!", Map.Spy_Lists_Secured );
	OnTrigger( "Axis capture the ^31st ^7Floor Spawn!", Map.floor1_Axis_Captured );
	OnTrigger( "Allies reclaim the ^31st ^7Floor Spawn!", Map.floor1_Allies_Captured );
	//Axis now own the ^31st. ^7Floor spawn!
	OnTrigger( "Axis capture the ^a2nd ^7Floor Spawn!", Map.floor2_Axis_Captured );
	OnTrigger( "Allies reclaim the ^a2nd ^7Floor Spawn!", Map.floor2_Allies_Captured );
	//Axis now own the ^a2nd. ^7Floor spawn!
	OnTrigger( "Axis capture the ^x3rd ^7Floor Spawn!", Map.floor3_Axis_Captured );
	OnTrigger( "Allies reclaim the ^x3rd ^7Floor Spawn!", Map.floor3_Allies_Captured );
	//Axis now own the ^x3rd. ^7Floor spawn!
	OnTrigger( "Axis capture the ^14th ^7Floor Spawn!", Map.floor4_Axis_Captured );
	OnTrigger( "Allies reclaim the ^14th ^7Floor Spawn!", Map.floor4_Allies_Captured );
	//Axis now own the ^14th. ^7Floor spawn!

	OnTrigger( "Allied spawntime changed to 20 seconds.", Map.Security_Power_disabled );
	//~Util.DisableGoal( ".*", true ); // all but routes
	//~SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_.*" );
	//~SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_.*" );

	Wp.SetWaypointFlag( "LockDoor", "closed", true );
	Util.DisableGoal( "GRENADE_Wall" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Stairs_Wall_1" ); //Duplicate
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Security_Power_Generator_B" ); //Unbuildable
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Stairs_Wall_1" ); //Duplicate

	SetGoalPriority( "CAPPOINT_Fake", 0.79, TEAM.AXIS);

	// Max users per goal
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );

	// Camp times
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} );
	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=10, MaxCampTime=60} );

	Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed." );
};

global OnBotJoin = function( bot )
{
};
