//==================================//
//
// - Simo-K Edited -
// - opencoop checkpoint system for custom maps -
// - call code coopcheckpoint::ocone
//
// - call code coopcheckpoint::wait_playersone
//
//==================================//

namespace coopcheckpoint {

////////////////////////////////////////////////////
//
//	SPAWN STATE
//
////////////////////////////////////////////////////
//usefull for handling all spawn progression stuff in one function
	#define OC_SPAWN_ONE			1
	#define OC_SPAWN_TWO			2
	#define OC_SPAWN_THREE			3
	#define OC_SPAWN_FOUR			4
	#define OC_SPAWN_FIVE			5
	#define OC_SPAWN_SIX			6
	#define OC_SPAWN_SEVEN			7
	#define OC_SPAWN_EIGHT			8
	#define OC_SPAWN_NINE			9
	#define OC_SPAWN_TEN			10
	#define OC_SPAWN_ELEVEN			11
	#define OC_SPAWN_TWELVE			12
	
	float spawnState;

  void set_spawnstate( float state ) {
  	spawnState = state;
  	if ( state == OC_SPAWN_ONE ) {
  		// enable new spawns
  		$info_player_coop_4.enable();
  		$info_player_coop_5.enable();
  		// disable old spawns
  		$info_player_start_1.disable();
  		$info_player_coop_1.disable();
  		$info_player_coop_2.disable();
  		$info_player_coop_3.disable();
		
  	} else if ( state == OC_SPAWN_TWO ) {
  		// enable new spawns
  		$info_player_coop_6.enable();
  		$info_player_coop_7.enable();
  		// disable old spawns
  		$info_player_coop_4.disable();
  		$info_player_coop_5.disable();
		
  	} else if ( state == OC_SPAWN_THREE ) {
  		// enable new spawns
  		$info_player_coop_8.enable();
  		$info_player_coop_9.enable();
  		// disable old spawns
  		$info_player_coop_6.disable();
  		$info_player_coop_7.disable();
		
  	}else if ( state == OC_SPAWN_FOUR ) {
  		// enable new spawns
  		$info_player_coop_10.enable();
  		$info_player_coop_11.enable();
  		// disable old spawns
  		$info_player_coop_8.disable();
  		$info_player_coop_9.disable();
		
  	} else if ( state == OC_SPAWN_FIVE ) {
  		// enable new spawns
  		$info_player_coop_12.enable();
  		$info_player_coop_13.enable();
  		// disable old spawns
  		$info_player_coop_10.disable();
  		$info_player_coop_11.disable();
		
  	} else if ( state == OC_SPAWN_SIX ) {
  		// enable new spawns
  		$info_player_coop_14.enable();
  		$info_player_coop_15.enable();
  		// disable old spawns
  		$info_player_coop_12.disable();
  		$info_player_coop_13.disable();
		
  	} else if ( state == OC_SPAWN_SEVEN ) {
  		// enable new spawns
  		$info_player_coop_16.enable();
  		$info_player_coop_17.enable();
  		// disable old spawns
  		$info_player_coop_14.disable();
  		$info_player_coop_15.disable();
		
  	} else if ( state == OC_SPAWN_EIGHT ) {
  		// enable new spawns
  		$info_player_coop_18.enable();
  		$info_player_coop_19.enable();
  		// disable old spawns
  		$info_player_coop_16.disable();
  		$info_player_coop_17.disable();
		
  	} else if ( state == OC_SPAWN_NINE ) {
  		// enable new spawns
  		$info_player_coop_20.enable();
  		$info_player_coop_21.enable();
  		// disable old spawns
  		$info_player_coop_18.disable();
  		$info_player_coop_19.disable();
		
  	} else if ( state == OC_SPAWN_TEN ) {
  		// enable new spawns
  		$info_player_coop_22.enable();
  		$info_player_coop_23.enable();
  		// disable old spawns
  		$info_player_coop_20.disable();
  		$info_player_coop_21.disable();
		
  	} else if ( state == OC_SPAWN_ELEVEN ) {
  		// enable new spawns
  		$info_player_coop_24.enable();
  		$info_player_coop_25.enable();
  		// disable old spawns
  		$info_player_coop_22.disable();
  		$info_player_coop_23.disable();
		
  	} else if ( state == OC_SPAWN_TWELVE ) {
  		// enable new spawns
  		$info_player_coop_26.enable();
  		$info_player_coop_27.enable();
  		// disable old spawns
  		$info_player_coop_24.disable();
  		$info_player_coop_25.disable();
  	}
}
  
	void ocone() {
		set_spawnstate( OC_SPAWN_ONE);
	}
	
	void octwo() {
		set_spawnstate( OC_SPAWN_TWO );
	}
	
	void octhree() {
		set_spawnstate( OC_SPAWN_THREE );
	}
	
	void ocfour() {
		set_spawnstate( OC_SPAWN_FOUR );
	}
	
	void ocfive() {
		set_spawnstate( OC_SPAWN_FIVE );
	}
	
	void ocsix() {
		set_spawnstate( OC_SPAWN_SIX );
	}
	
	void ocseven() {
		set_spawnstate( OC_SPAWN_SEVEN );
	}
	
	void oceight() {
		set_spawnstate( OC_SPAWN_EIGHT );
	}
	
	void ocnine() {
		set_spawnstate( OC_SPAWN_NINE );
	}
	
	void octen() {
		set_spawnstate( OC_SPAWN_TEN );
	}
	
	void oceleven() {
		set_spawnstate( OC_SPAWN_ELEVEN );
	}
	
	void octwelve() {
		set_spawnstate( OC_SPAWN_TWELVE );
	}

	void wait_playersone() {
	sys.trigger($trigger_checkpointone);
	sys.wait(1.0);
  	
  	float globalPlrs = sys.numPlayers();
	float waitPlrs = $info_location_trapone.numPlayers();

	while ( waitPlrs != globalPlrs ) {
	sys.say( "Waiting for all players." + waitPlrs + " / " + globalPlrs + " ." );
	sys.wait( 5 );
	globalPlrs = sys.numPlayers();
    waitPlrs = $info_location_trapone.numPlayers();
	}
	
	sys.wait(1.0);
	sys.trigger($trigger_trapone);
}

	void wait_playerstwo() {
	sys.trigger($trigger_checkpointwo);
	sys.wait(1.0);
  	
  	float globalPlrs = sys.numPlayers();
	float waitPlrs = $info_location_traptwo.numPlayers();

	while ( waitPlrs != globalPlrs ) {
	sys.say( "Waiting for all players." + waitPlrs + " / " + globalPlrs + " ." );
	sys.wait( 5 );
	globalPlrs = sys.numPlayers();
    waitPlrs = $info_location_traptwo.numPlayers();
	}
	
	sys.wait(1.0);
	sys.trigger($trigger_traptwo);
}

	void wait_playersthree() {
	sys.trigger($trigger_checkpointhree);
	sys.wait(1.0);
  	
  	float globalPlrs = sys.numPlayers();
	float waitPlrs = $info_location_trapthree.numPlayers();

	while ( waitPlrs != globalPlrs ) {
	sys.say( "Waiting for all players." + waitPlrs + " / " + globalPlrs + " ." );
	sys.wait( 5 );
	globalPlrs = sys.numPlayers();
    waitPlrs = $info_location_trapthree.numPlayers();
	}
	
	sys.wait(1.0);
	sys.trigger($trigger_trapthree);
}

	void wait_playersfour() {
	sys.trigger($trigger_checkpointfour);
	sys.wait(1.0);
  	
  	float globalPlrs = sys.numPlayers();
	float waitPlrs = $info_location_trapfour.numPlayers();

	while ( waitPlrs != globalPlrs ) {
	sys.say( "Waiting for all players." + waitPlrs + " / " + globalPlrs + " ." );
	sys.wait( 5 );
	globalPlrs = sys.numPlayers();
    waitPlrs = $info_location_trapfour.numPlayers();
	}
	
	sys.wait(1.0);
	sys.trigger($trigger_trapfour);
}

	void wait_playersfive() {
	sys.trigger($trigger_checkpointfive);
	sys.wait(1.0);
  	
  	float globalPlrs = sys.numPlayers();
	float waitPlrs = $info_location_trapfive.numPlayers();

	while ( waitPlrs != globalPlrs ) {
	sys.say( "Waiting for all players." + waitPlrs + " / " + globalPlrs + " ." );
	sys.wait( 5 );
	globalPlrs = sys.numPlayers();
    waitPlrs = $info_location_trapfive.numPlayers();
	}
	
	sys.wait(1.0);
	sys.trigger($trigger_trapfive);
}

	void wait_playerssix() {
	sys.trigger($trigger_checkpointsix);
	sys.wait(1.0);
  	
  	float globalPlrs = sys.numPlayers();
	float waitPlrs = $info_location_trapsix.numPlayers();

	while ( waitPlrs != globalPlrs ) {
	sys.say( "Waiting for all players." + waitPlrs + " / " + globalPlrs + " ." );
	sys.wait( 5 );
	globalPlrs = sys.numPlayers();
    waitPlrs = $info_location_trapsix.numPlayers();
	}
	
	sys.wait(1.0);
	sys.trigger($trigger_trapsix);
}

//==================================//
//
//== Doors Locked/Unlocked custom code for co-op
//
//= call code coopcheckpoint::locked_coopone
//
//==================================//

void locked_coopone() {
	$func_door_coopone.close ();
	$func_door_coopone.lock (1);
	}
	
void unlocked_coopone() {
	$func_door_coopone.open ();
	$func_door_coopone.lock (0);
	}
	
void locked_cooptwo() {
	$func_door_cooptwo.close ();
	$func_door_cooptwo.lock (1);
	}
	
void unlocked_cooptwo() {
	$func_door_cooptwo.open ();
	$func_door_cooptwo.lock (0);
	}
	
void locked_coopthree() {
	$func_door_coopthree.close ();
	$func_door_coopthree.lock (1);
	}
	
void unlocked_coopthree() {
	$func_door_coopthree.open ();
	$func_door_coopthree.lock (0);
	}
	
void locked_coopfour() {
	$func_door_coopfour.close ();
	$func_door_coopfour.lock (1);
	}
	
void unlocked_coopfour() {
	$func_door_coopfour.open ();
	$func_door_coopfour.lock (0);
	}

void locked_coopfive() {
	$func_door_coopfive.close ();
	$func_door_coopfive.lock (1);
	}
	
void unlocked_coopfive() {
	$func_door_coopfive.open ();
	$func_door_coopfive.lock (0);
	}

void locked_coopsix() {
	$func_door_coopsix.close ();
	$func_door_coopsix.lock (1);
	}
	
void unlocked_coopsix() {
	$func_door_coopsix.open ();
	$func_door_coopsix.lock (0);
	}

void locked_coopseven() {
	$func_door_coopseven.close ();
	$func_door_coopseven.lock (1);
	}
	
void unlocked_coopseven() {
	$func_door_coopseven.open ();
	$func_door_coopseven.lock (0);
	}

void locked_coopeight() {
	$func_door_coopeight.close ();
	$func_door_coopeight.lock (1);
	}
	
void unlocked_coopeight() {
	$func_door_coopeight.open ();
	$func_door_coopeight.lock (0);
	}
	
//==================================//	
// two doors custom locked/unlocked code 
//==================================//

void xlocked_onecoop() {
	$func_door_xcooptrapone.close ();
	$func_door_xcooptraponex.close ();
	$func_door_xcooptrapone.lock (1);
	$func_door_xcooptraponex.lock (1);
	}
	
void xunlocked_onecoop() {
	$func_door_xcooptrapone.open ();
	$func_door_xcooptraponex.open ();
	$func_door_xcooptrapone.lock (0);
	$func_door_xcooptraponex.lock (0);
	}
	
void xlocked_twocoop() {
	$func_door_xcooptraptwo.close ();
	$func_door_xcooptraptwox.close ();
	$func_door_xcooptraptwo.lock (1);
	$func_door_xcooptraptwox.lock (1);
	}
	
void xunlocked_twocoop() {
	$func_door_xcooptraptwo.open ();
	$func_door_xcooptraptwox.open ();
	$func_door_xcooptraptwo.lock (0);
	$func_door_xcooptraptwox.lock (0);
	}
	
void xlocked_threecoop() {
	$func_door_xcooptrapthree.close ();
	$func_door_xcooptrapthreex.close ();
	$func_door_xcooptrapthree.lock (1);
	$func_door_xcooptrapthreex.lock (1);
	}
	
void xunlocked_threecoop() {
	$func_door_xcooptrapthree.open ();
	$func_door_xcooptrapthreex.open ();
	$func_door_xcooptrapthree.lock (0);
	$func_door_xcooptrapthreex.lock (0);
	}
	
void xlocked_fourcoop() {
	$func_door_xcooptrapfour.close ();
	$func_door_xcooptrapfourx.close ();
	$func_door_xcooptrapfour.lock (1);
	$func_door_xcooptrapfourx.lock (1);
	}
	
void xunlocked_fourcoop() {
	$func_door_xcooptrapfour.open ();
	$func_door_xcooptrapfourx.open ();
	$func_door_xcooptrapfour.lock (0);
	$func_door_xcooptrapfourx.lock (0);
	}

//==================================//	
// enable/disable stamina 
// code for boss-fights 
//==================================//

void disable_staminacoop() {
	//  unlimited stamina
		sys.setcvar( "pm_stamina", "0" );
	}
	
void enable_staminacoop() {
	// standard stamina
		sys.setcvar( "pm_stamina", "24" );
	}
}