Exemple #1
0
    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();
    }