/*
	C O W B O Y O S - P A I N T B A L L O S
	---------------------------------------
			Írta: Bella Tamás, 2007
	
	Fájlnevek:
	CB_<szín>_<állapot>_<oldal (csak a másik gépre lövésnél)>.gif
	
	Színek:
	1 - fehér
	2 - szürke
	3 - fekete
	
	Állapotok:
	0 - Álldogál
	1 - Játékosra lő
	2 - Ellenfélre lő
	3 - Fenn van a keze (fél)
	4 - Le van lőve (halott/fekszik/üldögél?)
	
	Oldalak:
	0 - bal
	1 - jobb
	
*/


// Változók deklarálása és inicializálása

playerID = 1;	// Játékos színe
cowboy2shot = 1;	// A cowboy, aki lőni fog
IQ = 0;		// Okos ellenfél: ha 1 az értéke, a cowboy mindig a legerősebb ellenfélre lő
rounds = 0;	// Lejátszott menetek száma
enemies = [2, 3];	// Ellenfél azonosítója
danger = [0, 0];	// Az ellenfél veszélyben van (a játékos rá céloz)
dead = [0, 0, 0];	// Cowboyok állapota, 1 esetén halott, 0 esetén jó egészségnek örvend

dX = 370;	// Ide teszi el a fegyverét, ha nem akar lőni (konstans)
dY = 350;
gX = dX;	// Itt van a fegyver
gY = dY;	
tX = 320;	// Ide céloz (ide fog mozogni)
tY = 240;



// Játék kezdete
function startGame(i){
	wins = [0, 0, 0];
	playerID = i;
	rounds = 0;
	switch (i) {
	case 1 : enemies = [2, 3]; break;
	case 2 : enemies = [1, 3]; break;
	case 3 : enemies = [1, 2]; break;		
	}
	
	document.getElementById('street').style.display = 'block';
	document.getElementById('menu').style.display = 'none';
	document.getElementById('statHUD').style.display = 'none';
	document.getElementById('roundHUD').style.display = 'none';
	
	nextRound();
}


// Következő round
function nextRound(){
	dead =[0, 0, 0];
	cowboy2shot = 1;
	danger = [0, 0];	// Az ellenfél veszélyben van
	
	defaultState(0);
	defaultState(1);
	document.getElementById('splash').style.display = 'none';
	
	window.setTimeout("mainLoop();", 2000);
	
	//	mainLoop();
}


// Fő ciklus: soron következő kiválasztása, lövés, játék végének ellenőrzése
function mainLoop(){
	defaultState(0);
	defaultState(1);
	
	// Ha a játékos jön, ...
	if (cowboy2shot == playerID){	
		// ... és halott, a következő jön.
		if (dead[playerID-1] == 1)
			nextCowboy();
		// ... és él, nem csinálunk semmit..
		else
			return;
	}
	
	if (cowboy2shot == enemies[0])
		AIcowboyShot(0);
	else
		AIcowboyShot(1);
}


// Játék vége: menü megjelenítése
function endGame(){
	document.getElementById('street').style.display = 'none';
	document.getElementById('menu').style.display = 'block';	
}


// Gondolkodásmód váltása a főmenüben
function toggleIQ(){
	IQ = 1-IQ;
	document.getElementById('strategy').src = 'GFX/IQ'+IQ+'.gif';
}


// Pisztoly mozgatása adott pozícióba
function moveGun(X, Y){
	if (dead[playerID-1] == 1)
	{
		tX = dX;
		tY = dY;
	}	
	else
	{
		tX = X;
		tY = Y;
	}
	gX = (gX * 4 + tX) / 5;
	gY = (gY * 4 + tY) / 5;
	
	d = document.getElementById('gun');
	
	X = 20 + 500 * saturate(gX/640);
	Y = 180 + 300 * saturate(gY/480);
	
	d.style.left = X;
	d.style.top = Y;
	
	d.style.width = 640-X;
	d.style.height =480-Y;
	
	if ((Math.abs(gX - tX) > 3) || (Math.abs(gY - tY) > 3))
		window.setTimeout("moveGun(tX, tY);", 50);
}


// Felteszi a kezét az adott azonosítójú cowboy
function handsUp(i){
	danger[i] = 1;
	defaultState(i);
}


// Leteszi a kezét az adott azonosítójú cowboy
function handsDown(i){
	danger[i] = 0;
	defaultState(i);
}


// A cowboy állapotának megfelelő kép jelenik meg
function defaultState(i){
	// Ha él, csupa érdekes dolgot csinál
	if (dead[enemies[i]-1] == 0)
	{
		// Ha rá céloz a játékos, és játékos jön és még él is, felteszi a kezét
		if ((danger[i] == 1) && (playerID == cowboy2shot) && (dead[playerID-1] == 0))
			document.getElementById('enemy'+i).src = 'GFX/CB_'+enemies[i]+'_3.gif';
		else
			document.getElementById('enemy'+i).src = 'GFX/CB_'+enemies[i]+'_0.gif';
	}
	// Ha halott, az nem olyan izgalmas
	else
		document.getElementById('enemy'+i).src = 'GFX/CB_'+enemies[i]+'_4.gif';
	
}


// Ajtó kinyitása
function openDoor(){
	document.getElementById('door').src = 'GFX/Door_1.jpg';
	window.setTimeout("document.getElementById('door').src = 'GFX/Door_2.jpg';", 500);
}


// Ajtó becsukása
function closeDoor(){
	document.getElementById('door').src = 'GFX/Door_1.jpg';
	window.setTimeout("document.getElementById('door').src = 'GFX/Door_0.jpg';", 500);
}	


// A paraméterben megkapott értéket a 0..1 intervallumba szorítja
function saturate(X){
	return Math.max(Math.min(X, 1), 0);
}


// Az x-edik ellenség lő: célpont kiválasztása és tüzelés
function AIcowboyShot(x){		
	i = enemies[x];
	// Ha halott, nem lövöldöz
	if (dead[i-1] == 1){
		nextCowboy();
		mainLoop();
		return;
	}
	
	target = 0;
	
	// Ha hülye, véletlenszerűen lő valakire
	if (IQ == 0){
		if (Math.random() > 0.5)
		target = playerID;	// Lövés a játékosra
		else
		target = 6-playerID-i;	// Másik ellenfél indexének számítása
	}
	// Ha okos, az erősebb ellenfélre lő
	else
		target = Math.max(playerID, 6-playerID-i);
	
	// Ha már kimurdált, akire lőne, a másikra tüzel
	if (dead[target-1] > 0)
	target = playerID + 6 - playerID-i - target;
	
	if (target == playerID)	// Ha a játékosra lő...
	document.getElementById('enemy'+x).src = 'GFX/CB_'+i+'_1.gif';
	else	// Ha a másik gépre...
	document.getElementById('enemy'+x).src = 'GFX/CB_'+i+'_2_'+x+'.gif';		
	
	shot(i, target);
}


// A játékos rálőtt valakire - ha ő jön, van hatása.
function playerShot(x){
	if (playerID != cowboy2shot)
		return;
	else
		shot(playerID, enemies[x]);
}


// Következő cowboyra léptetés
function nextCowboy(){
	if (cowboy2shot > 2)
		cowboy2shot = 1;
	else
		cowboy2shot = cowboy2shot + 1;
}


// Egyik cowboy lő a másikra
function shot(who, target){
	if (Math.random()*3 < who)
		dead[target-1] = 1;
	
	if (dead[playerID-1] > 0)
		document.getElementById('splash').style.display = 'block';
	
	if (target == enemies[0]) 
		defaultState(0);
	else if (target == enemies[1])
		defaultState(1);	
	
	// Ha kettő vagy több halottunk van, a következő menet jön
	if (dead[0] + dead[1] + dead[2] >= 2){
		// Megkeressük, ki maradt életben, és növeljük a győzelmei számát
		for (i = 0; i < 3; i++)
			if (dead[i] < 1) wins[i]++;
		
		rounds++;
		updateStats();
		window.setTimeout("nextRound();", 1500);
		return;
	}
	// Ha még sokan élnek, tovább lövöldöznek
	else{
		nextCowboy();
		window.setTimeout("mainLoop();", 1000);
		return;
	}
}


// Meccs adatainak megjelenítése
function updateStats(){
	sHUD = document.getElementById('statHUD');
	rHUD = document.getElementById('roundHUD');
	
	sHUD.style.display = 'block';
	rHUD.style.display = 'block';
	
	// A korábbi cuccokat kitöröljük
	while (sHUD.hasChildNodes()) sHUD.removeChild(sHUD.childNodes[0]);
	while (rHUD.hasChildNodes()) rHUD.removeChild(rHUD.childNodes[0]);
	
	sHUD.appendChild(document.createTextNode("Fehér: "+wins[0]));
	sHUD.appendChild(document.createElement("BR"));		
	sHUD.appendChild(document.createTextNode("Szürke: "+wins[1]));
	sHUD.appendChild(document.createElement("BR"));		
	sHUD.appendChild(document.createTextNode("Fekete: "+wins[2]));
	rHUD.appendChild(document.createTextNode(""+rounds+". kör:"));
	rHUD.appendChild(document.createElement("BR"));		
	
	if (dead[0] < 1)
		rHUD.appendChild(document.createTextNode("Fehér"));
	else if (dead[1] < 1)
		rHUD.appendChild(document.createTextNode("Szürke"));
	else
		rHUD.appendChild(document.createTextNode("Fekete"));
	
}

