コード例 #1
0
    public void Manage(GameObject objective)
    {
        //Si no hay nada seleccionado previamente a este click
        if (currentSelected == null)
        {
            //las unidades son edificios obreros soldados
            if (objective.tag.Equals("Unit"))
            {
                currentSelected = objective;
                //si no habia nada seleccionado el Canvas se encuentra desactivado
                //por lo que se activa y se actualiza el panel para la unidad actual
                UnitCanvas.SetActive(true);
                ActualizePanel(objective.GetComponent <Unidad> ());
            }
        }

        //Si ya tenemos una unidad seleccionada
        else
        {
            Unidad unitActor = currentSelected.GetComponent <Unidad> ();

            //Si lo que se ha seleccionado ahora es una unidad
            if (objective.tag.Equals("Unit"))
            {
                Unidad unitReceptor = objective.GetComponent <Unidad> ();

                // ¿es una unidad aliada o una unidad enemiga?
                if (unitActor.Kingodm.Equals(unitReceptor.Kingodm))
                {
                    //Si son aliados, se cambiará la unidad actual por
                    //la última seleccionada, y se ignorará cualquier
                    //acción que estuviese realizando la anterior
                    currentSelected = unitReceptor.gameObject;
                    currentAction   = TypeOfAction.None;

                    //Por último actualizamos el canvas, para mostrar
                    //la información de la nueva unidad clickada
                    ActualizePanel(unitReceptor);
                }
                else
                {
                    //Si es un enemigo lo clickado, verificamos que lo anterior sea
                    //un obrero o soldaod pues lo unico que podemos hacer es atacar
                    if (unitActor.UnitType.Equals(TypeOfUnit.WalkableUnit) || unitActor.UnitType.Equals(TypeOfUnit.Turret))
                    {
                        if (currentAction.Equals(TypeOfAction.Attack))
                        {
                            unitActor.DoAttack(unitReceptor);
                            unitActor.Finished = true;
                        }

                        //tanto como si hemos atacado, como si la acción seleccionada
                        //era moverse o trabajar sobre (cosa que no puede hacerse en una
                        //unidad enemiga), eliminamos toda acción
                        currentAction = TypeOfAction.None;
                    }
                }
            }

            //Si lo que se ha seleccionado NO es una unidad (o suelo o recurso)
            else
            {
                //Si la unidad anteriormente seleccionada es obrera o soldado
                if (unitActor.UnitType.Equals(TypeOfUnit.WalkableUnit))
                {
                    if (objective.tag.Equals("Suelo"))
                    {
                        Debug.Log(currentAction);

                        switch (currentAction)
                        {
                        case TypeOfAction.Move:
                            unitActor.DoMove(objective);
                            currentSelected = null;
                            UnitCanvas.SetActive(false);
                            unitActor.Finished = true;
                            GameManager.Instance.CheckPlayerTurn();
                            break;

                        case TypeOfAction.WorkOn:
                            if ((objective.transform.parent.Find("oxigeno") != null || objective.transform.parent.Find("campoencimas") != null))
                            {
                                List <Hex> totalHexes = objective.GetComponentInParent <Hex> ().neighbors;
                                List <Hex> freeHexes  = new List <Hex> ();

                                bool occupied;
                                for (int i = 0; i < totalHexes.Count; i++)
                                {
                                    occupied = false;
                                    for (int j = 0; j < player.Squad.Count; j++)
                                    {
                                        if (totalHexes [i].tileX == player.Squad [i].GetComponent <Pathfinding> ().tileX&&
                                            totalHexes [i].tileY == player.Squad [i].GetComponent <Pathfinding> ().tileY)
                                        {
                                            occupied = true;
                                            break;
                                        }
                                    }
                                    if (!occupied)
                                    {
                                        freeHexes.Add(totalHexes [i]);
                                    }
                                }

                                totalHexes = freeHexes;
                                freeHexes  = new List <Hex> ();

                                for (int i = 0; i < totalHexes.Count; i++)
                                {
                                    occupied = false;
                                    for (int j = 0; j < cpu.Squad.Count; j++)
                                    {
                                        if (totalHexes [i].tileX == cpu.Squad [i].GetComponent <Pathfinding> ().tileX&&
                                            totalHexes [i].tileY == cpu.Squad [i].GetComponent <Pathfinding> ().tileY)
                                        {
                                            occupied = true;
                                            break;
                                        }
                                    }
                                    if (!occupied)
                                    {
                                        freeHexes.Add(totalHexes [i]);
                                    }
                                }

                                if (freeHexes.Count > 0)
                                {
                                    unitActor.DoWork(objective.transform.parent.GetComponentInChildren <Resource> (), freeHexes [UnityEngine.Random.Range(0, freeHexes.Count - 1)]);
                                }

                                currentSelected = null;
                                UnitCanvas.SetActive(false);
                            }
                            //unitActor.DoWork (currentBuilding, objective.transform.parent.transform, GameManager.Instance.ActivePlayer);
                            break;

                        case TypeOfAction.Attack:
                            break;

                        case TypeOfAction.Build:
                            Unidad u = unitActor.BuildUnit(currentBuilding, objective.GetComponentInParent <Hex> (), unitActor.Owner.Ciudad);
                            currentSelected = null;
                            UnitCanvas.SetActive(false);
                            unitActor.Finished = true;
                            u.Finished         = true;
                            GameManager.Instance.CheckPlayerTurn();
                            break;

                        default:
                            currentSelected = null;
                            UnitCanvas.SetActive(false);
                            break;
                        }
                        currentAction = TypeOfAction.None;
                    }
//                    else if (objective.tag.Equals("Recursos")) {
//                        if (currentAction.Equals(TypeOfAction.WorkOn)) {
////                            unitActor.DoWork(currentResource);
////                            unitActor.Finished = true;
//
//                        } else {
////                            currentSelected = null;
////                            UnitCanvas.SetActive(false);
//                        }
//                    }
                }

                //tanto como si acierta en la ejecución de la acción, como si selecciona algo
                //que no se empareja con su acción, eliminamos la acción actual

                else if (unitActor.UnitType.Equals(TypeOfUnit.Nexus) && objective.tag.Equals("Suelo"))
                {
                    if (currentAction.Equals(TypeOfAction.Build))
                    {
                        Debug.Log(objective);
                        Unidad u = unitActor.BuildUnit(Worker, objective.GetComponentInParent <Hex> (), unitActor.Owner.Pueblo);
                        unitActor.Owner.Squad.Add(u);
                    }
                    currentSelected = null;
                    UnitCanvas.SetActive(false);
                    unitActor.Finished = true;
                }
                else if (unitActor.UnitType.Equals(TypeOfUnit.Barracks) && objective.tag.Equals("Suelo"))
                {
                    if (currentAction.Equals(TypeOfAction.Build))
                    {
                        Unidad u = unitActor.BuildUnit(Soldier, objective.GetComponentInParent <Hex> (), unitActor.Owner.Ejercito);
                        unitActor.Owner.Squad.Add(u);
                    }
                    currentSelected = null;
                    UnitCanvas.SetActive(false);
                    unitActor.Finished = true;
                }

                else
                {
                    //si es edificio, quitamos la selección
                    currentSelected = null;
                    UnitCanvas.SetActive(false);
                }
            }
        }
    }