public void SetCurrentNode(Node newNode = null) { if (newNode != null) { currentNode = newNode; } else { currentNode = mainGrid.GetClosestNode(transform.position, true); } }
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); } }