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++;
            }
        }
Exemple #2
0
        public SpawnCharacter(SpawnCharacterAction config, EntitySpawner entitySpawner, Character caster,
                              TemplateArgs args, Environment environment, SkillId skillId,
                              HeroAndMonsterConfig hamc)
        {
            this.config        = config;
            this.entitySpawner = entitySpawner;
            this.caster        = caster;
            this.args          = args;
            this.environment   = environment;
            this.skillId       = skillId;
            this.hamc          = hamc;

            entityGroupOfCaster = caster.GameObject().GetComponent <EntityReference>().Entity.Group;
            FrameAndSecondsConverter fasc = FrameAndSecondsConverter._30Fps;

            spawnDelay = fasc.FramesToSeconds(config.delay);
            vfxDelay   = fasc.FramesToSeconds(config.vfxDelay);
            defaultEntityGroupOfMinion = hamc.FindBasicStats(new CharacterId(config.groupId, config.subId)).team;

            if (config.spawnCount > 0)
            {
                Vector3 spawnPosition = CalculateSpawnPosition();
                spawnPositions.Add(spawnPosition);
                if (spawnDelay <= 0)
                {
                    Spawn(spawnPosition);
                }

                if (vfxDelay <= 0)
                {
                    PlayVfx(spawnPosition);
                }
            }
        }
        public IkModifier(ModifierInfo mi, Entity casterEntity, Entity targetEntity,
                          Environment environment,
                          CollectionOfInteractions modifierInteractionCollection) : base(mi, casterEntity, targetEntity, environment, modifierInteractionCollection)
        {
            this.environment = environment;
            this.info        = (IkInfo)mi;
            mapCollider      = environment.MapColliders();

            caster = casterEntity.GetComponent <SkillComponent>().Character;
            FrameAndSecondsConverter fasc = FrameAndSecondsConverter._30Fps;

            aimAt                    = 0;
            aimDuration              = fasc.FramesToSeconds(info.Config.aimDuration);
            aimLogicDuration         = fasc.FramesToSeconds(info.Config.aimLogicDuration);
            aimInterpolationDuration = fasc.FramesToSeconds(info.Config.aimInterpolationDuration);
            startupAt                = aimAt + aimDuration;
            startupDuration          = fasc.FramesToSeconds(info.Config.startupDuration);
            activeAt                 = startupAt + startupDuration;
            activeDuration           = fasc.FramesToSeconds(info.Config.activeDuration);
            recoveryAt               = activeAt + activeDuration;
            recoveryDuration         = fasc.FramesToSeconds(info.Config.recoveryDuration);
            totalDuration            = recoveryAt + recoveryDuration;
            target                   = environment.FindNearbyCharacters(
                caster, Vector3.zero, 999,
                new[] { FindingFilter.ExcludeMe, FindingFilter.ExcludeDead, FindingFilter.ExcludeAllies }
                )[0];
            fabrik = caster.GameObject().GetComponent <FABRIK>();
            IKSolverFABRIK solverFabrik = (IKSolverFABRIK)fabrik.GetIKSolver();

            ikJoint       = solverFabrik.bones[solverFabrik.bones.Length - 1].transform;
            ikJointParent = solverFabrik.bones[solverFabrik.bones.Length - 2].transform;
        }
Exemple #4
0
        public DashShadowVfxLogic(VfxAction.DashShadowVfx dsv, Environment environment, Character caster)
        {
            this.dsv         = dsv;
            this.environment = environment;
            this.caster      = caster;

            GameObject go = caster.GameObject();
            DashShadow ds = go.GetComponent <DashShadow>();
            List <DashShadow.Illusion> pool = null;

            if (ds)
            {
                pool = ds.pool;
                GameObject.Destroy(ds);
            }
            ds = go.AddComponent <DashShadow>();
            if (pool != null)
            {
                ds.pool = pool;
            }

            dashShadow = ds;

            FrameAndSecondsConverter fasc = FrameAndSecondsConverter._30Fps;

            ds.prefab            = dsv.ShowShadowPrefab();
            ds.MaxInstances      = dsv.maxShadow;
            ds.Rate              = dsv.spawnRate;
            ds.InstanceLiveTime  = fasc.FramesToSeconds(dsv.shadowTtl);
            ds.ReservedTime      = fasc.FramesToSeconds(dsv.reservedTime);
            ds.material          = dsv.ShowShadowMaterial();
            ds.AlphaName         = dsv.alphaName;
            ds.AlphaOverLifeTime = dsv.alphaOverLifetime;
            ds.frameDatas        = new DashShadow.IllusionFrameData[dsv.frameDatas.Count];
            for (int i = 0; i < ds.frameDatas.Length; i++)
            {
                DashShadow.IllusionFrameData ifd = new DashShadow.IllusionFrameData();
                ifd.animationClip = new AnimationClip();
                VfxAction.ShadowFrameData sfd = dsv.frameDatas[i];
                ifd.animationClip.name = sfd.anim;
                ifd.startFrame         = sfd.start;
                ifd.endFrame           = sfd.end;
                ds.frameDatas[i]       = ifd;
            }
            ds.changeBodyMaterial   = dsv.bodyMat;
            ds.bodyRendererName     = dsv.bodyRendererName;
            ds.changeHeadMaterial   = dsv.headMat;
            ds.headRendererName     = dsv.headRendererName;
            ds.changeWeaponMaterial = dsv.weaponMat;
            ds.weaponRendererName   = dsv.weaponRendererName;
            ds.Start_(null, go.GetComponentInChildren <Animation>());
            ds.SetReady(true);
        }
        public TeleportKeepDistanceLogic(KeepDistanceMode info, Skill skill, Environment environment,
                                         Character caster)
        {
            this.info        = info;
            this.skill       = skill;
            this.environment = environment;
            this.caster      = caster;

            FrameAndSecondsConverter fasc = FrameAndSecondsConverter._30Fps;

            lockTargetAt = fasc.FramesToSeconds(info.targetLockOffset);
            teleportAt   = fasc.FramesToSeconds(info.teleportOffset);
            notifyAt     = fasc.FramesToSeconds(info.notiOffset);
        }
        private static ModifierInfo CreateLockFrameInfo(Params p)
        {
            LockFrameModifierConfig  lfmc   = (LockFrameModifierConfig)p.baseModifierConfig;
            FrameAndSecondsConverter _30fps = FrameAndSecondsConverter._30Fps;

            return(new LockFrameInfo(
                       Target.Target, lfmc.successRate, p.delayToApply,
                       _30fps.FramesToSeconds(lfmc.delayInFramesForCaster),
                       _30fps.FramesToSeconds(lfmc.delayInFramesForTarget),
                       _30fps.FloatFramesToSeconds(lfmc.durationInFramesForCaster),
                       _30fps.FloatFramesToSeconds(lfmc.durationInFramesForTarget), lfmc.lockGlobally,
                       _30fps.FramesToSeconds(lfmc.delayInFramesForGlobal),
                       _30fps.FramesToSeconds(lfmc.durationInFramesForGlobal), p.baseModifierConfig.ListEnabledVfx(),
                       p.baseModifierConfig.lifetimes
                       ));
        }
Exemple #7
0
        protected override void OnDelayedAttachAsMain(Character target)
        {
            // DLog.Log("debug RecastModifier:OnDelayedAttachAsMain()");
            FrameAndSecondsConverter fasc         = FrameAndSecondsConverter._30Fps;
            AcceptWindow             recastWindow = new AcceptWindow(
                fasc.FloatFramesToSeconds(info.Rmc.@from), fasc.FloatFramesToSeconds(info.Rmc.to)
                );

            recastLifetime.EnableChecking();
            SetRecastWindow(recastWindow);
            SetMaxRecastCountWindow(info.Rmc.max);

            if (recastLifetime.IsEnd())
            {
                target.RemoveModifier(this);
            }
        }
        public ModifierInfo CreateFrom(Skill parentSkill, BaseModifierConfig baseModifierConfig,
                                       Environment environment, float projectileAge = 0)
        {
            FrameAndSecondsConverter _30fps = FrameAndSecondsConverter._30Fps;
            float        delayToApply       = _30fps.FramesToSeconds(baseModifierConfig.delayToApplyInFrames);
            ModifierType modifierType       = baseModifierConfig.ShowModifierType();

            if (!subFactories.ContainsKey(modifierType))
            {
                throw new Exception("Missing logic to create modifier info of type " + modifierType);
            }

            Params p = new Params(
                baseModifierConfig, delayToApply, projectileAge, parentSkill
                );

            return(subFactories[modifierType](p));
        }
        /*private float playIdleAnimationAt;
         * private bool isIdleAnimationPlayed;*/

        public SleepModifier(ModifierInfo info, Entity casterEntity, Entity targetEntity,
                             Environment environment,
                             CollectionOfInteractions modifierInteractionCollection,
                             Skill parentSkill) : base(info, casterEntity, targetEntity, environment, modifierInteractionCollection)
        {
            this.info         = (SleepInfo)info;
            this.casterEntity = casterEntity;
            this.targetEntity = targetEntity;
            this.parentSkill  = parentSkill;

            FrameAndSecondsConverter fasc = FrameAndSecondsConverter._30Fps;

            playLoopAt               = fasc.FramesToSeconds(this.info.Smc.loopFrame);
            crossfadeDuration        = fasc.FramesToSeconds(this.info.Smc.xfadeDur);
            targetAnimationComponent = targetEntity.GetComponent <AnimationComponent>();
            targetMovementComponent  = targetEntity.GetComponent <MovementComponent>();
            targetCharacter          = targetEntity.GetComponent <SkillComponent>().Character;
            targetStatsComponent     = targetEntity.GetComponent <StatsComponent>();
            casterStatsComponent     = casterEntity.GetComponent <StatsComponent>();

            /*float duration = FrameAndSecondsConverter._30Fps.FramesToSeconds(this.info.Smc.duration);
             * playIdleAnimationAt = Mathf.Max(0, duration - crossfadeDuration);*/
        }