using System.Collections.Generic; using UnityEngine; public class ChainLightningBehavior : RuntimeBehavior { public int maxChains = 3; public float chainRange = 8f; public float damageMultiplier = 0.5f; // Each chain does 50% of original damage public ChainLightningBehavior() { Trigger = BehaviorTrigger.OnHit; BehaviorName = "Chain Lightning"; } public override void Execute(RuntimeAbilityInstance ability, Taggable user, Transform target, Vector3 point) { if (target == null) return; var currentTarget = target.GetComponent(); var chainedTargets = new List { currentTarget }; for (int i = 0; i < maxChains; i++) { var nextTarget = FindNextChainTarget(currentTarget.transform.position, chainedTargets); if (nextTarget == null) break; chainedTargets.Add(nextTarget); // Apply reduced damage var health = nextTarget.GetComponent(); if (health != null) { float chainDamage = CalculateChainDamage(ability, i + 1); health.ChangeValue(-chainDamage); } currentTarget = nextTarget; } } private Taggable FindNextChainTarget(Vector3 position, List excludeTargets) { var colliders = Physics.OverlapSphere(position, chainRange); foreach (var collider in colliders) { var target = collider.GetComponent(); if (target != null && !excludeTargets.Contains(target)) { return target; } } return null; } private float CalculateChainDamage(RuntimeAbilityInstance ability, int chainNumber) { // This would need to be adapted to your damage system // For now, just return a reduced amount return 50f * Mathf.Pow(damageMultiplier, chainNumber); } public override RuntimeBehavior Clone() { return new ChainLightningBehavior { maxChains = this.maxChains, chainRange = this.chainRange, damageMultiplier = this.damageMultiplier }; } }