Пример #1
0
    // Update is called once per frame
    void Update()
    {
        if (!sensor.CercaDePared())
        {
            actuador.MoverAdelante();
        }

        if (sensor.CercaDeBasura())
        {
            //Vector posBasura = sensor.GetPosicionBasura();
            actuador.GirarDerecha();
            if (sensor.FrenteBasura())
            {
                actuador.MoverAdelante();
                if (sensor.TocandoBasura())
                {
                    actuador.Aspirar(sensor.GetBasura());
                }
            }
        }
        else
        {
            actuador.MoverAdelante();
        }
    }
Пример #2
0
    // Update y FixedUpdate son similares en uso, pero por regla general se recomienda usar
    // FixedUpdate para calcular elementos físicos como el uso de Rigidbody
    void FixedUpdate()
    {
        // El agente no realiza ninguna acción si no tiene batería
        if (sensor.Bateria() <= 0)
        {
            return;
        }

        // A continuación se muestran ejemplos de uso de actuadores y sensores
        // para ser utilizados de manera manual (por una persona):

        if (Input.GetKey(KeyCode.I))
        {
            actuador.Ascender();
        }
        if (Input.GetKey(KeyCode.K))
        {
            actuador.Descender();
        }
        if (!Input.GetKey(KeyCode.I) && !Input.GetKey(KeyCode.K))
        {
            actuador.Flotar();
        }

        if (Input.GetAxis("Vertical") > 0)
        {
            actuador.Adelante();
        }
        if (Input.GetAxis("Vertical") < 0)
        {
            actuador.Atras();
        }

        if (Input.GetKey(KeyCode.J))
        {
            actuador.GirarIzquierda();
        }
        if (Input.GetKey(KeyCode.L))
        {
            actuador.GirarDerecha();
        }

        if (Input.GetAxis("Horizontal") > 0)
        {
            actuador.Derecha();
        }
        if (Input.GetAxis("Horizontal") < 0)
        {
            actuador.Izquierda();
        }


        if (sensor.TocandoBasura())
        {
            Debug.Log("Tocando basura!");
            actuador.Limpiar(sensor.GetBasura());
        }
        if (sensor.TocandoPared())
        {
            Debug.Log("Tocando pared!");
        }

        if (sensor.CercaDeBasura())
        {
            Debug.Log("Cerca de una basura!");
        }
        if (sensor.CercaDePared())
        {
            Debug.Log("Cerca de una pared!");
        }

        if (sensor.FrenteAPared())
        {
            Debug.Log("Frente a pared!");
        }


        if (Input.GetKey(KeyCode.F))
        {
            actuador.Detener();
        }
        if (Input.GetKey(KeyCode.G))
        {
            Debug.Log(sensor.Ubicacion());
        }
    }
Пример #3
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");
        }
    }