protected List <Targetable> GetTargets(ActiveEffect effect, TargetType targetType) { List <Targetable> targets = new List <Targetable>(); if (targetType == TargetType.Self) { return(new List <Targetable> { activeUnit }); } if (targetType == TargetType.LinkedTowers) { Tower tower = activeUnit as Tower; if (tower != null) { List <Tower> connectedTowers = tower.connectedTowers; foreach (Tower connectedTower in connectedTowers) { targets.Add(connectedTower); } } } if (targetType == TargetType.SingleEnemy) { return(new List <Targetable> { activeUnit.targetter.GetTarget() }); } if (targetType == TargetType.AllTargets) { return(activeUnit.targetter.GetAllTargets()); } if (targetType == TargetType.MultipleTargets) { ParameterModiferValue multishotValue = effect.parameterValues[Modifier.MultishotTargets]; return(activeUnit.targetter.GetTargets(Mathf.RoundToInt(multishotValue.value))); } return(targets); }
private bool CheckConditions() { foreach (ActiveEffect activeEffect in effects) { ParameterModiferValue triggerValue = activeEffect.parameterValues[Modifier.TriggerChance]; int randomValue = UnityEngine.Random.Range(0, 100); if (triggerValue.value < randomValue) { return(false); } } foreach (TowerEffectCondition condition in activationConditions) { if (!condition.CheckCondition()) { return(false); } } return(true); }
private Dictionary <Modifier, ParameterModiferValue> GetEffectValue(ActiveEffect effect, Targetable target) { Dictionary <Modifier, ParameterModiferValue> finalValues = new Dictionary <Modifier, ParameterModiferValue>(); Tower tower = target as Tower; foreach (KeyValuePair <Modifier, ParameterModiferValue> paramValue in effect.parameterValues) { ParameterModiferValue paramMod = paramValue.Value; float value = effect.parameterValues[paramValue.Key].value; if (tower) { if (effect.rankUpParameterValues.ContainsKey(paramValue.Key)) { float rank = tower.towerInfo.currentRank; value += effect.rankUpParameterValues[paramValue.Key].value * rank; } } finalValues.Add(paramValue.Key, new ParameterModiferValue(paramMod.modType, value)); } return(finalValues); }
public override void Initialize(List <Targetable> targets) { newTargets = new Dictionary <Targetable, List <Targetable> >(); ParameterModiferValue rangeValue = activeEffect.parameterValues[Modifier.Range]; float attackRange = rangeValue.value; foreach (Targetable target in targets) { int number = Physics.OverlapSphereNonAlloc(target.transform.position, attackRange, s_Enemies, enemyMask); newTargets.Add(target, new List <Targetable>()); for (int index = 0; index < number; index++) { Collider enemy = s_Enemies[index]; var damageable = enemy.GetComponent <Targetable>(); if (damageable != null) { newTargets[target].Add(damageable); } } } ActivateEffect(); }