public Population.Generation GenerationMedium(Population.Generation a, Population.Generation b)
    {
        Population.Generation retorno = new Population.Generation();
        retorno.Quantidade            = (a.Quantidade + b.Quantidade) / 2;
        retorno.Velocidade            = (a.Velocidade + b.Velocidade) / 2;
        retorno.VontadeDeAcasalamento = (a.VontadeDeAcasalamento + b.VontadeDeAcasalamento) / 2;
        retorno.Inteligencia          = (a.Inteligencia + b.Inteligencia) / 2;
        retorno.Visao = (a.Visao + b.Visao) / 2;
        retorno.Saude = (a.Saude + b.Saude) / 2;
        retorno.R     = (a.R + b.R) / 2;
        retorno.G     = (a.G + b.G) / 2;
        retorno.B     = (a.B + b.B) / 2;

        return(retorno);
    }
    public void UpdateHistorico()
    {
        Population.Generation currentGenCriaturas  = GetCurrentGenerationMedians(ParentCriaturas);
        Population.Generation currentGenPredadores = GetCurrentGenerationMedians(ParentPredadores);
        lastUpdatedTime = lastUpdatedTime + MeasureDelay;
        AddToJson(currentGenCriaturas, currentGenPredadores);

        if (manager.DeveReiniciar(currentGenCriaturas.Quantidade, currentGenPredadores.Quantidade))
        {
            SetBestHistorico();
        }
        else
        {
            Invoke("UpdateHistorico", MeasureDelay);
        }
    }
    void AddToJson(Population.Generation GeracaoCriaturas, Population.Generation GeracaoPredadores)
    {
        Population populacao = JsonUtility.FromJson <Population>(File.ReadAllText(Path_historico));

        populacao.listaCriaturas.Add(GeracaoCriaturas);
        populacao.listaPredadores.Add(GeracaoPredadores);

        if (TamanhoDoHistorico(populacao) >= MaxGraphDots)
        {
            //Simplificar o histórico
            MeasureDelay           *= 2;
            populacao               = SimplifyInHalf(populacao);
            populacao.EscalaDeTempo = MeasureDelay;
        }

        File.WriteAllText(Path_historico, JsonUtility.ToJson(populacao));
    }
    public Population.Generation GetCurrentGenerationMedians(Transform Parent)
    {
        Criatura[] criaturas = Parent.GetComponentsInChildren <Criatura>();
        int        velocidade = 0, visao = 0, vontadeDeAcasalamento = 0, inteligencia = 0, saude = 0, R = 0, G = 0, B = 0;
        int        quantidade = criaturas.Length;

        for (int i = 0; i < quantidade; i++)
        {
            velocidade            += criaturas[i].Genes.Velocidade;
            visao                 += criaturas[i].Genes.Visao;
            vontadeDeAcasalamento += criaturas[i].Genes.VontadeDeAcasalamento;
            inteligencia          += criaturas[i].Genes.Inteligencia;
            saude                 += criaturas[i].Genes.Saude;
            R += criaturas[i].Genes.Red;
            G += criaturas[i].Genes.Green;
            B += criaturas[i].Genes.Blue;
        }

        Population.Generation geracao = new Population.Generation();
        if (quantidade != 0)
        {
            geracao.Velocidade            = velocidade / quantidade;
            geracao.Visao                 = visao / quantidade;
            geracao.VontadeDeAcasalamento = vontadeDeAcasalamento / quantidade;
            geracao.Inteligencia          = inteligencia / quantidade;
            geracao.Saude                 = saude / quantidade;
            geracao.Quantidade            = quantidade;
            geracao.R = R / quantidade;
            geracao.G = G / quantidade;
            geracao.B = B / quantidade;
        }
        else
        {
            geracao.Velocidade            = 0;
            geracao.Visao                 = 0;
            geracao.VontadeDeAcasalamento = 0;
            geracao.Inteligencia          = 0;
            geracao.Saude                 = 0;
            geracao.Quantidade            = 0;
            geracao.R = 0;
            geracao.G = 0;
            geracao.B = 0;
        }
        return(geracao);
    }