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(); } }
public override void ShowNextStructureGhostImage(ResourceDisplay currencyDisplay) { base.ShowNextStructureGhostImage(currencyDisplay); obstacles[1].gameObject.SetActive(true); if (currencyDisplay.HaveEnoughGold(GetGoldCost()) == false || currencyDisplay.HaveEnoughSupplies(GetSuppliesCost()) == false) { for (int i = 0; i < stakeSpriteRenderers_Group2.Length; i++) { stakeSpriteRenderers_Group2[i].color = invalidColor; } } else { for (int i = 0; i < stakeSpriteRenderers_Group2.Length; i++) { stakeSpriteRenderers_Group2[i].color = ghostImageColor; } } }
void SpawnSquad(Vector2 coordinates) { if (ghostImageSquad == null) { return; } if (currencyDisplay.HaveEnoughGold(squad.GetGoldCost()) && currencyDisplay.HaveEnoughSupplies(squad.GetSuppliesCost()) && (IsWithinBounds() || IsWithinCastleBounds())) { if (ghostImageSquad.squadType != SquadType.Laborers && IsCellOccupied(coordinates) == false && IsCellOccupiedByResourceNode(coordinates) == false) { StartCoroutine(PlaceSquad(coordinates)); } else if (ghostImageSquad.squadType == SquadType.Laborers && IsCellOccupiedByResourceNode(coordinates) && GetResourceNodeFromCoordinates(coordinates).unoccupiedResourceDeposits.Count > 0) { ResourceNode node = GetResourceNodeFromCoordinates(coordinates); bool nodeCompletelyUnoccupied = true; foreach (ResourceDeposit goldDeposit in node.resourceDeposits) { if (goldDeposit.occupied) { nodeCompletelyUnoccupied = false; break; } } if (nodeCompletelyUnoccupied) { // If there's not any workers on the node yet StartCoroutine(PlaceSquad(coordinates)); } else { // If there's already at least one worker on the node and there's still room for more AddLaborerToSquad(node); } } } }