// Usar sensores para determinar el tipo de percepción actual
    Percepcion PercibirMundo()     /*
                                    * Percepcion percepcionActual = Percepcion.NoFrenteAPared;
                                    * if(sensor.FrenteAPared())
                                    * percepcionActual = Percepcion.FrenteAPared;
                                    * else
                                    * percepcionActual = Percepcion.NoFrenteAPared;
                                    * return percepcionActual;*/
    {
        Percepcion percepcionActual = Percepcion.NoFrenteAPared;

        if (sensor.FrenteAPared())
        {
            Debug.Log("------->  frente pared");
            percepcionActual = Percepcion.FrenteAPared;
            if (sensor.DerechaPared())
            {
                percepcionActual = Percepcion.FrenteDerechaPared;
            }
            return(percepcionActual);
        }
        if (sensor.DerechaPared())
        {
            Debug.Log("------->  derecha pared");
            percepcionActual = Percepcion.DerechaPared;
            if (sensor.FrenteAPared())
            {
                Debug.Log("------->  derecha pared --- frente");
                percepcionActual = Percepcion.FrenteDerechaPared;
            }
            return(percepcionActual);
        }
        //Debug.Log("LA PERCEPCION NO TOCO NADA");
        return(percepcionActual);
    }
    /// <summary>
    /// Dentro de este metodo se contemplan todas las percepciones que tiene el dron y con base a ellas
    /// se mueve dentro de la maquina de estados.
    /// </summary>
    /// <returns>percepcionActual, la percepcion del mundo que tiene el dron</returns>
    Percepcion PercibirMundo()
    {
        // La percepcion inicial que el dron tiene.
        Percepcion percepcionActual = Percepcion.NoCercaDePared;

        if (sensor.CercaDePared())
        {
            percepcionActual = Percepcion.CercaDePared;
        }

        if (sensor.FrenteAPared())
        {
            percepcionActual = Percepcion.FrenteAPared;
        }

        if (!sensor.FrenteAPared())
        {
            percepcionActual = Percepcion.NoFrenteAPared;
        }

        if (!sensor.CercaDePared())
        {
            percepcionActual = Percepcion.NoCercaDePared;
        }

        if (sensor.CercaDeObjeto())
        {
            percepcionActual = Percepcion.CercaDeObjeto;
        }

        if (sensor.FrenteAObjeto())
        {
            percepcionActual = Percepcion.FrenteAObjeto;
        }

        if (sensor.Bateria() < 50)
        {
            percepcionActual = Percepcion.BateriaBaja;
        }

        if (sensor.TocandoBase())
        {
            percepcionActual = Percepcion.TocandoBase;
        }

        return(percepcionActual);
    }
Пример #3
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());
        }
    }