// TDOD: route me

global Map =
{
	Flag_obj = "FLAG_obj",
	Build_Command_Post = "BUILD_Command_Post",
	Build_Sidegate = "BUILD_Sidegate",
	Build_Tank = "BUILD_Tank",
	Build_Tank_Barrier_1 = "BUILD_Tank_Barrier_1",
	Build_Wooden_Gate = "BUILD_Wooden_Gate",
	Plant_Command_Post = "PLANT_Command_Post",
	Plant_Sidegate = "PLANT_Sidegate",
	Plant_Tank_Barrier_1 = "PLANT_Tank_Barrier_1",
	Plant_Wooden_Gate = "PLANT_Wooden_Gate",
	Mount_337 = "MOUNTMG42_337",
	Repair_337 = "REPAIRMG42_337",
	Mover_tank = "MOVER_tank",

	Suicide = 1,

	Command_Post_Built = function( trigger )
	{
		Util.ChangeSpawn(TEAM.ALLIES, 5, 9);

		Util.MapDebugPrint( "Command_Post_Built" );
	},

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

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

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

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

	Command_Post_Destroyed = function( trigger )
	{
		Util.ChangeSpawn(TEAM.ALLIES, 0, 9);

		Util.MapDebugPrint( "Command_Post_Destroyed" );
	},

	Sidegate_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Sidegate" );

		Util.MapDebugPrint( "Sidegate_Destroyed" );
	},

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

	Wooden_Gate_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Wooden_Gate" );

		Util.MapDebugPrint( "Wooden_Gate_Destroyed" );
	},

	obj_Taken = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_obj.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_raft.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_aobj.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_araft.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "PLANTMINE_.*" );


		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.AXIS )
			{
				bot.ChangeSpawnPoint( 1 );

				//distance check instead?
				if ( Map.Suicide && bot.GetReinforceTime() < 6 )
				{
					bot.ExecCommand( "kill" );
				}
			}
		}
		Util.ChangeSpawn(TEAM.ALLIES, 0, 9);

		Util.MapDebugPrint( "obj_Taken" );
	},

	obj_returned = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_obj.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_raft.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_aobj.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_araft.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_cp.*" );

		Util.ChangeSpawn(TEAM.AXIS, 0, 9);
		Util.ChangeSpawn(TEAM.ALLIES, 5, 9);

				//distance check instead?




		Util.MapDebugPrint( "obj_returned" );
	},

	main_gate = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_obj.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_aobj.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"MOUNT_tank",
			"ESCORT_tank",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_cp.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANTMINE_h.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_bar.*" );
		Util.EnableGoal("PLANT_Wooden_Gate");
		Util.EnableGoal("BUILD_Command_Post");
		Util.EnableGoal("MOUNTMG42.*", TEAM.AXIS);
		Util.EnableGoal("REPAIRMG42.*", TEAM.AXIS);
		SetAvailableMapGoals( TEAM.ALLIES, false, "MOBILEMG42_allies1" );

		Util.DisableGroup( "path", TEAM.AXIS);
		Util.DisableGroup( "2", TEAM.AXIS);
		Util.EnableGoal("FLAG_obj");

		Wp.SetWaypointFlag( "wall1", "closed", false );
		Wp.SetWaypointFlag( "wall2", "closed", false );
		Util.MapDebugPrint( "main_gate" );
	},

	tank_stolen = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_tank.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_atank.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_bar.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"MOBILEMG42_ally1",
			"SNIPE.*",
		});
		Util.DisableGroup( "1", TEAM.AXIS);

		Util.MapDebugPrint( "tank stolen" );
	},

	tank_past_gate =
	{
		Name = "tank_past_gate",
		TriggerOnClass = CLASS.VEHICLE_HVY,
		OnEnter = function(ent)
		{
			Util.EnableGroup( "path", TEAM.AXIS);
			Util.EnableGroup( "2", TEAM.AXIS);
			SetAvailableMapGoals( TEAM.ALLIES, true, "MOBILEMG42_allies1" );
			Util.MapDebugPrint( "tank_past gate" );
		},
	},

	tank_damaged = function( trigger )
	{
		Util.SetPositionGoal( Map.Build_Tank, Map.Mover_tank );
		Util.MapDebugPrint( "tank blown" );
	},
};

global OnMapLoad = function()
{
	OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Command_Post_Built );
	OnTrigger( "MISSING_STRING", Map.Sidegate_Built );
	OnTrigger( "MISSING_STRING", Map.Tank_Built );
	OnTrigger( "MISSING_STRING", Map.Tank_Barrier_1_Built );
	OnTrigger( "MISSING_STRING", Map.Wooden_Gate_Built );
	OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Command_Post_Destroyed );
	OnTrigger( "The Sidegate has been destroyed!", Map.Sidegate_Destroyed );
	OnTrigger( "MISSING_STRING", Map.Tank_Barrier_1_Destroyed );
	OnTrigger( "The Wooden Gate has been destroyed!", Map.Wooden_Gate_Destroyed );
	OnTrigger( "Allies have stolen the Secret Documents!", Map.obj_Taken );
	OnTrigger( "Flag returned obj!", Map.obj_returned );
	OnTrigger( "The tank has been damaged", Map.tank_damaged );
	OnTrigger( "Allied team has destroyed the Main Gate!", Map.main_gate );
	OnTrigger( "Allied team has stolen the Tank!", Map.tank_stolen );

	OnTriggerRegion(AABB(90.309,165.550,575.125,556.621,251.8,649.125), Map.tank_past_gate);
	Util.SetGroup( "ARTILLERY_D_tank", "1");
	Util.SetGroup( "ARTILLERY_S_tank", "1");
	Util.SetGroup( "CALLARTILLERY_tank1", "1");
	Util.SetGroup( "CALLARTILLERY_tank_b", "2");
	Util.SetGroup( "ARTILLERY_S_tank2", "2");

	SetAvailableMapGoals( TEAM.ALLIES, false, {
		"DEFEND_.*",
		"ATTACK_aobj.*",
		"ATTACK_araft.*",
		"PLANTMINE_.*",
	});
	SetAvailableMapGoals( TEAM.AXIS, false, {
		"ATTACK_.*",
		"DEFEND_bar.*",
		"DEFEND_path.*",
		"DEFEND_obj.*",
		"DEFEND_raft.*",
		"MOBILEMG42_ally1",
		"MOBILEMG42_allies1",
		"SNIPE.*",
		"PLANTMINE_.*",
	});

	Wp.SetWaypointFlag( "wall1", "closed", true );
	Wp.SetWaypointFlag( "wall2", "closed", true );

	Util.SetGoalPosition( 1860, -428.6, 600.125, "PLANT_Sidegate" ) ;
	Util.SetGoalPosition( 1786, 1487, 611.825, "PLANT_Tank_Barrier_1" ) ;
	Util.SetGoalPosition( 297.35, 4913, 819, "PLANT_Wooden_Gate" ) ;


	SetMapGoalProperties( "DEFEND_.*", {MinCampTime=30, MaxCampTime=90} );
	SetMapGoalProperties( "DEFEND_start.*", {MinCampTime=60, MaxCampTime=90} );
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=30, MaxCampTime=90} );
	SetMapGoalProperties( "ATTACK_.*", {MinCampTime=25, MaxCampTime=60} );
//~	SetMapGoalProperties( "SNIPE_.*", {MinCampTime=40, MaxCampTime=60} );

	Util.DisableGoal("BUILD_Command_Post");
	Util.DisableGoal("MOUNTMG42.*");
	Util.DisableGoal("MOVER_plane");
	Util.DisableGoal("MOVER_lighthouse_light");
	Util.DisableGoal("REPAIRMG42.*");
	Util.DisableGoal("PLANT_Wooden_Gate");
	Util.DisableGoal("FLAG_obj");
	Util.DisableGoal("MOBILEMG42_allies1");
	Util.DisableGroup( "1", TEAM.ALLIES);
	Util.DisableGroup( "2", TEAM.ALLIES);
	Util.DisableGroup( "2", TEAM.AXIS);

	SetGoalPriority( "PLANT_Wooden_Gate", 0.99, TEAM.ALLIES, CLASS.COVERTOPS );

	Util.SetMaxUsers( 2, "CHECKPOINT_.*" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 2, "BUILD_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsers( 1, "ESCORT_tank" );
	Util.SetMaxUsers( 1, "PLANT_Command_Post" );
	Util.SetMaxUsers( 1, "BUILD_.*" );
	Util.SetMaxUsers( 3, "MOUNT_tank" );




	MapRoutes =
	{
		FLAG_obj =
		{
			ROUTE_spawn0  =
			{
				ROUTE_spawn1  =
				{
					ROUTE_spawn2  =
					{
						ROUTE_spawn3  =
						{
							ROUTE_spawn9  =
							{
								ROUTE_spawn8  =
								{
									ROUTE_spawn13  =
									{
									},
								},
							},
						},
					},
				},
				ROUTE_spawn12  =
				{
					ROUTE_spawn13  =
					{
					},
				},
			},
		},
	};

	BUILD_Command_Post =
		{
			ROUTE_spawn0  =
			{
				ROUTE_spawn1  =
				{
					ROUTE_spawn2  =
					{
						ROUTE_spawn3  =
						{
							ROUTE_spawn4  =
							{
								ROUTE_spawn5  =
								{
								},
							},
						},
					},
				},
				ROUTE_spawn12  =
				{
					ROUTE_spawn11  =
					{
						ROUTE_spawn10  =
						{
							ROUTE_spawn9  =
							{
								ROUTE_spawn6  =
								{
									ROUTE_spawn5  =
									{
									},
								},
							},
						},
					},
				},
			},
		};


	MapRoutes.PLANT_Command_Post = MapRoutes.BUILD_Command_Post;
	MapRoutes.PLANT_Wooden_Gate = MapRoutes.Flag_obj;
	Util.Routes(MapRoutes);
};

global OnBotJoin = function( bot )
{
	bot.TargetBreakableDist = 100.0;
	bot.MaxViewDistance = 8000.0;
};
