Esempio n. 1
0
    public void CrearEstadoIdle()
    {
        // Este estado lo usa el agente para calcular un plan
        idleState = (fsm, gameObj) =>
        {
            // Planeación goap
            // Obtener el estado del mundo
            Dictionary <string, object> worldState = goapData.GetWorldState();
            // Obtener la meta del agente
            Dictionary <string, object> goal = goapData.CreateGoalState();

            // Crear un plan
            Queue <GoapAction> plan = Planeador.ElPlan(
                gameObject, AccionesDisponibles, worldState, goal);

            // ¿Logramos tener un plan?
            if (plan != null)
            {
                Debug.Log("Tengo un plan!");
                AccionesActuales = plan;
                goapData.PlanFound(goal, plan);

                maquinaDeEstados.popState();          // Saca el estado idle
                maquinaDeEstados.pushState(ActState); // pasa al estado de actuar
            }
            else
            {
                Debug.Log("No tengo plan :(");
                goapData.PlanFailed(goal);

                maquinaDeEstados.popState();
                maquinaDeEstados.pushState(idleState); // Vuelva a intentar calcular un plan
            }
        };
    }