Esempio n. 1
0
        private void InitializeParameters(SpellLightning lightning, float delay)
        {
            sourceSpell = lightning;
            this.delay  = delay;
            float lifeTime = lightning.DurationRange.Random(lightningParameters.Random);

            lightningParameters.EndWidthMultiplier             = lightning.EndWidthMultiplier;
            lightningParameters.Generations                    = lightning.Generations;
            lightningParameters.LifeTime                       = lifeTime;
            lightningParameters.ChaosFactor                    = lightning.ChaosFactor;
            lightningParameters.ChaosFactorForks               = lightning.ChaosFactorForks;
            lightningParameters.TrunkWidth                     = lightning.trunkWidthMaxRange.y;
            lightningParameters.Intensity                      = lightning.Intensity;
            lightningParameters.GlowIntensity                  = lightning.GlowIntensity;
            lightningParameters.GlowWidthMultiplier            = lightning.GlowWidthMultiplier;
            lightningParameters.Forkedness                     = lightning.Forkedness;
            lightningParameters.ForkLengthMultiplier           = lightning.ForkLengthMultiplier;
            lightningParameters.ForkLengthVariance             = lightning.ForkLengthVariance;
            lightningParameters.FadePercent                    = lightning.FadePercent;
            lightningParameters.FadeInMultiplier               = lightning.FadeInMultiplier;
            lightningParameters.FadeOutMultiplier              = lightning.FadeOutMultiplier;
            lightningParameters.FadeFullyLitMultiplier         = lightning.FadeFullyLitMultiplier;
            lightningParameters.GrowthMultiplier               = lightning.GrowthMultiplier;
            lightningParameters.ForkEndWidthMultiplier         = lightning.ForkEndWidthMultiplier;
            lightningParameters.DelayRange                     = lightning.DelayRange;
            lightningParameters.LightParameters                = lightning.LightParameters;
            lightningParameters.LightParameters.LightIntensity = lightning.lightIntensityRange.y;
            lightningParameters.LightParameters.LightRange     = lightning.lightRadiusRange.y;
            lightningParameters.StartVariance                  = lightning.StartVariance;
            lightningParameters.EndVariance                    = lightning.EndVariance;
        }
Esempio n. 2
0
        internal static void QueueLightningBolt(GameObject target, SpellLightning lightning, float delay)
        {
            var bolt = target.AddComponent <LightningBolt>();

            if (bolt)
            {
                bolt.InitializeParameters(lightning, delay);
            }
        }
Esempio n. 3
0
        private static void TryCharge(SpellCasterHand hand)
        {
            if (hand && hand.currentSpell is SpellLightning)
            {
                if (hand.bodyHand && hand.bodyHand.interactor && hand.bodyHand.interactor.grabbedHandle)
                {
                    bool           tryCast = hand.caster.creature == Creature.player && PlayerControl.GetHand(hand.bodyHand.side).indexCurl > 0.5f;
                    SpellLightning spell   = hand.currentSpell as SpellLightning;

                    if (hand.bodyHand.interactor.grabbedHandle.item)
                    {
                        if (tryCast || Electrical.ItemChargeSettings.autoCharge || hand.caster.creature != Creature.player)
                        {
                            float manaCost = Electrical.ItemChargeSettings.manaPerSec * Time.deltaTime;
                            if (hand.caster.currentMana > manaCost)
                            {
                                hand.caster.currentMana -= manaCost;
                                Item item = hand.bodyHand.interactor.grabbedHandle.item;
                                ChargeItem(item);

                                // If we're holding a bow, charge nocked arrows too
                                var bowString = item.GetComponentInChildren <BowString>();
                                if (bowString)
                                {
                                    if (bowString.nockedArrow)
                                    {
                                        ChargeItem(bowString.nockedArrow);
                                    }
                                }
                            }
                        }
                    }
                    if (hand.bodyHand.interactor.grabbedHandle is RagdollHandle && tryCast)
                    {
                        float manaCost = Electrical.RagdollChargeSettings.manaPerSec * Time.deltaTime;
                        if (hand.caster.currentMana > manaCost)
                        {
                            var          ragdollHandle = hand.bodyHand.interactor.grabbedHandle as RagdollHandle;
                            DamageStruct shockDamage   = spell.damageStruct;
                            shockDamage.damage         = Electrical.RagdollChargeSettings.damagePerSec * Time.deltaTime;
                            shockDamage.hitRagdollPart = ragdollHandle.ragdollPart;
                            CollisionStruct spellCollision = new CollisionStruct(shockDamage);
                            ragdollHandle.ragdollPart.ragdoll.creature.health.Damage(ref spellCollision);
                        }
                    }
                }
            }
        }