Example #1
0
            protected void CastAbility(IAbilityContainer container, Vector3 castDirection, int multiCastID)
            {
                if (container.ContainsAbility == false)
                {
                    return;
                }
                AbilityData     ability  = container.Ability;
                AbilityCastData castData = new AbilityCastData(master, container, -1, multiCastID);

                _activeCastData = castData;
                castData.FillBase(
                    ComputeResourcesImpacts(container),
                    ability.Main.BaseKnockback * (HasStats ? Stats.EvaluateAbilitiesStat(EntityAbilitiesStat.KnockbackInflictedFactor, 1f) : 1f),
                    ability.Main.BaseRecoil / container.AbilityTriggerData.MultiCastCount);

                if (castDirection.sqrMagnitude <= Mathf.Epsilon)
                {
                    castData.FillCastDirection(DetermineCastDirection(castData.AbilityCast, container.AbilityTriggerData));
                }
                else
                {
                    castData.FillCastDirection(castDirection);
                }
                if (castData.AbilityCast.Methods.CastOriginTiming == AbilityCastOriginTiming.CastEntrance)
                {
                    castData.FillOrigin(DetermineCastOrigin(castData.AbilityCast));
                }

                if (castData.AbilityCast.Timing.Instant == true)
                {
                    PerformAbility(castData);
                    _activeCastData = null;
                    _abilityCastTimingsCoroutine = null;
                }
                else
                {
                    master.RestartCoroutine(CastAbilityTimingCoroutine(castData), ref _abilityCastTimingsCoroutine);
                }
            }