Beispiel #1
0
        public static void LookAtTargetActive(TimeLinePlayer linePlayer, LayoutBase layoutBase)
        {
            var per = linePlayer.Releaser.Controllor.Perception as BattlePerception;

            per.LookAtCharacter(linePlayer.Releaser.ReleaserTarget.Releaser,
                                linePlayer.Releaser.ReleaserTarget.ReleaserTarget);
        }
Beispiel #2
0
        public static void ParticleActive(TimeLinePlayer linePlayer, LayoutBase layoutBase)
        {
            var layout   = layoutBase as ParticleLayout;
            var per      = linePlayer.Releaser.Controllor.Perception as BattlePerception;
            var particle = per.CreateParticlePlayer(linePlayer.Releaser, layout);

            if (particle == null)
            {
                return;
            }
            switch (layout.destoryType)
            {
            case  ParticleDestoryType.LayoutTimeOut:
                linePlayer.AttachParticle(particle);
                break;

            case ParticleDestoryType.Time:
                particle.AutoDestory(layout.destoryTime);
                break;

            case ParticleDestoryType.Normal:
                //自动销亡
                break;
            }
        }
Beispiel #3
0
        public static void MissileActive(TimeLinePlayer linePlayer, LayoutBase layoutBase)
        {
            var layout  = layoutBase as MissileLayout;
            var per     = linePlayer.Releaser.Controllor.Perception as BattlePerception;
            var missile = per.CreateMissile(layout, linePlayer.Releaser);

            linePlayer.Releaser.AttachElement(missile);
        }
Beispiel #4
0
        public static void CallUnitActive(TimeLinePlayer linePlayer, LayoutBase layoutBase)
        {
            var unitLayout = layoutBase as CallUnitLayout;
            var releaser   = linePlayer.Releaser;
            var charachter = releaser.ReleaserTarget.Releaser;
            var per        = releaser.Controllor.Perception as BattlePerception;
            int level      = unitLayout.level;

            switch (unitLayout.valueFrom)
            {
            case Proto.GetValueFrom.CurrentConfig:
                break;

            case Proto.GetValueFrom.MagicLevelParam1:
            {
                var param1 = releaser[0];
                if (string.IsNullOrEmpty(param1))
                {
                    return;
                }
                level = Convert.ToInt32(param1);
            }
            break;
            }

            //判断是否达到上限
            if (unitLayout.maxNum <= releaser.UnitCount)
            {
                return;
            }

            var data = ExcelToJSONConfigManager
                       .Current.GetConfigByID <CharacterData>(unitLayout.characterID);
            var magics = ExcelToJSONConfigManager
                         .Current.GetConfigs <CharacterMagicData>(t => t.CharacterID == unitLayout.characterID);

            var unit = per.CreateCharacter(
                level,
                data,
                magics.ToList(),
                charachter.TeamIndex,
                charachter.View.Transform.position,
                charachter.View.Transform.forward,
                -1
                );

            //无限视野
            unit[Proto.HeroPropertyType.ViewDistance].SetAppendValue(100000);
            releaser.AttachElement(unit, unitLayout.time);
            releaser.OnEvent(Layout.EventType.EVENT_UNIT_CREATE);
            per.ChangeCharacterAI(data.AIResourcePath, unit);
        }
Beispiel #5
0
        public static void EnableLayout(LayoutBase layout, TimeLinePlayer player)
        {
            MethodInfo m;

            if (_handler.TryGetValue(layout.GetType(), out m))
            {
                m.Invoke(null, new object[] { player, layout });
            }
            else
            {
                throw new Exception("No Found handle Type :" + layout.GetType());
            }
        }
Beispiel #6
0
        public static void MotionActive(TimeLinePlayer linePlayer, LayoutBase layoutBase)
        {
            var layout   = layoutBase as MotionLayout;
            var releaser = linePlayer.Releaser;
            var per      = linePlayer.Releaser.Controllor.Perception as BattlePerception;

            if (layout.targetType == Layout.TargetType.Releaser)
            {
                per.PlayMotion(releaser.ReleaserTarget.Releaser, layout.motionName);
            }
            else if (layout.targetType == Layout.TargetType.Target)
            {
                if (releaser.ReleaserTarget.ReleaserTarget == null)
                {
                    return;
                }
                per.PlayMotion(releaser.ReleaserTarget.ReleaserTarget, layout.motionName);
            }
        }
Beispiel #7
0
        public static void DamageActive(TimeLinePlayer linePlayer, LayoutBase layoutBase)
        {
            var releaser = linePlayer.Releaser;
            var layout   = layoutBase as DamageLayout;

            BattleCharacter orginTarget = null;

            if (layout.target == Layout.TargetType.Releaser)
            {
                orginTarget = releaser.ReleaserTarget.Releaser;
            }
            else if (layout.target == Layout.TargetType.Target)
            {
                //release At Position?
                if (releaser.ReleaserTarget.ReleaserTarget == null)
                {
                    return;
                }
                orginTarget = releaser.ReleaserTarget.ReleaserTarget;
            }
            if (orginTarget == null)
            {
                throw new Exception("Do not have target of orgin. type:" + layout.target.ToString());
            }
            var offsetPos = new UVector3(layout.offsetPosition.x,
                                         layout.offsetPosition.y, layout.offsetPosition.z);
            var per     = releaser.Controllor.Perception  as BattlePerception;
            var targets = per.FindTarget(orginTarget,
                                         layout.fiterType,
                                         layout.damageType,
                                         layout.radius,
                                         layout.angle,
                                         layout.offsetAngle,
                                         offsetPos, releaser.ReleaserTarget.Releaser.TeamIndex);

            if (string.IsNullOrEmpty(layout.effectKey))
            {
                return;
                //throw new Exception ("No Found effect key!");
            }

            //完成一次目标判定
            if (targets.Count > 0)
            {
                if (layout.effectType == EffectType.EffectGroup)
                {
                    var group = linePlayer.TypeEvent.FindGroupByKey(layout.effectKey);
                    if (group == null)
                    {
                        return;
                    }
                    //相应效果处理
                    foreach (var i in group.effects)
                    {
                        foreach (var t in targets)
                        {
                            EffectBaseLogic.EffectActive(t, i, releaser);
                        }
                    }
                }
            }
        }