Exemplo n.º 1
0
    public void BuscarComida()
    {
        if (bocadillos.hormigaSeleccionada != null && bocadillos.hormigaSeleccionada == this)
        {
            if (!this.agente.isOnOffMeshLink)
            {
                bocadillos.BuscarComida();
            }
            else
            {
                bocadillos.Nada();
            }
        }
        if (comida != null)
        {
            // Si no he cogido la comida aún, me dirijo a ella
            if (!comida.laEstanLLevando)
            {
                if (posComida == Vector3.zero)
                {
                    posComida = comida.transform.position;
                    agente.SetDestination(comida.transform.position);
                    Task.current.Succeed();
                    return;
                }

                // En este caso, voy hasta donde está la comida, cuando llego
                if (Vector3.Distance(this.transform.position, posComida) < 0.2f)
                {
                    // Muevo la comida con la hormiga y le actualizo que están llevando esa comida
                    comida.transform.SetParent(this.transform);
                    comida.laEstanLLevando = true;
                    Task.current.Succeed();
                    return;
                }
                else
                {
                    // Te sigues acercando a la comida
                    agente.SetDestination(posComida);
                    Task.current.Succeed();
                    return;
                }
            }
            // Si ya he cogido la comida, me dirijo a la casilla libre que he tomado
            else
            {
                // Guardo la posición a donde me dirijo para dejar la comida
                if (posDejarComida == Vector3.zero)
                {
                    posDejarComida = casillaDejarComida.transform.position;
                    agente.SetDestination(posDejarComida);
                    Task.current.Succeed();
                    return;
                }
                // Cuando llego a la casilla, suelto la comida y actualizo el haSidoCogida
                if (Vector3.Distance(this.transform.position, posDejarComida) < 0.2f && zonaDondeEsta == 0)
                {
                    reina.ComidaGuardada(comida, salaDejarComida, casillaDejarComida);
                    comida.CogerComida(salaDejarComida, casillaDejarComida);
                    comida.haSidoCogida = true;
                    comida.transform.SetParent(null);
                    comida.hormigaQueLlevaLaComida = null;
                    // Reseteamos los datos de la hormiga
                    if (hayOrdenBuscarComida)
                    {
                        hayOrdenBuscarComida = false;
                        SacarDeOcupadas();
                        reina.numHormigasBuscandoComida--;
                    }
                    comida             = null;
                    salaDejarComida    = null;
                    casillaDejarComida = null;
                    posComida          = Vector3.zero;
                    posDejarComida     = Vector3.zero;
                    Task.current.Succeed();
                    return;
                }
                else
                {
                    // Te sigues acercando a la comida
                    agente.SetDestination(posDejarComida);
                    Task.current.Succeed();
                    return;
                }
            }
        }
        else
        {
            // La comida ha muerto o tengo que dejar la comida, reseteo datos
            salaDejarComida    = null;
            casillaDejarComida = null;
            posComida          = Vector3.zero;
            posDejarComida     = Vector3.zero;
            comida             = null;
            if (hayOrdenBuscarComida)
            {
                hayOrdenBuscarComida = false;
                SacarDeOcupadas();
                reina.numHormigasBuscandoComida--;
            }
            Task.current.Fail();
        }
    }