protected override void DoAction()
 {
     this.status = ChainLightningAction.EStatus.ES_Effect;
     this.startTimestamp = this.MinLiftTime;
     this.nextActor = base.variables.skillTarget;
     Vector3 vector = base.variables.skillCaster.transform.position;
     vector.y += this.YOffset;
     vector += base.variables.skillCaster.transform.forward * this.ForwardOffset;
     if (this.HandPrefab != null)
     {
         GameObject obj = UnityEngine.Object.Instantiate(this.HandPrefab, vector, base.variables.skillCaster.transform.rotation) as GameObject;
         UnityEngine.Object.Destroy(obj, this.HandLifeTime);
     }
 }
 protected override void OnDespawned()
 {
     base.OnDespawned();
     for (int i = 0; i < this.missileList.Count; i++)
     {
         if (this.missileList[i] != null && this.missileList[i].lightning != null)
         {
             UnityEngine.Object.Destroy(this.missileList[i].lightning.gameObject);
         }
     }
     this.oldActorList.Clear();
     this.missileList.Clear();
     this.nextActor = null;
     this.startTimestamp = 0f;
     this.status = ChainLightningAction.EStatus.ES_None;
     this.timer = 0f;
 }
 protected override void UpdateAction(float elapse)
 {
     this.startTimestamp -= elapse;
     if (this.status == ChainLightningAction.EStatus.ES_Destroy)
     {
         if (this.startTimestamp <= 0f)
         {
             base.Finish();
         }
         return;
     }
     this.UpdateLighting(elapse);
     if (this.status == ChainLightningAction.EStatus.ES_None)
     {
         this.status = ChainLightningAction.EStatus.ES_Finish;
         this.timer = 0f;
         return;
     }
     for (int i = 0; i < this.oldActorList.Count; i++)
     {
         if (this.oldActorList[i] != null && this.oldActorList[i].actor != null && !this.oldActorList[i].actor.IsDead && this.oldActorList[i].count < 2)
         {
             this.oldActorList[i].timer -= elapse;
             if (this.oldActorList[i].timer <= 0f)
             {
                 this.oldActorList[i].timer = this.MissileDeleteDelay + this.MissileInterval;
                 this.oldActorList[i].count++;
                 this.DoEffectOnTarget(this.oldActorList[i].actor, this.oldActorList[i].index);
             }
         }
     }
     if (this.timer > 0f)
     {
         this.timer -= elapse;
     }
     ChainLightningAction.EStatus eStatus = this.status;
     if (eStatus != ChainLightningAction.EStatus.ES_Effect)
     {
         if (eStatus == ChainLightningAction.EStatus.ES_Finish)
         {
             if (this.timer <= 0f)
             {
                 this.oldActorList.Clear();
                 for (int j = 0; j < this.missileList.Count; j++)
                 {
                     if (this.missileList[j] != null && this.missileList[j].lightning != null)
                     {
                         UnityEngine.Object.Destroy(this.missileList[j].lightning.gameObject);
                     }
                 }
                 this.missileList.Clear();
                 this.status = ChainLightningAction.EStatus.ES_Destroy;
             }
         }
     }
     else
     {
         if (base.variables == null || base.variables.skillCaster == null)
         {
             this.status = ChainLightningAction.EStatus.ES_Finish;
             this.timer = 0f;
             return;
         }
         if (base.variables.skillCaster.IsDead)
         {
             this.DoFinish();
             return;
         }
         if (this.timer <= 0f)
         {
             if (this.nextActor != null)
             {
                 ChainLightningAction.TargetData targetData = new ChainLightningAction.TargetData();
                 targetData.actor = this.nextActor;
                 targetData.timer = 0.1f;
                 targetData.count = 0;
                 targetData.index = this.damageIndex;
                 this.damageIndex++;
                 this.oldActorList.Add(targetData);
             }
             this.nextActor = this.GetNextJumpActorTarget();
             if (this.nextActor == null)
             {
                 this.DoFinish();
                 return;
             }
             this.timer = this.JumpInterval;
         }
     }
 }
 private void SetChainLightning(int index, Vector3 headPos, Vector3 tailPos, float elapse)
 {
     while (index >= this.missileList.Count)
     {
         ChainLightningAction.LightningData lightningData = new ChainLightningAction.LightningData();
         lightningData.lightning = this.CreateChainLightning();
         lightningData.lifeTime = 0f;
         lightningData.status = 0;
         this.missileList.Add(lightningData);
     }
     if (this.missileList[index] != null && this.missileList[index].lightning != null)
     {
         this.missileList[index].lightning.StartPos = headPos;
         this.missileList[index].lightning.EndPos = tailPos;
         this.missileList[index].lifeTime += elapse;
         if (this.missileList[index].status == 0)
         {
             if (this.missileList[index].lifeTime > this.MissileDeleteDelay)
             {
                 this.missileList[index].lightning.gameObject.SetActive(false);
                 this.missileList[index].lifeTime = 0f;
                 this.missileList[index].status = 1;
             }
         }
         else if (this.missileList[index].status == 1)
         {
             if (this.missileList[index].lifeTime > this.MissileInterval)
             {
                 this.missileList[index].lightning.gameObject.SetActive(true);
                 this.missileList[index].lifeTime = 0f;
                 this.missileList[index].status = 2;
             }
         }
         else if (this.missileList[index].lifeTime > this.MissileInterval)
         {
             UnityEngine.Object.Destroy(this.missileList[index].lightning.gameObject);
         }
     }
 }
 private void OnSpawned()
 {
     this.oldActorList.Clear();
     this.missileList.Clear();
     this.nextActor = null;
     this.startTimestamp = 0f;
     this.status = ChainLightningAction.EStatus.ES_None;
     this.timer = 0f;
     this.damageIndex = 0;
 }
 private void DoFinish()
 {
     if (this.status != ChainLightningAction.EStatus.ES_Effect)
     {
         return;
     }
     this.status = ChainLightningAction.EStatus.ES_Finish;
     this.timer = this.MissileDeleteDelay * 2f + this.MissileInterval;
     this.nextActor = null;
 }