Example #1
0
    /// <summary>
    /// 逃跑,顺便可以放个Buff
    /// </summary>
    /// <param name="skillId"></param>
    /// <returns></returns>
    public BehaviourReturnCode ActionEscape(uint buffId)
    {
        BehaviourEscapeFiniteState escapeState = RunningProperty.AI.Machine.GetState <BehaviourEscapeFiniteState>(BehaviourMachine.State.ESCAPE);

        if (escapeState != null)
        {
            escapeState.EnterBuffId = buffId;
        }

        RunningProperty.AI.Machine.SwitchToState(BehaviourMachine.State.ESCAPE);

        float ratio = (float)((double)(RunningProperty.SelfActor.FullLife - RunningProperty.SelfActor.CurLife) / (double)RunningProperty.SelfActor.FullLife);
        BehaviourMonsterAI monsterAI = RunningProperty.AI as BehaviourMonsterAI;

        if (monsterAI.EscapeHpRationBeacon <= 0.0f)
        {
            monsterAI.CurrentEscapeCount = int.MaxValue;
        }
        else
        {
            monsterAI.CurrentEscapeCount = (int)(ratio / monsterAI.EscapeHpRationBeacon);
        }

        return(BehaviourReturnCode.Success);
    }
Example #2
0
    public BehaviourMachine(BehaviourAI ai)
    {
        mAI = ai;

        mStandState       = new BehaviourStandFiniteState(ai.RunningProperty);
        mWalkState        = new BehaviourWalkFiniteState(ai.RunningProperty);
        mAttackState      = new BehaviourAttackFiniteState(ai.RunningProperty);
        mRunState         = new BehaviourRunFiniteState(ai.RunningProperty);
        mChaseTargetState = new BehaviourChaseTargetFiniteState(ai.RunningProperty);
        mPatrolState      = new BehaviourPatrolFiniteState(ai.RunningProperty);
        mFollowState      = new BehaviourFollowFiniteState(ai.RunningProperty);
        mEmptyState       = new BehaviourEmptyFiniteState(ai.RunningProperty);
        mEscapeState      = new BehaviourEscapeFiniteState(ai.RunningProperty);

        mMachine.AddState(State.WALK, mWalkState);
        mMachine.AddState(State.RUN, mRunState);
        mMachine.AddState(State.STAND, mStandState);
        mMachine.AddState(State.ATTACK, mAttackState);
        mMachine.AddState(State.CHASETARGET, mChaseTargetState);
        mMachine.AddState(State.PATROL, mPatrolState);
        mMachine.AddState(State.FOLLOW, mFollowState);
        mMachine.AddState(State.EMPTY, mEmptyState);
        mMachine.AddState(State.ESCAPE, mEscapeState);
    }