Exemplo n.º 1
0
 private void FixedUpdate()
 {
     vMove = dna.GetFGene(0) * Vector3.forward + dna.GetFGene(1) * Vector3.right;
     mCharacter.Move(vMove, crouch, jump);
     jump = false;
     if (alive)
     {
         Vector3 d = transform.position - startPosition;
         distanceMoved = Mathf.Sqrt(d.x * d.x + d.z * d.z);
     }
 }
Exemplo n.º 2
0
 public void Combine(DNA d1, DNA d2, float mutationChance)
 {
     for (int i = 0; i < iDnaLength; i++)
     {
         if (Random.Range(0.0f, 1.0f) < mutationChance)
         {
             iGenes[i] = Random.Range(iMinVal, iMaxVal);
         }
         else
         {
             iGenes[i] = Random.Range(0, 10) < 5 ? d1.GetIGene(i) : d2.GetIGene(i);
         }
     }
     for (int i = 0; i < fDnaLength; i++)
     {
         if (Random.Range(0.0f, 1.0f) < mutationChance)
         {
             fGenes[i] = Random.Range(fMinVal, fMaxVal);
         }
         else
         {
             fGenes[i] = Random.Range(0, 10) < 5 ? d1.GetFGene(i) : d2.GetFGene(i);
         }
     }
 }
Exemplo n.º 3
0
    public void initializeGenes(bool modifying = false)
    {
        // Need to store these somehow
        // Could send in a bunch of genese instead of using sphere
        // Or store control point position in genes after first generated
        if (isBestAgent)
        {
            return;
        }

        int numAdditionalControlPoints = (dna.GetGene(14) / 18);

        for (int controlPointCount = 0; controlPointCount < numAdditionalControlPoints; controlPointCount++)
        {
            int        offset          = controlPointCount * 3;
            GameObject newControlPoint = Instantiate(
                controlPointHandler.controlPointPrefab,
                new Vector3(
                    this.transform.position.x + dna.GetFGene(offset),
                    this.transform.position.y + dna.GetFGene(offset + 1),
                    this.transform.position.z + dna.GetFGene(offset + 2)),
                Quaternion.Euler(0, 0, 0)
                );
            newControlPoint.transform.parent = this.transform;

            if (modifying)
            {
                controlPointHandler.controlPoints[4 + controlPointCount] = (newControlPoint);
            }
            else
            {
                controlPointHandler.controlPoints.Add(newControlPoint);
            }
        }

        foreach (GameObject transformGO in controlPointHandler.controlPoints)
        {
            Transform transform = transformGO.transform;
            int       index     = controlPointHandler.controlPoints.IndexOf(transformGO);
            transform.Rotate(dna.GetGene(3 * index), dna.GetGene(3 * index + 1), dna.GetGene(3 * index + 2), Space.Self);
        }

        agility            = ((float)dna.GetGene(12) / dna.GetGene(13));
        lockPoint.snapTime = agility;
    }