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();
        }
    }
Ejemplo n.º 3
0
    private void AttemptToPlaceSelectedDefender(Vector2 pos)
    {
        var defenderCost = defenderPrefab.GetCost();

        if (resourseDisplay.GetGold() >= defenderCost)
        {
            SpawnDefender(pos);
            resourseDisplay.SpendGold(defenderCost);
        }
    }