Esempio n. 1
0
    //Chamado em intervalos que dependem da sua inteligencia
    private void Pensar()
    {
        //o personagem está "ocupado", adiar
        if (Apaixonado)
        {
            Invoke("Pensar", 3f);
        }

        else
        {
            //cobrar o preço energético
            GastarComida(Genes.GetCost() * custoEnergeticoMultiplyer);
            //FoodAmount -= Genes.GetCost();

            TargetTransform = null;
            TargetType      = "";


            //se não estiver DESESPERADO por comida, procura predador
            if (FoodAmount > Genes.GetCost() * custoEnergeticoMultiplyer)
            {
                Transform inimigo = SearchFor("Inimigo", Genes.Visao * QualidadeDaVisao);
                if (inimigo != null)
                {
                    //fugir
                    TargetPos = (transform.position - inimigo.position).normalized * Genes.Visao * QualidadeDaVisao / 2;
                }
            }

            //se tiver comida o suficiente, procurar parceiro
            if (PodeReproduzir() && TargetType == "")
            {
                Transform parceiroT = SearchFor("Parceiro", Genes.Visao * QualidadeDaVisao * 2);
                if (parceiroT != null)
                {
                    Criatura parceiro = parceiroT.GetComponent <Criatura>();
                    //enviar msg para o parceiro
                    if (parceiro.QuerCasarComigo(transform))
                    {
                        //o parceiro aceitou!
                        Apaixonado = true;
                        //andar até ele
                        TargetTransform = parceiroT;
                        TargetType      = "Parceiro";
                        //emitir corações
                        LoveParticles.Play();
                    }
                }
            }

            //se não tiver comida suficiente ou não achar parceiro, procurar comida
            if (FoodAmount < MaxFoodAmount && !Apaixonado && TargetType == "")
            {
                Transform comidaT = SearchFor("Comida", Genes.Visao * QualidadeDaVisao);
                if (comidaT != null)
                {
                    //achou comida!
                    Comida comida = comidaT.GetComponent <Comida>();
                    if (comida.Comido == false)
                    {
                        TargetTransform = comidaT;
                        TargetType      = "Comida";
                    }
                }
            }

            //se não conseguir comida nem namoro, vagar
            if (TargetTransform == null)
            {
                if (TargetType == "Inimigo")
                {
                    DeterminarDestino(TargetPos);
                }
                else
                {
                    TargetType = "";
                    TargetPos  = new Vector3(
                        transform.position.x + Random.Range(-VagarDistancia, VagarDistancia),
                        transform.position.y,
                        transform.position.z + Random.Range(-VagarDistancia, VagarDistancia));
                    DeterminarDestino(TargetPos);
                }
            }
            else
            {
                DeterminarDestino(TargetTransform.position);
            }



            //pensar novamente depois
            //"2" é o tempo mínimo de descanso
            Invoke("Pensar", 2 + ((100 - Genes.Inteligencia) / 10));
        }
    }