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); }
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); }
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; }