Ejemplo n.º 1
0
 public void SetCurrentNode(Node newNode = null)
 {
     if (newNode != null)
     {
         currentNode = newNode;
     }
     else
     {
         currentNode = mainGrid.GetClosestNode(transform.position, true);
     }
 }
Ejemplo n.º 2
0
    private void CommandUnits()
    {
        bool underAttack    = false;
        Node attackLocation = null;

        for (int i = 0; i < enemyController.activeUnits.Count; i++)
        {
            Unit enemyUnit = enemyController.activeUnits[i];
            if (mainGrid.GetGridFromLocation(enemyUnit.transform.position) == controllerBaseLocation.gridParent)
            {
                underAttack    = true;
                attackLocation = mainGrid.GetClosestNode(enemyUnit.transform.position, true);
                break;
            }
        }
        if (!underAttack)
        {
            if (activeUnits.Count < enemyController.activeUnits.Count || activeUnits.Count == 0)
            {
                //Create Units
                for (int i = 0; i < numUnitsToSpawn; i++)
                {
                    ManageSpawnQueue(true);
                }
            }
            else
            {
                //Move Units
                //Units at Base
                Orientation[] orientations = { Orientation.Top, Orientation.Right, Orientation.Left, Orientation.Bottom };
                int           index        = Random.Range(0, orientations.Length);
                int           xVal         = Random.Range(0, SphereGrid.GRID_SIZE - 1);
                int           zVal         = Random.Range(0, SphereGrid.GRID_SIZE - 1);
                destination = mainGrid.gridDictionary[orientations[index]].LookUpNode(xVal, zVal);
                for (int i = 0; i < activeUnits.Count; i++)
                {
                    if (mainGrid.GetGridFromLocation(activeUnits[i].transform.position) == controllerBaseLocation.gridParent)
                    {
                        selectedUnits.Add(activeUnits[i]);
                    }
                }
                GiveUnitsDestination(destination);

                Node enemyBaseLocation = enemyController.controllerBaseLocation;
                destination = mainGrid.GetClosestNode(enemyBaseLocation.GetLocation(), true);
                for (int i = 0; i < activeUnits.Count; i++)
                {
                    if (mainGrid.GetGridFromLocation(activeUnits[i].transform.position) != controllerBaseLocation.gridParent)
                    {
                        selectedUnits.Add(activeUnits[i]);
                    }
                }
                GiveUnitsDestination(destination);
            }
        }
        else
        {
            //Under Attack
            //Create Units
            for (int i = 0; i < numUnitsToSpawn; i++)
            {
                ManageSpawnQueue(true);
            }
            //Bring Units back to Base
            destination = attackLocation;
            for (int i = 0; i < activeUnits.Count; i++)
            {
                selectedUnits.Add(activeUnits[i]);
            }
            GiveUnitsDestination(destination);
        }
    }