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);
                }
            }
        }
    }