IEnumerator PlaceSquad(Vector2 coordinates) { // If trying to place a ranged squad on the wall, swap out the current ghost squad for it's wall version if (mouseHoverTilePos.x < 1f && squad.castleWallVersionOfSquad != null) { Squad oldGhostImageSquad = ghostImageSquad; ghostImageSquad = Instantiate(squad.castleWallVersionOfSquad, coordinates, Quaternion.identity); Destroy(oldGhostImageSquad.gameObject); yield return(null); } if (ghostImageSquad.leader != null) { ghostImageSquad.leader.sr.color = defaultColor; if (coordinates.x >= 1f) { ghostImageSquad.leader.boxCollider.enabled = true; } } for (int i = 0; i < ghostImageSquad.units.Count; i++) { ghostImageSquad.units[i].sr.color = defaultColor; if (coordinates.x >= 1f) { ghostImageSquad.units[i].boxCollider.enabled = true; } } AddCell(coordinates); ghostImageSquad.SetLaneSpawner(); ghostImageSquad.squadPlaced = true; ghostImageSquad.transform.position = coordinates; ghostImageSquad.transform.SetParent(defendersParent.transform); currencyDisplay.SpendGold(ghostImageSquad.GetGoldCost()); currencyDisplay.SpendSupplies(ghostImageSquad.GetSuppliesCost()); if (coordinates.x >= 1f) { ghostImageSquad.GetComponent <BoxCollider2D>().enabled = true; } if (ghostImageSquad.rangeCollider != null) { ghostImageSquad.rangeCollider.boxCollider.enabled = true; } // Create a new ghost image squad in case the player wants to spawn another of the same squad ghostImageSquad = Instantiate(squad, Camera.main.ScreenToWorldPoint(Input.mousePosition), Quaternion.identity); StartCoroutine(StartPlacementCooldown()); }
void ResurrectUnits() { if (squadHighlighter.selectedSquad == null) { TextPopup.CreateTextStringPopup(Utilities.GetMouseWorldPosition(), "Invalid target"); Reset(); return; } else if (activeAbilitySquad.rangeCollider.squadsInRange.Contains(squadHighlighter.selectedSquad) == false && squadHighlighter.selectedSquad != activeAbilitySquad) { TextPopup.CreateTextStringPopup(squadHighlighter.selectedSquad.transform.position, "Target not in range"); Reset(); return; } else if (squadHighlighter.selectedSquad.deadUnits.Count == 0) { TextPopup.CreateTextStringPopup(squadHighlighter.selectedSquad.transform.position, "No units to resurrect"); Reset(); return; } int goldCost = Mathf.RoundToInt(squadHighlighter.selectedSquad.GetGoldCost() / squadHighlighter.selectedSquad.maxUnitCount * squadHighlighter.selectedSquad.deadUnits.Count); int suppliesCost = Mathf.RoundToInt(squadHighlighter.selectedSquad.GetSuppliesCost() / squadHighlighter.selectedSquad.maxUnitCount * squadHighlighter.selectedSquad.deadUnits.Count); if (resourceDisplay.HaveEnoughGold(goldCost) && resourceDisplay.HaveEnoughSupplies(suppliesCost)) { activeAbilitySquad.abilityActive = true; PlayCastSpellAnims_Priests(activeAbilitySquad); float resurrectAnimationTime = audioManager.resurrectSounds[0].clip.length; for (int i = 0; i < squadHighlighter.selectedSquad.deadUnits.Count; i++) { ResurrectUnitFromSquad(squadHighlighter.selectedSquad.deadUnits[i], resurrectAnimationTime); } resourceDisplay.SpendGold(goldCost); resourceDisplay.SpendSupplies(suppliesCost); audioManager.PlayRandomSound(audioManager.resurrectSounds); StartCoroutine(DeactivateResurrect(resurrectAnimationTime, activeAbilitySquad)); Reset(); } else // Not enough supplies or gold, so cancel using the ability { TextPopup.CreateTextStringPopup(squadHighlighter.selectedSquad.transform.position, "Not enough resources"); Reset(); } }