Ejemplo n.º 1
0
 public void Display(NativePowerScriptableObject power)
 {
     this.power        = power;
     cooldownText.text = "";
     manaText.text     = power.manaCost.ToString();
     nameText.text     = power.name;
 }
Ejemplo n.º 2
0
    public void SelectNativePower(NativePowerScriptableObject nativePower, PlayerCombatObject player)
    {
        // Player has selected a native power.

        // Ignore if it is not player's turn.
        if (turn != TurnSelection.Players)
        {
            infoText.text = "It's not players' turn.";
            return;
        }

        // From here on, it's player's turn.

        // Ignore if the player is dead.
        if (player.IsDead)
        {
            infoText.text = "Player is knocked out.";
            return;
        }

        // Ignore if the player is disabled.
        if (!player.IsAbleToAct())
        {
            infoText.text = "Player cannot act.";
            return;
        }

        // Ignore if the player does not have enough mana to activate the power.
        if (nativePower.manaCost > player.Mana)
        {
            infoText.text = "Not enough mana.";
            return;
        }

        infoText.text    = "";
        currentCardOwner = player;
        currentPower     = nativePower;

        foreach (var c in coroutines)
        {
            StopCoroutine(c);
        }

        StartCoroutine(SelectTargets_Power(nativePower));
    }
Ejemplo n.º 3
0
    IEnumerator SelectTargets_Power(NativePowerScriptableObject nativePower)
    {
        PlayerCombatObject       playerOnTurn = currentCardOwner;
        HealthEntityCombatObject caster       = playerOnTurn;

        stepNumber = 0;

        targetsPerAbilityStep = new List <List <HealthEntityCombatObject> >();

        AbilityStepsWithTargetingData_Player[] abilities = nativePower.abilityStepsWithTargetingData;

        // Let's cycle through all ability steps in order to determine targets.
        foreach (var abilityStepWithTargetingData in abilities)
        {
            chosenTargets = new List <HealthEntityCombatObject>();
            targetFound   = false;

            TargetData targetData = GetValidTargets(caster, abilityStepWithTargetingData.targetingData);
            if (targetData.multipleSpecificMode)
            {
                multipleSpecificMode     = true;
                numberOfSpecificTargets  = targetData.multipleSpecificNumber;
                multipleSpecificModeList = new List <HealthEntityCombatObject>();
            }
            else
            {
                multipleSpecificMode = false;
            }

            if (targetData.previousStepTargets > -1)
            {
                targetFound = true;
                foreach (var entity in targetsPerAbilityStep[targetData.previousStepTargets])
                {
                    chosenTargets.Add(entity);
                }
            }
            else if (targetData.targetDecided)
            {
                targetFound = true;
                foreach (var e in targetData.entities)
                {
                    chosenTargets.Add(e);
                }
            }
            else
            {
                if (targetData.entities.Count == 1 && targetData.entities[0] is PlayerCombatObject)
                {
                    targetFound = true;
                    chosenTargets.Add(targetData.entities[0]);
                }
                else
                {
                    infoText.text = abilityStepWithTargetingData.targetingData.textForChoosing;
                    ShowTargetingButton(targetData.entities);
                }
            }

            while (targetFound == false)
            {
                yield return(null);
            }

            stepNumber++;
            targetsPerAbilityStep.Add(chosenTargets);
        }

        // We have all chosen targets.
        // We now have to check whether any of those are multiple hits.

        for (int i = 0; i < targetsPerAbilityStep.Count; i++)
        {
            TargetingData_Base targetingData = nativePower.abilityStepsWithTargetingData[i].targetingData;

            if (targetingData.targetAlignment == TargetingData_Base.TargetAlignment.Hostile)
            {
                if (targetingData.targets == TargetingData_Base.Target.Multiple)
                {
                    EnemyCombatObject        chosenTarget  = (EnemyCombatObject)targetsPerAbilityStep[i][0];
                    List <EnemyCombatObject> nearbyEnemies = GetNearbyEnemies(chosenTarget, targetingData.numberOfTargets);
                    foreach (var e in nearbyEnemies)
                    {
                        targetsPerAbilityStep[i].Add(e);
                    }
                }
            }
        }

        // Now we have full lists of all targets for each attribute.
        // Let's do the card trick.

        DoPowerTrick();

        yield return(null);
    }