void DeplaceTower(MoveableTower tower, SingleTowerPlacementArea area) { if (area == null) { return; } else { Vector3 targetPosition = area.transform.position; float dist = Vector3.Distance(tower.transform.position, targetPosition); if (dist < 0.1f) { tower.transform.position = targetPosition; IntVector2 gridPosition = area.WorldToGrid(targetPosition, dimensions); area.Occupy(gridPosition, dimensions); tower.currentBase = area; return; } else { tower.transform.LookAt(targetPosition, Vector3.up); tower.transform.position += tower.transform.forward * speed * Time.deltaTime; } } }
// find the available bases for setting these moveable towers private SingleTowerPlacementArea SearchNearestBase(Agent nearestAgent) { if (nearestAgent == null) { return(null); } else { float distance = float.MaxValue; SingleTowerPlacementArea nearest = null; for (int i = 0; i < allBases.Count; i++) { if (allBases[i].isSelected == true) { continue; } float currentDistance = Vector3.Distance(nearestAgent.transform.position, allBases[i].transform.position); if (currentDistance < distance) { distance = currentDistance; nearest = allBases[i]; } } nearest.isSelected = true; return(nearest); } }
/// <summary> /// Builds the tower. /// </summary> /// <param name="towerPrefab">Tower prefab.</param> public void BuildTower(GameObject towerPrefab) { // Close active building tree CloseBuildingTree(); Tower target = towerPrefab.GetComponent <Tower>(); int cost = target.currentTargetLevelData.Cost; bool successfulPurchase = BattleField.instance.currency.TryPurchase(cost); if (successfulPurchase) { SingleTowerPlacementArea placementArea = Instantiate(buildingPlace).GetComponent <SingleTowerPlacementArea>(); placementArea.transform.parent = transform.parent; placementArea.transform.position = transform.position; placementArea.transform.Find("DefendPoint").transform.position = defendPoint.position; Tower createdTarget = Instantiate(target); createdTarget.Initialize(placementArea, IntVector2.zero); createdTarget.transform.parent = placementArea.transform; Destroy(gameObject); } }
private void Preparation() { towers = GetCurrentTowers(); nearestAgent = GetNearestAgent(); possibleBases.Clear(); foreach (SingleTowerPlacementArea area in allBases) { area.isSelected = false; } foreach (MoveableTower tower in towers) { AttackAffector attackAffector = tower.gameObject.transform.GetChild(1).GetChild(0).GetComponent <AttackAffector>(); attackAffector.enabled = true; SingleTowerPlacementArea selectedBase = SearchNearestBase(nearestAgent); IntVector2 gridPosition = selectedBase.WorldToGrid(selectedBase.transform.position, dimensions); selectedBase.Clear(gridPosition, dimensions); possibleBases.Add(selectedBase); tower.currentBase.Clear(gridPosition, dimensions); tower.currentBase = null; } }