예제 #1
0
    public override bool perform(GameObject agent)
    {
        if (startTime == 0)
        {
            startTime = Time.time;
        }
        targetEstanteComponent.isUsed = true;
        //Debug.Log("startTime" + startTime);

        if (Time.time - startTime > workDuration)
        {
            //Debug.Log(Time.time-startTime);
            // finished filled
            BackpackComponent backpack         = (BackpackComponent)agent.GetComponent(typeof(BackpackComponent));
            EstanteComponent  estanteComponent = targetEstanteComponent;

            Debug.LogError("desiredFood " + DesiredFood);
            if (estanteComponent.alimento == DesiredFood)
            {
                int    preTakeAmount = 0;
                Client aux           = null;
                if (agent.GetComponent <Labourer>() is Client)
                {
                    aux           = (Client)agent.GetComponent <Client>();
                    preTakeAmount = aux.listaDelaCompraDictionary[DesiredFood];   //ESTA CANTIDAD NO ES LA CANTIDAD QUE SE COGE FINALMENTE , SIMPLEMENTE ES LA CANTIDAD QUE DESEA COGER
                }
                int canFillAmount = backpack.canFill(DesiredFood, preTakeAmount); //Cantidad de ese alimento que puede meter en su inventario a pesar de que su idea fuera meter mas.
                Debug.LogError(canFillAmount + " canfill");
                //TakedAmount es la cantidad que si ha podido coger en base a la disponibilidad de ese producto en el almacen y teniendo en cuenta que ya se valoro la disponibilidad del propio inventario
                int takedAmount = estanteComponent.Take(canFillAmount);
                Debug.LogError(takedAmount + " taked");
                int r = backpack.Fill(DesiredFood, takedAmount);
                Debug.LogError(r + " fill");
                //Debug.Log("Creo que estoy embuclado " + canFillAmount + " " + alimentoRandom);

                //HEMOS COGIDO LA COMIDA , AHORA HAY QUE ACTUALIZAR LA LISTA DE LA COMPRA
                aux.updateBuyList(DesiredFood, r);
                targetEstanteComponent.isUsed = false;
                if (aux.listaDelaCompra.Count == 0)
                {
                    addEffect("isListComplete", true);
                }
                taked = true;
            }
            else
            {
                return(false); //Se ha fallado al intentar conseguir el alimento del estante que queriamos.
            }
            //Debug.Log("He salido de un bucle");
        }
        return(true);
    }
    public override bool perform(GameObject agent)
    {
        if (startTime == 0)
        {
            startTime = Time.time;
        }
        //Debug.Log("startTime" + startTime);

        if (Time.time - startTime > workDuration)
        {
            //Debug.Log(Time.time-startTime);
            // finished filled
            BackpackComponent  backpack          = (BackpackComponent)agent.GetComponent(typeof(BackpackComponent));
            WareHouseComponent wareHouse         = targetWareHouseComponent;
            BackpackComponent  backpackWareHouse = (BackpackComponent)wareHouse.GetComponent(typeof(BackpackComponent));

            while (!filled && backpackWareHouse.HasFood())
            {
                //Seleccionamos de los alimentos disponibles en el almacen uno aleatorio.
                List <Alimento.enAlimentos> ListofAlimentosAvailable = backpackWareHouse.KindsOfFoodAvailable();
                Alimento.enAlimentos        alimentoRandom           = ListofAlimentosAvailable[(int)UnityEngine.Random.Range(0.0f, ListofAlimentosAvailable.Count - 1)];

                int preTakeAmount = 0;
                if (agent.GetComponent <Labourer>() is StoreRestocker)
                {
                    StoreRestocker aux = (StoreRestocker)agent.GetComponent <Labourer>();
                    preTakeAmount = aux.RandomTakenAmount();                         //ESTA CANTIDAD NO ES LA CANTIDAD QUE SE COGE FINALMENTE , SIMPLEMENTE ES LA CANTIDAD QUE DESEA COGER
                }
                int canFillAmount = backpack.canFill(alimentoRandom, preTakeAmount); //Cantidad de ese alimento que puede meter en su inventario a pesar de que su idea fuera meter mas.
                //Debug.LogError(canFillAmount + " canfill");
                //TakedAmount es la cantidad que si ha podido coger en base a la disponibilidad de ese producto en el almacen y teniendo en cuenta que ya se valoro la disponibilidad del propio inventario
                int takedAmount = backpackWareHouse.Take(alimentoRandom, canFillAmount);
                //Debug.LogError(takedAmount+ " taked");
                int r = backpack.Fill(alimentoRandom, takedAmount);
                //Debug.LogError(r + " fill");
                //Debug.Log("Creo que estoy embuclado " + canFillAmount + " " + alimentoRandom);
                filled = true;
            }
            //Debug.Log("He salido de un bucle");
        }
        return(true);
    }