public void RandomizePhysicalData(ref AnimalData animalData) { for (int i = 0; i < _similarBodyPartsIndexes.Count; i++) { float mass = Random.Range(AnimalData.massMin, AnimalData.massMax); float xScale = Random.Range(AnimalData.multiplierRangeMin, AnimalData.multiplierRangeMax); float zScale = Random.Range(AnimalData.multiplierRangeMin, AnimalData.multiplierRangeMax); System.Numerics.Vector3 maximumVelocity = System.Numerics.Vector3.Zero; foreach (AnimalBodyPart bodyPart in _similarBodyPartsDictionary[i]) { bodyPart.SetMass(mass); if (bodyPart.ifScalable) { bodyPart.SetScale(new System.Numerics.Vector3(xScale, 1, zScale)); } if (bodyPart.isMoveable) { if (maximumVelocity.Equals(System.Numerics.Vector3.Zero)) { for (int j = 0; j < bodyPart.jointHandlers.Length; j++) { if ((int)bodyPart.jointHandlers[j].jointAxis == 0) { maximumVelocity.X = Random.Range(AnimalData.velocityMin, AnimalData.velocityMax); } else if ((int)bodyPart.jointHandlers[j].jointAxis == 1) { maximumVelocity.Y = Random.Range(AnimalData.velocityMin, AnimalData.velocityMax); } else { maximumVelocity.Z = Random.Range(AnimalData.velocityMin, AnimalData.velocityMax); } } } bodyPart.SetMaximumVelocity(maximumVelocity); } } animalData.partsMass[i] = mass; animalData.partsScaleMultiplier[i] = new System.Numerics.Vector3(xScale, 1, zScale); animalData.targetJointsVelocity[i] = maximumVelocity; } }