public void TaskOnClick() { //Cambio de jugador main_behavior.reparte = false; main_behavior.index_player++; main_behavior.turno++; main_behavior.index_player %= main_behavior.jugadores.Count; main_behavior.estado = (main_behavior.turno / main_behavior.jugadores.Count) % 2 != 0; if (main_behavior.estado == false) //Solo se puede repartir en turno de movimiento { main_behavior.reparte = true; main_behavior.units_hold [main_behavior.index_player] += StartOptions.partida.casillas_jugador() / 3; } string nombre_jugador = main_behavior.jugadores[main_behavior.index_player].ToString(); string nombre_casa = main_behavior.casas[main_behavior.index_player].ToString(); string color; string imagen_mostrar = ""; if (nombre_casa == "Baratheon") { color = "amarillo"; imagen_mostrar = "house-baratheon"; } else if (nombre_casa == "Lannister") { color = "rojo"; imagen_mostrar = "house-lannister"; } else if (nombre_casa == "Stark") { color = "blanco"; imagen_mostrar = "house-stark"; } else { color = "negro"; imagen_mostrar = "house-targaryen"; } pintarCasa(nombre_casa, imagen_mostrar); if (main_behavior.estado != false) { LogText.log("Es el turno de " + nombre_jugador + ", representando a la casa " + nombre_casa + " con el color " + color + ".\nEn este turno puedes atacar."); } else { LogText.log("Es el turno de " + nombre_jugador + ", representando a la casa " + nombre_casa + " con el color " + color + ".\nPara comenzar el turno tienes " + main_behavior.units_hold [main_behavior.index_player] + " unidades nuevas para colocar en tus territorios.\nSelecciona un territorio."); } Tile.reset_origen(); }
public void closePanel() { Dropdown drpSoldados = GameObject.Find("drpSoldados").GetComponent <Dropdown>(); int valueDrop = (int)drpSoldados.value; origen.me.add_units(valueDrop); main_behavior.units_hold[main_behavior.index_player] = main_behavior.units_hold[main_behavior.index_player] - valueDrop; LogText.log("Añadidas " + valueDrop + " unidades, quedan " + main_behavior.units_hold[main_behavior.index_player]); main_behavior.reparte = main_behavior.units_hold[main_behavior.index_player] > 0; GameObject panelControl = GameObject.Find("PanelController"); panel = panelControl.GetComponent <PanelSoldado>(); panel.DoUnvisible(); panelStart = false; Tile.droppeddown = true; origen.paintUnits(); origen.updateCount(); Tile.reset_origen(); }
IEnumerator OnMouseUp() { if (Tile.performing == false && Tile.droppeddown == true) { mainCamera.enabled = false; cameraB.enabled = true; Army temporal; Tile.performing = true; if (origen != null && (me.isAdyacent(origen.me) != true && this != origen)) { LogText.log("Sólo te puedes mover a casillas adyacentes!"); } else if (((string)main_behavior.jugadores [main_behavior.index_player]).Contains(me.getOwner()) == true && Tile.origen == null) { if (main_behavior.reparte == true) { Tile.droppeddown = false; origen = this; List <string> m_DropOptions = new List <string> (); for (int i = 0; i <= main_behavior.units_hold [main_behavior.index_player]; i++) { m_DropOptions.Add(i.ToString()); } GameObject panelControl = GameObject.Find("PanelController"); panel = panelControl.GetComponent <PanelSoldado> (); panel.DoVisible(); valueDropdown = 0; Dropdown drpSoldados = GameObject.Find("drpSoldados").GetComponent <Dropdown> (); //Clear the old options of the Dropdown menu drpSoldados.ClearOptions(); //Add the options created in the List above drpSoldados.AddOptions(m_DropOptions); drpSoldados.value = 0; } else { if (me.getUnits() == 0) { LogText.log("No se puede elegir como origen una casilla vacía!"); } else { LogText.log("Elegida la casilla de la que mover"); origen = this; } } /*User selects this tile*/ } else if (((string)main_behavior.jugadores [main_behavior.index_player]).Contains(me.getOwner()) == true && Tile.origen != null) { if (main_behavior.estado != false) { LogText.log("En este turno no se pueden mover tropas!"); } else if ((origen.me != me)) { Tile.droppeddown = false; List <string> m_DropOptions = new List <string> (); for (int i = 0; i <= origen.me.getUnits(); i++) { m_DropOptions.Add(i.ToString()); } GameObject panelControl = GameObject.Find("PanelControllerB"); panel = panelControl.GetComponent <PanelSoldado> (); panel.DoVisible(); valueDropdown = 0; Dropdown drpSoldados = GameObject.Find("drpSoldadosB").GetComponent <Dropdown> (); //Clear the old options of the Dropdown menu drpSoldados.ClearOptions(); //Add the options created in the List above drpSoldados.AddOptions(m_DropOptions); drpSoldados.value = 0; yield return(new WaitForSeconds(1.2f)); if (valueDropdown == 0) { yield return(new WaitForSeconds(0.3f)); bool stop = true; while (stop) { if (valueDropdown > 0) { stop = false; } else { yield return(new WaitForSeconds(0.2f)); } } } //print ("value drop " + valueDropdown); ret = origen.me.put_on_hold(valueDropdown); if (ret == true) { //print ("x origen "+origen.transform.position.x); Vector3 newPos = new Vector3(me.objeto3d.transform.position.x + 80, cameraB.transform.position.y - 20, me.objeto3d.transform.position.z); Vector3 newRot = new Vector3(172, 90, 180); cameraB.transform.position = newPos; cameraB.transform.eulerAngles = newRot; cameraB.transform.LookAt(me.objeto3d.transform); origen.me.move_Units(me); origen.updateCount(); origen.paintUnits(); temporal = movable(valueDropdown); Vector3 dirOrigen = getDirection(origen.me); float angle = Mathf.Atan2(dirOrigen.x, dirOrigen.z) * Mathf.Rad2Deg; temporal.rotate(angle); temporal.playMove(); for (int i = 0; i < 20; i++) { temporal.move(dirOrigen); yield return(new WaitForSeconds(0.05f)); } temporal.resetRotation(); temporal.deinstantiate(); paintUnits(); cameraB.transform.position = initPosCamera; cameraB.transform.eulerAngles = initRotCamera; cameraB.enabled = false; mainCamera.enabled = true; } } Tile.reset_origen(); /*User deselects this tile or moves to another tile*/ } else if (((string)main_behavior.jugadores [main_behavior.index_player]).Contains(me.getOwner()) != true && Tile.origen != null) { /*Attack!*/ if (main_behavior.estado != true) { LogText.log("En este turno no se pueden atacar territorios!"); } else { int unidades = origen.me.getUnits(); int numero_de_dados = 0; if (unidades > 3) { unidades = 3; } temporal = movable(unidades); origen.me.put_on_hold(unidades); origen.paintUnits(); origen.updateCount(); Vector3 dirOrigen = getDirection(origen.me); float angle = Mathf.Atan2(dirOrigen.x, dirOrigen.z) * Mathf.Rad2Deg; temporal.rotate(angle); Vector3 newPos = new Vector3(me.objeto3d.transform.position.x + 80, cameraB.transform.position.y - 20, me.objeto3d.transform.position.z); Vector3 newRot = new Vector3(172, 90, 180); cameraB.transform.position = newPos; cameraB.transform.eulerAngles = newRot; cameraB.transform.LookAt(me.objeto3d.transform); for (int i = 0; i < 10; i++) { temporal.move(dirOrigen); yield return(new WaitForSeconds(0.1f)); } unidades = me.getUnits(); GameObject diceControl = GameObject.Find("SwipeController"); LogText.log("Espera... Lanzando Dados... Suerte!!!"); do { numero_de_dados = temporal.getUnits(); if (unidades != 0) { if (unidades > 2) { unidades = 2; } numero_de_dados += unidades; DiceSwipeControl.set_num_dices(numero_de_dados); diceControl.GetComponent <DiceSwipeControl> ().manualStart(); army.put_on_hold(unidades); //Recovering dices result yield return(new WaitForSeconds(10.0f)); bool stop = true; print("antes de recuperar "); List <int> resultados = DiceSwipeControl.results; int repet = 1; print("antes if " + resultados.Count); if (resultados == null || resultados.Count != numero_de_dados) { print("en el if "); while (stop) { yield return(new WaitForSeconds(0.2f)); resultados = DiceSwipeControl.results; if (resultados != null && resultados.Count == numero_de_dados) { stop = false; } if (repet == 5) { stop = false; } repet++; } print("resultado if tile " + resultados.Count); if (resultados == null || resultados.Count == 0) { resultados = new List <int>(new int[] { 1, 1, 1, 1, 1 }); } } else { print("resultado tile " + resultados.Count + " " + numero_de_dados); int atacante = temporal.getUnits(); int breakpoint = atacante > unidades ? unidades : atacante; int[] attacker = new int[breakpoint]; int[] defender = new int[breakpoint]; bool def = true; for (int i = 0; i < breakpoint; i++) { for (int j = breakpoint; j < breakpoint * 2; j++) { if (resultados [i] >= resultados [j]) { def = false; break; } } if (def == false) { me.kill_unit(); unidades--; } else { temporal.kill_unit(); } def = true; } } } } while(temporal.getUnits() > 0 && me.getUnits() > 0); string msj = " "; if (temporal.getUnits() <= 0) { army.playAttack(); LogText.log("Has perdido la batalla"); msj = " No has podido conquistar el territorio y has perdido a los soldados con los que has luchado."; } else { temporal.playAttack(); LogText.log("Has ganado la batalla"); me.conquer(origen.me.getOwner(), temporal.getUnits()); msj = "Enhorabuena, has conquistado un territorio más.\nTienes " + StartOptions.partida.casillas_jugador() + " de los " + StartOptions.partida.casillas_para_fin() + " que hacen falta para ganar."; set_color(); } me.reset_hold(); temporal.resetRotation(); temporal.deinstantiate(); paintUnits(); Tile.reset_origen(); LogText.log(msj + "\nSi quieres puedes volver a atacar, selecciona la casilla desde la que hacerlo."); cameraB.enabled = false; cameraB.transform.position = initPosCamera; cameraB.transform.eulerAngles = initRotCamera; mainCamera.enabled = true; } } else if (((string)main_behavior.jugadores [main_behavior.index_player]).Contains(me.getOwner()) != true && Tile.origen == null) { LogText.log("No se pueden seleccionar casillas rivales!"); } else { if (main_behavior.estado == false) { LogText.log("No se puede atacar en turno de movimiento!"); } else { LogText.log("No se puede mover en turno de ataque!"); } } Tile.performing = false; updateCount(); cameraB.enabled = false; cameraB.transform.position = initPosCamera; cameraB.transform.eulerAngles = initRotCamera; mainCamera.enabled = true; } else { LogText.warning("Performing action"); } yield return(0); StartOptions.partida.FinPartida(); }
//Se usa para inicializar la partida void Start() { LogText.log("La partida ha comenzado!"); /**Leer información del jugador*/ index_player = 0; units_hold[0] = 0; units_hold[1] = 0; units_hold[2] = 0; units_hold[3] = 0; reparte = true; turno = 0; estado = false; jugadores = new ArrayList(); casas = new ArrayList(); casillas = new ArrayList(); mypool = new ArrayList(); if (PlayerPrefs.HasKey("Jugador1")) { jugadores.Add(PlayerPrefs.GetString("Jugador1")); casas.Add("Baratheon"); mypool.Add(new Pool("Baratheon")); //Debug.Log ("Creado Pool Baratheon"); } if (PlayerPrefs.HasKey("Jugador2")) { jugadores.Add(PlayerPrefs.GetString("Jugador2")); casas.Add("Lannister"); mypool.Add(new Pool("Lannister")); //Debug.Log ("Creado Pool Lannister"); } if (PlayerPrefs.HasKey("Jugador3")) { jugadores.Add(PlayerPrefs.GetString("Jugador3")); casas.Add("Stark"); mypool.Add(new Pool("Stark")); //Debug.Log ("Creado Pool Stark"); } if (PlayerPrefs.HasKey("Jugador4")) { jugadores.Add(PlayerPrefs.GetString("Jugador4")); casas.Add("Targaryen"); mypool.Add(new Pool("Targaryen")); //Debug.Log ("Creado Pool Targaryen"); } /*Rellena la información de las casillas*/ GameObject[] allObjects = GameObject.FindGameObjectsWithTag("Provincias"); foreach (GameObject object3d in allObjects) { /*Extract name*/ string name = object3d.name; string owner; float prob = Random.Range(0f, 1f); float probJ1 = 0f; float probJ2 = 0f; float probJ3 = 0f; float probJ4 = 0f; /*Use probability to assign tile to a player using a russian roulette approach*/ switch (casas.Count) { case 2: probJ1 = 0.5f; probJ2 = 1f; break; case 3: probJ1 = 0.33f; probJ2 = 0.67f; probJ3 = 1f; break; case 4: probJ1 = 0.25f; probJ2 = 0.5f; probJ3 = 0.75f; probJ4 = 1f; break; } if (prob < probJ1) { owner = jugadores [0].ToString(); units_hold[0]++; //Así el jugador inicial puede asignar soldados también } else if (prob < probJ2) { owner = jugadores [1].ToString(); } else if (prob < probJ3) { owner = jugadores [2].ToString(); } else { owner = jugadores [3].ToString(); } int units = (int)Random.Range(1.0f, 3.9f); casillas.Add(new Casilla(name, owner, units)); } units_hold[0] /= 3; //El número bueno ya /*Cargamos el grafo*/ StreamReader sr = new StreamReader("Assets/Grafo.txt"); while (sr.Peek() > -1) { string linea = sr.ReadLine(); string[] provincias = linea.Split('\\'); Casilla actual = null; List <Casilla> adyacent = new List <Casilla> (); foreach (Casilla casilla in casillas) { string provincia = casilla.getName(); //Debug.Log(provincias[0] + " " + provincia); if (provincia.Contains(provincias [0])) { actual = casilla; break; } } foreach (Casilla casilla in casillas) { string provincia = casilla.getName(); for (int i = 2; i < provincias.Length; i++) { if (provincia.Contains(provincias [i])) { adyacent.Add(casilla); } } } actual.setAdyacents(adyacent); } //Establece el estado inicial index_player = 0; string nombre_jugador = jugadores[0].ToString(); string nombre_casa = casas[0].ToString(); string color; string imagen_mostrar = ""; if (nombre_casa == "Baratheon") { color = "amarillo"; imagen_mostrar = "house-baratheon"; } else if (nombre_casa == "Lannister") { color = "rojo"; imagen_mostrar = "house-lannister"; } else if (nombre_casa == "Stark") { color = "blanco"; imagen_mostrar = "house-stark"; } else { color = "negro"; imagen_mostrar = "house-targaryen"; } pintarCasa(nombre_casa, imagen_mostrar); LogText.log("Empieza la partida " + nombre_jugador + ", representando a la casa " + nombre_casa + " con el color " + color + ".\nPara comenzar el turno tienes " + units_hold[0] + " unidades nuevas para colocar en tus territorios.\nSelecciona un territorio."); }