//==========================================================================================
//
//	ship.gm
//
//	Who	When		What
//------------------------------------------------------------------------------------------
//	palota	14 January 2011	Initial Script
//	palota	11 May 2011	role, routes to DEFEND_east2 and DEFEND_doc5, max users for FLAG_Top_secret_document
//	palota	18 May 2011	boat paththrough navigation, WinningChat
//
//==========================================================================================
//

global Map =
{
	Debug = 0,
	objTaken = 0,
	objSecured = 0,
	enigmaTaken = false,
	docTaken = false,

	Roles =
	{
		AXIS =
		{
			DEFENDER2 =
			{
				numbots = 4,
			},
		},
	},

	Navigation =
	{
		l1 = { navigate = function(_this) {
			_this.AddAimRequest(Priority.High, "facing", Vector3(0.3,0,0.9));
			_this.Bot.HoldButton(BTN.WALK, 3);
			sleep(0.3);
			_this.Bot.HoldButton(BTN.BACKWARD, 2);
			sleep(2);
			_this.AddAimRequest(Priority.High, "facing", Vector3(0.3,0,-0.9));
			_this.Bot.HoldButton(BTN.FORWARD, 2.5);
			sleep(2.5);
		}},
		l2 = { navigate = function(_this) {
			_this.AddAimRequest(Priority.High, "facing", Vector3(0,-0.3,-0.9));
			_this.Bot.HoldButton(BTN.WALK, 3);
			sleep(0.3);
			_this.Bot.HoldButton(BTN.FORWARD, 6);
			sleep(6);
		}},
		boat = { navigate = function(_this) {
			_this.AddAimRequest(Priority.High, "facing", Vector3(0,0.3,0.9));
			yield();
			_this.Bot.HoldButton(BTN.FORWARD, 2);
			sleep(2.5);
		}},
	},

	East_rader_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_east_radar.*" );
		Util.MapDebugPrint( "East_rader_Destroyed" );
	},

	West_rader_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_west_radar.*" );
		Util.MapDebugPrint( "West_rader_Destroyed" );
	},

	Wall_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_wall.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_wall.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_enigma.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_Enigma_box" );
		Util.MapDebugPrint( "Wall_Destroyed" );
	},

	SetDoc = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, !Map.docTaken, "DEFEND_doc.*" );
		SetAvailableMapGoals( TEAM.AXIS, Map.objTaken > 0, "DEFEND_boat.*" );
		SetAvailableMapGoals( TEAM.AXIS, !Map.enigmaTaken, {
			"SNIPE_w.*",
			"MOBILEMG42.*2",
		});
	},

	Enigma_box_Taken = function( trigger )
	{
		if (!Map.enigmaTaken){
			Map.enigmaTaken = true;
			Map.objTaken += 1;
		}
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_enigma.*" );
		Map.SetDoc();
		Util.MapDebugPrint( "Enigma_box_Taken" );
	},

	Enigma_box_Returned = function( trigger )
	{
		Map.enigmaTaken = false;
		Map.objTaken -= 1;
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_enigma.*" );
		Map.SetDoc();
		Util.MapDebugPrint( "Enigma_box_Returned" );
	},

	Top_secret_document_Taken = function( trigger )
	{
		if (!Map.docTaken){
			Map.docTaken = true;
			Map.objTaken += 1;
			Util.SetMaxUsers( 5, "FLAG_Top_secret_document" );
		}
		Map.SetDoc();
		Util.MapDebugPrint( "Top_secret_document_Taken" );
	},

	Top_secret_document_Returned = function( trigger )
	{
		Map.docTaken = false;
		Map.objTaken -= 1;
		Map.SetDoc();
		if (Map.objSecured == 0){
			Util.SetMaxUsers( 2, "FLAG_Top_secret_document" );
		}
		Util.MapDebugPrint( "Top_secret_document_Returned" );
	},

	Objective_Secured = function( trigger )
	{
		Map.objTaken -= 1;
		Map.objSecured += 1;
		Map.SetDoc();
		Util.SetMaxUsers( 2, "ATTACK_.*" );
		Util.SetMaxUsers( 4, "FLAG_Top_secret_document" );
		Util.ClearRoleForGoals("DEFEND_wall.*", ROLE.DEFENDER2);
		Util.ClearRoleForGoals("DEFEND_west_radar.*", ROLE.DEFENDER2);
		Util.ClearRoleForGoals("DEFEND_enigma.*", ROLE.DEFENDER2);
		Util.MapDebugPrint( "Objective_Secured" );
		if (Map.objSecured==2){
			ETUtil.WinningChat( TEAM.ALLIES );
			ETUtil.LosingChat( TEAM.AXIS );
			Util.MapDebugPrint( "Allies win" );
		}
	},

	Round_End = function( trigger )
	{
		if (Map.objSecured<2){
			ETUtil.WinningChat( TEAM.AXIS );
			ETUtil.LosingChat( TEAM.ALLIES );
			Util.MapDebugPrint( "Axis win" );
		}
	},
};

global OnMapLoad = function()
{
	OnTrigger( "East rader destroyed", Map.East_rader_Destroyed );
	OnTrigger( "West rader destroyed", Map.West_rader_Destroyed );
	OnTrigger( "Cracked destroyed", Map.Wall_Destroyed );
	OnTrigger( "Allies have stolen Enigma box!", Map.Enigma_box_Taken );
	OnTrigger( "Allies have stolen Top secret document!", Map.Top_secret_document_Taken );
	OnTrigger( "Flag returned Enigma box!", Map.Enigma_box_Returned );
	OnTrigger( "Flag returned Top secret document!", Map.Top_secret_document_Returned );
	OnTrigger( "Allies captured capture2", Map.Objective_Secured ); //enigma box or top secret documents 208
	OnTrigger( "Round End.", Map.Round_End );

	OnTriggerRegion(AABB(5904.419,-882.750,-1790.874,6606.933,-474.715,-1500.0), RegionTrigger.KillTrigger); //under the cappoint boat
	OnTriggerRegion(AABB(5600.0,-1200.0,-1333.801,6816.366,-525.900,-1015.714), RegionTrigger.DisableCombatMovement); //cappoint boat
	Util.LimitToTeam( TEAM.AXIS, "DEFEND_.*" );
	Util.LimitToTeam( TEAM.AXIS, "SNIPE_.*" );
	Util.LimitToTeam( TEAM.AXIS, "MOBILEMG42_.*" );
	Util.LimitToTeam( TEAM.AXIS, "TRIPMINE_.*" );
	Util.LimitToTeam( TEAM.ALLIES, "ATTACK_.*" );
	SetAvailableMapGoals( TEAM.AXIS, false, {
		"DEFEND_boat.*",
		"DEFEND_enigma.*",
	});
	SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_Enigma_box" );

	SetGoalPriority( "DEFEND_boat.*", 0.51, TEAM.AXIS);
	SetGoalPriority( "DEFEND_boat1.*", 0.52, TEAM.AXIS);

	Util.SetRoleForGoals("DEFEND_wall.*", ROLE.DEFENDER2);
	Util.SetRoleForGoals("DEFEND_west_radar.*", ROLE.DEFENDER2);
	Util.SetRoleForGoals("DEFEND_enigma.*", ROLE.DEFENDER2);

	Util.SetMaxUsers( 1, "FLAG_Top_secret_document" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );

	Util.AddUsePoint("PLANT_East_rader", Vector3(1529.661, -122.528, 72.125));
	Util.AddUsePoint("PLANT_West_rader", Vector3(-2934.373, 31.209, -167.875));

	SetMapGoalProperties( "DEFEND_.*", {MinCampTime=20, MaxCampTime=50} );
	SetMapGoalProperties( "SNIPE_.*", {MinCampTime=30, MaxCampTime=120} );
	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=50, MaxCampTime=120} );

	MapRoutes =
	{
		FLAG_Top_secret_document = {
			ROUTE_allied_spawn = {
				ROUTE_door_eastN = {},
				ROUTE_door_eastS = {},
				ROUTE_door_north = {},
				ROUTE_door_south = {},
				ROUTE_allied_gun = {},
			},
		},
		PLANT_East_rader = {
			ROUTE_allied_spawn = {
				ROUTE_EN2 = {},
				ROUTE_ES2 = {},
				ROUTE_allied_gun = {},
			}
		},
		PLANT_West_rader = {
			ROUTE_allied_spawn = {
				ROUTE_WN1 = {},
				ROUTE_EN1 = { ROUTE_WN4 = { ROUTE_WNradar = {}}},
				ROUTE_WS1 = {},
				ROUTE_ES1 = { ROUTE_WS4 = { ROUTE_WSradar = {}}},
			}
		},
		FLAG_Enigma_box = {
			ROUTE_allied_spawn = {
				ROUTE_WN1 = { ROUTE_enigma1 = {}},
				ROUTE_WN2 = { ROUTE_enigma2 = {}},
				ROUTE_WN3 = { ROUTE_enigma1 = {}},
				ROUTE_WS1 = { ROUTE_enigma2 = {}},
				ROUTE_WS2 = { ROUTE_enigma1 = {}},
				ROUTE_WS3 = { ROUTE_enigma2 = {}},
			}
		},
		PLANT_Cracked_wall = {
			ROUTE_allied_spawn = {
				ROUTE_WN1 = {},
				ROUTE_WN2 = {},
				ROUTE_WN3 = {},
				ROUTE_WS1 = {},
				ROUTE_WS2 = {},
				ROUTE_WS3 = {},
			}
		},
		DEFEND_enigma1 = {
			ROUTE_axis_spawn = {
				ROUTE_WN1 = {},
				ROUTE_WN2 = {},
				ROUTE_WS1 = {},
				ROUTE_WS2 = {},
			}
		},
		DEFEND_boat1 = {
			ROUTE_axis_spawn = {
				ROUTE_waterS1 = {},
			}
		},
		CAPPOINT_boat = {
			ROUTE_doc = {
				ROUTE_door_east = {},
				ROUTE_door_south = {},
				ROUTE_EN3 = { ROUTE_waterN2 = { ROUTE_waterN1 = {}}},
			},
			ROUTE_enigma = {
				ROUTE_WN1 = { Weight=2, ROUTE_waterN2 = { ROUTE_waterN1 = {}}},
				ROUTE_WN2 = {},
				ROUTE_WS1 = { Weight=2 },
				ROUTE_WS2 = {},
			},
		},
		DEFEND_east2 = {
			ROUTE_axis_spawn = { ROUTE_ES2 = {} }
		},
		DEFEND_doc5 = {
			ROUTE_axis_spawn = { ROUTE_EN3 = {} }
		},
	};
	MapRoutes.ATTACK_wall1 = MapRoutes.PLANT_Cracked_wall;
	MapRoutes.ATTACK_wall2 = MapRoutes.ATTACK_wall1;
	MapRoutes.DEFEND_enigma2 = MapRoutes.DEFEND_enigma1;
	MapRoutes.DEFEND_enigma3 = MapRoutes.DEFEND_enigma1;
	MapRoutes.DEFEND_enigma5 = MapRoutes.DEFEND_enigma1;
	MapRoutes.DEFEND_enigma6 = MapRoutes.DEFEND_enigma1;
	MapRoutes.DEFEND_boat12 = MapRoutes.DEFEND_boat1;
	MapRoutes.DEFEND_east_radar1 = MapRoutes.DEFEND_east2;
	MapRoutes.DEFEND_east_radar3 = MapRoutes.DEFEND_east2;
	MapRoutes.DEFEND_east3 = MapRoutes.DEFEND_doc5;
	MapRoutes.DEFEND_doc6 = MapRoutes.DEFEND_doc5;
	MapRoutes.DEFEND_doc7 = MapRoutes.DEFEND_doc5;
	Util.Routes(MapRoutes);

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