Пример #1
0
 void ApplyAbility()
 {
     BaseAbilityEffect[] effects = turn.ability.GetComponentsInChildren <BaseAbilityEffect>();
     for (int i = 0; i < turn.targets.Count; ++i)
     {
         Tile target = turn.targets[i];
         for (int j = 0; j < effects.Length; ++j)
         {
             BaseAbilityEffect   effect   = effects[j];
             AbilityEffectTarget targeter = effect.GetComponent <AbilityEffectTarget>();
             if (targeter.IsTarget(target))
             {
                 HitRate rate   = effect.GetComponent <HitRate>();
                 int     chance = rate.Calculate(target);
                 if (UnityEngine.Random.Range(0, 101) > chance)
                 {
                     Debug.Log(turn.actor.name + " missed!");
                     // Swing and a miss!
                     continue;
                 }
                 effect.Apply(target);
             }
         }
     }
 }
Пример #2
0
        private void UpdateHitSuccessIndicator()
        {
            int  chance = 0;
            int  amount = 0;
            Tile target = turn.targets[index];

            Transform obj = turn.ability.transform;

            for (int i = 0; i < obj.childCount; ++i)
            {
                AbilityEffectTarget targeter = obj.GetChild(i).GetComponent <AbilityEffectTarget>();
                if (targeter.IsTarget(target))
                {
                    HitRate hitRate = targeter.GetComponent <HitRate>();
                    chance = hitRate.Calculate(target);

                    BaseAbilityEffect effect = targeter.GetComponent <BaseAbilityEffect>();
                    if (effect == null)
                    {
                        throw new Exception("Missing AbilityEffect component.");
                    }
                    amount = effect.Predict(target);
                    break;
                }
            }

            hitIndicatorPanelController.SetStats(chance, amount);
        }
Пример #3
0
 void ApplyAbility()
 {
     BaseAbilityEffect[] effects = turn.ability.GetComponentsInChildren <BaseAbilityEffect>();
     for (int i = 0; i < turn.targets.Count; ++i)
     {
         Tile target = turn.targets[i];
         for (int j = 0; j < effects.Length; ++j)
         {
             BaseAbilityEffect   effect   = effects[j];
             AbilityEffectTarget targeter = effect.GetComponent <AbilityEffectTarget>();
             if (targeter.IsTarget(target))
             {
                 //calculate actual hit rate
                 HitRate rate   = effect.GetComponent <HitRate>();
                 int     chance = rate.Calculate(target);
                 if (UnityEngine.Random.Range(0, 101) > chance)
                 {
                     // A Miss!
                     Debug.Log("Action Missed!");
                     continue;
                 }
                 //apply damage/effect on hit
                 effect.Apply(target);
             }
         }
     }
 }
 bool IsTarget(Tile tile, AbilityEffectTarget[] list)
 {
     for (int i = 0; i < list.Length; i++) {
         if(list[i].IsTarget(tile))
             return true;
     }
     return false;
 }
Пример #5
0
 protected bool isTarget(AbilityEffectTarget[] aet, Unit target)
 {
     for (int i = 0; i < aet.Length; i++)
     {
         if (!aet[i].IsTarget(target))
         {
             return false;
         }
     }
     return true;
 }
Пример #6
0
    public bool IsTarget(Tile tile)
    {
        Transform obj = transform;

        for (int i = 0; i < obj.childCount; ++i)
        {
            AbilityEffectTarget targeter = obj.GetChild(i).GetComponent <AbilityEffectTarget>();
            if (targeter.IsTarget(tile))
            {
                return(true);
            }
        }
        return(false);
    }
Пример #7
0
    void UpdateHitSuccessIndicator()
    {
        int       chance = 0;
        int       amount = 0;
        WorldTile target = turn.targets[index];

        Transform obj = turn.ability.transform;

        for (int i = 0; i < obj.childCount; ++i)
        {
            AbilityEffectTarget targeter = obj.GetChild(i).GetComponent <AbilityEffectTarget>();
            if (targeter.IsTarget(target))
            {
                HitRate hitRate = targeter.GetComponent <HitRate>();
                chance = hitRate.Calculate(target);

                BaseAbilityEffect effect = targeter.GetComponent <BaseAbilityEffect>();
                amount = effect.Predict(target);
                break;
            }
        }

        hitSuccessIndicator.SetStats(chance, amount);
    }
Пример #8
0
    public void Load(CardRecipe data)
    {
        AbilityManaCost abilityManaCost = GetComponent <AbilityManaCost>();

        if (abilityManaCost == null)
        {
            abilityManaCost = gameObject.AddComponent <AbilityManaCost>();
        }

        AbilityEffectTarget abilityEffectTarget = GetComponent <AbilityEffectTarget>();

        if (abilityEffectTarget != null)
        {
            DestroyImmediate(abilityEffectTarget, true);
        }

        BaseAbilityEffect abilityEffect = GetComponent <BaseAbilityEffect>();

        if (abilityEffect != null)
        {
            DestroyImmediate(abilityEffect, true);
        }

        BaseAbilityPower power = GetComponent <BaseAbilityPower>();

        if (power != null)
        {
            DestroyImmediate(power, true);
        }

        AbilityRange range = GetComponent <AbilityRange>();

        if (range != null)
        {
            DestroyImmediate(range, true);
        }

        if (data == null)
        {
            Name = "";
            Desc = "";
            abilityManaCost.amount = 0;
            abilityEffectTarget    = gameObject.AddComponent <DefaultAbilityEffectTarget>();
            abilityEffect          = gameObject.AddComponent <DamageAbilityEffect>();
            power            = gameObject.AddComponent <PhysicalAbilityPower>();
            power.Power      = 0;
            range            = gameObject.AddComponent <ConstantAbilityRange>();
            range.horizontal = 0;
            this.data        = Resources.Load("Recipes/CardRecipes/Empty Card Data") as CardRecipe;
            ID           = GetInstanceID();
            visualEffect = null;
            return;
        }
        Name = data.Name;
        Desc = data.Description;
        abilityManaCost.amount = data.AbilityManaCost;
        abilityEffectTarget    = gameObject.AddComponent(Type.GetType(data.AbilityEffectTarget)) as AbilityEffectTarget;

        if (data.AbilityEffect.Contains("InflictStatus"))
        {
            string ae     = "InflictStatusAbilityEffect";
            string status = string.Format("{0}StatusEffect", data.AbilityEffect.Substring(13, data.AbilityEffect.Length - 26));

            InflictStatusAbilityEffect effect = gameObject.AddComponent(Type.GetType(ae)) as InflictStatusAbilityEffect;
            effect.statusName = status;
            abilityEffect     = effect;
        }
        else
        {
            abilityEffect = gameObject.AddComponent(Type.GetType(data.AbilityEffect)) as BaseAbilityEffect;
        }

        power            = gameObject.AddComponent(Type.GetType(data.AbilityPower)) as BaseAbilityPower;
        power.Power      = data.BasePower;
        range            = gameObject.AddComponent(Type.GetType(data.AbilityRange)) as AbilityRange;
        range.horizontal = data.AbilityRangeHorizontal;
        this.data        = data;
        ID           = GetInstanceID();
        visualEffect = data.ParticleEffect;
    }