Example #1
0
    // En cada frame decidimos el comportamiento del agente.
    // Para este caso, tenemos un control "manual" del agente, es decir, un usuario puede controlarlo mediante
    // un control/gamepad o flechas del teclado y imprime información en consola.
    void Update()
    {
        if (bateria < 50.0f && !sensor.TocandoEstacion())
        {
            actuador.Regresar(actuador.StackX(), 0.25f, actuador.StackZ());
        }
        else if (!sensor.TocandoEstacion())
        {
            actuador.CaminoRegreso(actuador.GetX(), actuador.GetY(), actuador.GetZ());
        }
        if (sensor.TocandoEstacion() && bateria < maxBateria)
        {
            bateria += Time.deltaTime * factorRecarga;
        }
        else
        {
            if (sensor.FrentePared())
            {
                if (bandera == true)
                {
                    actuador.GirarIzquierda();
                }
                else
                {
                    actuador.GirarDerecha();
                    //bandera = !bandera;
                }
            }

            if (sensor.TocandoPared())
            {
                actuador.Detener();
                actuador.MoverAtras();
                if (bandera == true)
                {
                    actuador.GirarIzquierda();
                }
                else
                {
                    actuador.GirarDerecha();
                    //bandera = !bandera;
                }
            }


            if (!sensor.CercaDeBasura())
            {
                actuador.MoverAdelante();
            }
            else
            {
                if (!sensor.FrenteBasura())
                {
                    if (bandera == true)
                    {
                        actuador.GirarIzquierda();
                    }
                    else
                    {
                        actuador.GirarDerecha();
                        //bandera = !bandera;
                    }
                }
                else
                {
                    actuador.MoverAdelante();
                }
                if (sensor.TocandoBasura())
                {
                    actuador.Aspirar(sensor.getBasura());
                    sensor.setTouchBasura(false);
                    sensor.setCercaBasura(false);
                }
            }
        }



        // La batería se consume lentamente. En caso de que se termine, no realiza ninguna acción
        if (bateria <= 0)
        {
            return;
        }
        else
        {
            bateria -= Time.deltaTime;
        }
        // Recargar batería al contacto, sin rebasar límite de carga
        if (sensor.TocandoEstacion() && bateria < maxBateria)
        {
            bateria += Time.deltaTime * factorRecarga;
        }

        /*
         * // Ejemplo de control no-automatico. Requiere de la intervención de una persona
         * // Se realiza con fines demostrativos y de prueba de actuadores y sensores
         * if(Input.GetKeyDown(KeyCode.UpArrow) || Input.GetAxis("Vertical") == 1)
         *      actuador.MoverAdelante();
         * if(Input.GetKeyDown(KeyCode.DownArrow) || Input.GetAxis("Vertical") == -1)
         *      actuador.MoverAtras();
         * if(Input.GetKeyDown(KeyCode.RightArrow) || Input.GetAxis("Horizontal") == 1)
         *      actuador.GirarDerecha();
         * if(Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetAxis("Horizontal") == -1)
         *      actuador.GirarIzquierda();
         */

        // Imprime informacion en la consola (Debug) para verificar algunos eventos
        if (sensor.TocandoPared())
        {
            Debug.Log("Tocando pared");
        }
        if (sensor.TocandoBasura())
        {
            Debug.Log("Tocando basura");
        }
        if (sensor.CercaDeBasura())
        {
            Debug.Log("Cerca de basura");
        }
        if (sensor.CercaDePared())
        {
            Debug.Log("Cerca de pared");
        }
        if (sensor.FrenteBasura())
        {
            Debug.Log("Frente a basura");
        }
        if (sensor.FrentePared())
        {
            Debug.Log("Frente a pared");
        }
    }