Exemplo n.º 1
0
    void Breed(DinoDNA parent1, DinoDNA parent2)
    {
        GameObject breeded = Instantiate(dinoPrefab, spawnPoint.position, Quaternion.identity);

        dinoList.Add(breeded.GetComponent <DinoDNA>().Breed(parent1, parent2));
    }
    public DinoDNA Breed(DinoDNA parent1, DinoDNA parent2)
    {
        rb          = this.gameObject.GetComponent <Rigidbody2D>();
        gameManager = GameObject.Find("GameManager").GetComponent <GameManager>();

        if (Random.Range(0, 100) < gameManager.GetMutationRate())
        {
            GenerateDNA();
        }
        else
        {
            int r = Random.Range(0, 160);
            if (r <= 50)
            {
                visionChange = parent1.visionChange;
            }
            else if (r > 50 && r <= 100)
            {
                visionChange = parent2.visionChange;
            }
            else if (r > 100 && r <= 150)
            {
                visionChange = (parent1.visionChange + parent2.visionChange) / 2;
            }
            else
            {
                visionChange = Random.Range(0.5f, 0.5f);
            }

            r = Random.Range(0, 160);
            if (r <= 50)
            {
                visionDistance = parent1.visionDistance;
            }
            else if (r > 50 && r <= 100)
            {
                visionDistance = parent2.visionDistance;
            }
            else if (r > 100 && r <= 150)
            {
                visionDistance = (parent1.visionDistance + parent2.visionDistance) / 2;
            }
            else
            {
                visionDistance = Random.Range(gameManager.GetMinVision(), gameManager.GetMaxVision());
            }

            r = Random.Range(0, 160);
            if (r <= 50)
            {
                size = parent1.size;
            }
            else if (r > 50 && r <= 100)
            {
                size = parent2.size;
            }
            else if (r > 100 && r <= 150)
            {
                size = (parent1.size + parent2.size) / 2;
            }
            else
            {
                size = Random.Range(gameManager.GetMinSize(), gameManager.GetMaxSize());
            }
            rb.mass = size;

            for (int i = 0; i < action.Length; i++)
            {
                r = Random.Range(0, 110);
                if (r <= 50)
                {
                    action[i] = parent1.action[i];
                }
                else if (r > 50 && r <= 100)
                {
                    action[i] = parent2.action[i];
                }
                else
                {
                    action[i] = Random.Range(1, 5);
                }
            }

            for (int i = 0; i < force.Length; i++)
            {
                r = Random.Range(0, 160);
                if (r <= 50)
                {
                    force[i] = parent1.force[i];
                }
                else if (r > 50 && r <= 100)
                {
                    force[i] = parent2.force[i];
                }
                else if (r > 100 && r <= 150)
                {
                    force[i] = (parent1.force[i] + parent2.force[i]) / 2;
                }
                else
                {
                    force[i] = Random.Range(0, 10f);
                }
            }

            for (int i = 0; i < timeDown.Length; i++)
            {
                r = Random.Range(0, 160);
                if (r <= 50)
                {
                    timeDown[i] = parent1.timeDown[i];
                }
                else if (r > 50 && r <= 100)
                {
                    timeDown[i] = parent2.timeDown[i];
                }
                else if (r > 100 && r <= 150)
                {
                    timeDown[i] = (parent1.timeDown[i] + parent2.timeDown[i]) / 2;
                }
                else
                {
                    timeDown[i] = Random.Range(0, 10f);
                }
            }
        }
        return(this);
    }