Beispiel #1
0
    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));
    }
Beispiel #2
0
    protected override ErrorCode canStart(ActionInitParam param)
    {           // 距离等检测放到技能使用时.
        ActionSkillInitParam skillParam = param as ActionSkillInitParam;

        if (skillParam == null)
        {
            return(ErrorCode.LogicError);
        }

        return(ErrorCode.Succeeded);
    }
Beispiel #3
0
    /// <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);
    }