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); } }
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); } } }
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; }