Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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();
    }