Example #1
0
        public void SkillMovingAOE(AnimActionParam param, KSkillDisplay skillDisplay, bool isPushStack = false)
        {
            ActionMovingAOE action = new ActionMovingAOE(Owner);

            action.InitParam(param, skillDisplay);
            action.IsPushStack = isPushStack;
            if (!action.IsCanActive())
            {
                return;
            }
            Owner.DispatchEvent(ControllerCommand.SetActiveAction, action);
        }
Example #2
0
        public void UpdateMoveAoe(ActionMovingAOE aoe)
        {
            if (!ticker.IsEnable())
            {
                return;
            }
            ticker.Restart();
            List <SceneEntity> entitys = SceneLogic.GetInstance().GetAllSceneObject(KHeroObjectType.hotMonster);
            float       distance       = float.MaxValue;
            SceneEntity aim            = null;
            Vector3     selfPosition   = Owner.Position;

            foreach (SceneEntity entity in entitys)
            {
                if (entity.property.isDeadTemp)
                {
                    continue;
                }
                float dis = Vector3.Distance(entity.transform.position, selfPosition);
                if (dis < distance)
                {
                    aim      = entity;
                    distance = dis;
                }
            }
            if (null == aim)
            {
                return;
            }
            float aimDis = Vector3.Distance(aim.Position, Owner.Position) - 2f;

            if (aimDis < 0)
            {
                return;
            }
            Vector3 fw = aim.Position - Owner.Position;

            fw.Normalize();
            aim.Position = Owner.Position + (fw * aimDis);
            aoe.MoveToDistance(aim.Position, Owner.property.speed);
        }
Example #3
0
        public override void DoUpdate()
        {
            int _listLen = SkillLogic.GetInstance().activeSkillList.Length;

            if (_listLen > skillList.Length)
            {
                skillList = new uint[_listLen - 1];
                Array.Copy(SkillLogic.GetInstance().activeSkillList, 1, skillList, 0, _listLen - 1);
            }

            if (!Owner.property.CmdAutoAttack)
            {
                return;
            }
            if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.FLY)
            {
                return;
            }
            if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.ANIM)
            {
                if (Owner.ActiveAction is ActionMovingAOE)
                {
                    ActionMovingAOE aoe = (ActionMovingAOE)Owner.ActiveAction;
                    UpdateMoveAoe(aoe);
                    return;
                }
                else
                {
                    if (!Owner.ActiveAction.IsCanFinish())
                    {
                        return;
                    }
                }
            }
            else if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.OPERA)
            {
                return;
            }

            if (!SelectAim())
            {
                return;
            }

            int _len = skillList.Count();

            if (_len > 0)
            {
                curIndex = curIndex % +_len;
                for (int i = 0; i < _len; i++)
                {
                    uint skillId = skillList[curIndex];
                    try
                    {
                        if (!SkillLogic.GetInstance().RequestSkill((uint)skillId))
                        {
                            curIndex = (curIndex + 1) % +_len;
                            continue;
                        }
                        KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(skillId, Owner.property.tabID);
                        if (!Owner.ActiveAction.TryFinish())
                        {
                            continue;
                        }
                        if (skillDisplay.Opera.CompareTo("TARGET") == 0)
                        {
                            SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target);
                            Owner.property.AutoAttack = false;
                            return;
                        }
                        else if (skillDisplay.Opera.CompareTo("NONE") == 0)
                        {
                            SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target);
                            return;
                        }
                        else if (skillDisplay.Opera.CompareTo("TARGET_DIR") == 0)
                        {
                            SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target);
                            Owner.property.AutoAttack = false;
                            return;
                        }
                    }
                    catch (NullReferenceException e)
                    {
                    }
                }
            }
            OperaAttack action = new OperaAttack(Owner);

            action.IsPushStack = true;
            KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill((uint)Owner.Job, 1);

            if (null == skill)
            {
                return;
            }
            action.deltaSpace = ((float)skill.CastRange) / 100f;
            action.target     = Owner.property.target;
            EventDispatcher.GameWorld.DispatchEvent(ControllerCommand.CHANGE_TARGET);
            Owner.ActiveAction        = action;
            Owner.property.AutoAttack = false;
        }