protected override ErrorCode doStart(ActionInitParam param) { ActionSkillInitParam asInit = param as ActionSkillInitParam; mSkillUsing = asInit.skill; mSkillUseStateLoopLeft = mSkillUsing.skillRes.skillUseStateLoopLeft; mTaskManager = new SkillUtilities.TaskManager(onTaskFinished); mOwner.EnterFightState(); if (IsRegularAttack) { //如果是普通攻击,武器播放射击动画 mOwner.PlayWeaponAnim(AnimationNameDef.WeaponFire); } if (mOwner.IsCanRotation() && mSkillUsing.skillRes.autoAim) { ownerLookAt(asInit.targetPosition); } SkillTargetPosition = asInit.targetPosition; switch2State(ActionSkillState.Invalid); return(canEnterState(ActionSkillState.Charging, asInit.targetPosition)); }
protected override ErrorCode canStart(ActionInitParam param) { // 距离等检测放到技能使用时. ActionSkillInitParam skillParam = param as ActionSkillInitParam; if (skillParam == null) { return(ErrorCode.LogicError); } return(ErrorCode.Succeeded); }
/// <summary> /// 创建技能Action. 开始向targetPosition使用技能. /// </summary> /// <remarks> /// <para>普通攻击可以被其他非普通攻击, 无条件打断</para> /// <para>非普通攻击只有在准备阶段, 且配置中指定了可被打断才可以被打断</para> /// <para>非普通攻击被相同的技能打断, 表示从使用阶段切换到使用阶段</para> /// 非普通攻击被其他技能打断, 直接停止当前技能, 开始新的技能. /// </remarks> public static ErrorCode StartSkillAction(BattleUnitActionCenter actionCenter, BattleUnitSkill skill, Vector3 targetPosition) { if (skill == null) { return(ErrorCode.InvalidParam); } ActionSkill currentAs = actionCenter.GetActionByType(ActionTypeDef.ActionTypeSkill) as ActionSkill; ErrorCode err = ErrorCode.Succeeded; if (currentAs == null) { ActionSkillInitParam param = new ActionSkillInitParam(); param.skill = skill; param.targetPosition = targetPosition; err = actionCenter.StartAction(param); if (err != ErrorCode.Succeeded) { return(err); } } else { // 如果此时的currentAs不为null, 那么它必然为一个正在准备状态的技能且可以切换状态. #if UNITY_EDITOR if (!(currentAs.InChargingState && currentAs.Interruptable)) { ErrorHandler.Parse(ErrorCode.LogicError, "技能处于错误的状态."); } #endif err = currentAs.EnterUseState(targetPosition); } return(err); }