Ejemplo n.º 1
0
    private void MakeFSM()
    {
        mFSMSystem = new SoldierFSMSystem();

        SoldierIdleState idleState = new global::SoldierIdleState(mFSMSystem, this);

        idleState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.Chase);

        SoldierChaseState chaseState = new global::SoldierChaseState(mFSMSystem, this);

        chaseState.AddTransition(SoldierTransition.NoEnemy_LostEnemy, SoldierStateID.Idle);
        chaseState.AddTransition(SoldierTransition.CanAttack, SoldierStateID.Attack);


        SoldierAttackState attactState = new global::SoldierAttackState(mFSMSystem, this);

        attactState.AddTransition(SoldierTransition.NoEnemy_LostEnemy, SoldierStateID.Idle);
        attactState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.Chase);



        //mFSMSystem.AddState(idleState);
        //mFSMSystem.AddState(chaseState);
        //mFSMSystem.AddState(attactState);
        mFSMSystem.AddState(idleState, chaseState, attactState);
    }
Ejemplo n.º 2
0
    private void MakeFSM()
    {
        mFSMSystem = new SoldierFSMSystem();

        SoldierFSMState standbyState = new StateSoldierStandby(mFSMSystem, this);

        standbyState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.ChaseState);

        SoldierFSMState chaseState = new StateSoldierChase(mFSMSystem, this);

        chaseState.AddTransition(SoldierTransition.DonotSeeEnemy, SoldierStateID.StandbyState);
        chaseState.AddTransition(SoldierTransition.EnemyInTheAttackRange, SoldierStateID.AttackState);

        SoldierFSMState attackState = new StateSoldierAttack(mFSMSystem, this);

        attackState.AddTransition(SoldierTransition.DonotSeeEnemy, SoldierStateID.StandbyState);
        attackState.AddTransition(SoldierTransition.EnemyOutOfTheAttackRange, SoldierStateID.ChaseState);

        mFSMSystem.AddState(standbyState);
        mFSMSystem.AddState(chaseState);
        mFSMSystem.AddState(attackState);
    }
Ejemplo n.º 3
0
    private void MakeFsm()
    {
        Fsm = new SoldierFSMSystem();

        SoldierIdleState idle = new SoldierIdleState(Fsm, this);

        idle.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.Chase);

        SoldierChaseState chase = new SoldierChaseState(Fsm, this);

        chase.AddTransition(SoldierTransition.NoEnemy, SoldierStateID.Idle);
        chase.AddTransition(SoldierTransition.CanAttack, SoldierStateID.Attack);

        SoldierAttackState attack = new SoldierAttackState(Fsm, this);

        attack.AddTransition(SoldierTransition.NoEnemy, SoldierStateID.Idle);
        attack.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.Chase);

        Fsm.AddState(idle, chase, attack);
    }
Ejemplo n.º 4
0
    private void MakeFSM()
    {
        mFSMSystem = new SoldierFSMSystem();

        SoldierIdleState idleState = new SoldierIdleState(mFSMSystem, this);

        idleState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateType.Chase);


        SoldierChaseState chaseState = new SoldierChaseState(mFSMSystem, this);

        chaseState.AddTransition(SoldierTransition.NoEnemy, SoldierStateType.Idle);
        chaseState.AddTransition(SoldierTransition.CanAttack, SoldierStateType.Attack);


        SoldierAttackState attackState = new SoldierAttackState(mFSMSystem, this);

        attackState.AddTransition(SoldierTransition.NoEnemy, SoldierStateType.Idle);
        attackState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateType.Chase);

        mFSMSystem.AddState(idleState, chaseState, attackState);
    }
Ejemplo n.º 5
0
    /// <summary>
    /// 设置切换映射关系
    /// </summary>
    /// <param name="mapDic">切换关系列表</param>
    /// <param name="triggerFuncDic">节点具体行为列表</param>
    public void SetStateMappingConfig(Dictionary <SoldierStateID, List <SoldierStateID> > mapDic, Dictionary <SoldierTriggerID, Func <SoldierFSMSystem, bool> > triggerFuncDic)
    {
        if (mapDic == null)
        {
            return;
        }

        foreach (var kv in mapDic)
        {
            var keyType        = SoldierFSMFactory.GetStateTypeByStateId(kv.Key);
            var keyStateInvoke = (SoldierFSMState)keyType.InvokeMember("", BindingFlags.Public | BindingFlags.CreateInstance,
                                                                       null, null, null);

            foreach (var mapStateId in kv.Value)
            {
                // 设置映射关系
                keyStateInvoke.AddMappingTrigger(SoldierFSMFactory.GetTriggerByStateId(mapStateId),
                                                 triggerFuncDic[SoldierFSMFactory.GetTriggerByStateId(mapStateId)]);
            }
            // 添加状态
            fsm.AddState(keyStateInvoke);
        }
    }