public void Display(NativePowerScriptableObject power) { this.power = power; cooldownText.text = ""; manaText.text = power.manaCost.ToString(); nameText.text = power.name; }
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)); }
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); }