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; }
internal static void QueueLightningBolt(GameObject target, SpellLightning lightning, float delay) { var bolt = target.AddComponent <LightningBolt>(); if (bolt) { bolt.InitializeParameters(lightning, delay); } }
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); } } } } }