示例#1
0
 // Update is called once per frame
 void Update()
 {
     FSM.Update();
     if (Input.GetKey(KeyCode.Q))
     {
         FSM.SetState(0);
     }
     if (Input.GetKey(KeyCode.W))
     {
         FSM.SetState(1);
     }
     if (Input.GetKey(KeyCode.E))
     {
         FSM.SetState(2);
     }
 }
示例#2
0
    // Update is called once per frame
    public override void Update()
    {
        base.Update();
        FSM.Update(); //Chequea que no haya ocurrido ningun cambio en la FSM.
        //-------------Line of Sight----------------------------------------------------------------------------
        CheckForEnemies();
        //---------------------State triggers-------------------------------------------------------------------

        if (CurrentTarget != null)
        {
            float Dist = Vector3.Distance(transform.position, CurrentTarget.transform.position);
            //Si esta dentro de mi rango, lo Ataco.
            if (Dist <= BSO_AttackRange)
            {
                FSM.SetState(2); //Attack Current Target
            }
            //Si hay al menos un objetivo visible y esta mas lejos que mi rango de ataque.
            if (Dist > BSO_AttackRange && CurrentTarget != null)
            {
                FSM.SetState(1); //Pursuit Target.
            }
        }
    }
示例#3
0
    void Awake()
    {
        //Inicializo la state machine y añado los estados.
        FSM = new GenericFSM();
        object[] BattleStats = { BSO_BasicDamage, BSO_MagicPower, BSO_Strenght, BSO_AttackSpeed, BSO_AttackRange };
        EstadosDelNpc = new List <State>
        {
            new StateIdle(gameObject),                //0
            new StatePursuit(gameObject),             //1
            new StateAttack(gameObject, BattleStats), //2
        };
        //Para añadir un Estado necesito un entero(índice) + Un action para Awake, Execute y Sleep;
        for (int i = 0; i < EstadosDelNpc.Count; i++)
        {
            FSM.AddState(i, EstadosDelNpc[i].execute, EstadosDelNpc[i].awake, EstadosDelNpc[i].sleep);
        }

        FSM.SetState(0);
    }