public TeleportAroundTargetLogic(AroundTargetMode info, Character caster,
                                         Environment environment, Skill skill)
        {
            this.info        = info;
            this.caster      = caster;
            this.environment = environment;
            this.skill       = skill;

            Entity entity = caster.GameObject().GetComponent <EntityReference>().Entity;

            movementComponent = entity.GetComponent <MovementComponent>();
            StatsComponent statsComponent = entity.GetComponent <StatsComponent>();

            invisibleStats      = statsComponent.CharacterStats.FindStats(StatsType.Invisible);
            gameObjectComponent = (GameObjectComponent)entity.GetComponent <EntityGameObjectComponent>();
            FrameAndSecondsConverter fasc = FrameAndSecondsConverter._30Fps;

            delay           = fasc.FramesToSeconds(info.delay);
            prepareDelay    = fasc.FramesToSeconds(info.prepareDelay);
            prepareEndDelay = delay + info.duration - fasc.FramesToSeconds(info.endPreceding);
            if (delay == 0)
            {
                skill.TriggerEventWithId(info.prepareEventId);
                Perform();
                isPrepareEventDispatched = true;
                prepareDispatchCount++;
            }

            if (prepareDelay == 0 && prepareDispatchCount < info.count)
            {
                skill.TriggerEventWithId(info.prepareEventId);
                isPrepareEventDispatched = true;
                prepareDispatchCount++;
            }
        }
            public Chaining(AroundTargetMode info, Character caster,
                            Environment environment, Skill skill,
                            Vector2 originalStartPositionOfLightning,
                            Vector2 originalEndPositionOfLightning)
            {
                this.info        = info;
                this.caster      = caster;
                this.environment = environment;
                this.skill       = skill;
                this.originalStartPositionOfLightning = originalStartPositionOfLightning;
                this.originalEndPositionOfLightning   = originalEndPositionOfLightning;

                GameObject chainingPrefab = info.ShowChainingPrefab();

                if (chainingPrefab != null)
                {
                    lightningVfx            = environment.InstantiateGameObject(chainingPrefab);
                    lightningStart          = lightningVfx.transform.Find("LightningStart");
                    lightningStart.position = originalStartPositionOfLightning;
                    lightningEnd            = lightningVfx.transform.Find("LightningEnd");
                    lightningEnd.position   = originalEndPositionOfLightning;
                }

                isLightningExpand = info.cExpandDuration > 0;
                if (isLightningExpand && lightningEnd != null)
                {
                    lightningEnd.position = originalStartPositionOfLightning;
                }
            }