private void SetupLimbs() { var numBranches = ChromosomeComposition.GetBranchCount(); ChromosomeComposition.SetNumberOfBranches(numBranches); var angXDrive = new JointDrive { mode = JointDriveMode.Position }; for (var i = 0; i < numBranches; i++) { _limbs = ChromosomeComposition.GetLimbList(i); var actualLimbs = new List <GameObject>(); var effects = new List <GameObject>(); for (var j = 0; j < _limbs.Count; j++) { Limb limbScript; var limb = SetupSubLimb(i, j, actualLimbs, angXDrive, out limbScript); effects.Add(Resources.Load("Prefabs/particles01") as GameObject); effects.Add(Resources.Load("Prefabs/particles02") as GameObject); effects.Add(Resources.Load("Prefabs/particles03") as GameObject); if (j == _limbs.Count - 1) { var fx = effects[Random.Range(0, effects.Count - 1)]; Instantiate(fx, limb.transform.position, limb.transform.rotation).transform.parent = limb.transform; if (TypeOfCreature == "Herbiverous" ? Instantiate(effects[1], limb.transform.position, limb.transform.rotation).transform.parent = limb.transform : Instantiate(effects[0], limb.transform.position, limb.transform.rotation).transform.parent = limb.transform) { ; } } _allLimbs.Add(limbScript); } } }
// setup our creature, define colour, scale, limb count (and segments count), etc. private void SetupCreatures() { // create actorA new chromosome stgructure for our new creature _chromosomeComposition = new ChromosomeComposition(); // random colours (unity colours seem to be defined as actorA value between 0 and 1 var col = new Color(Random.Range(0.0F, 1.0F), Random.Range(0.0F, 1.0F), Random.Range(0.0F, 1.0F) ); // set limb and root colour in our chromosome to our random colours _chromosomeComposition.SetColour(col.r, col.g, col.b); _chromosomeComposition.SetLimbColour(col.r, col.g, col.b); // define hunger threshold as the hunger_threshold value from the settings file _chromosomeComposition.HungerPoint = _settingsReader.CreatureHungerThreshold; // random root scale var rootScale = new Vector3(Random.Range(_minimumRootScale.x, _maximumRootScale.x), Random.Range(_minimumRootScale.y, _maximumRootScale.y), Random.Range(_minimumRootScale.z, _maximumRootScale.z) ); // set root scale in chromosome to our random Vector 3 _chromosomeComposition.SetRootScale(rootScale); // random initial limbs var bs = Random.Range(1, _branchLimit + 1); // random branch count _chromosomeComposition.SetNumberOfBranches(bs); // Set the number of branches in our chromosome var branches = new ArrayList(); for (var j = 0; j < bs; j++) { var limbs = new ArrayList(); var recurrences = Random.Range(0, _recurrenceLimit); // limb recurrence (i.e. how many segments) _chromosomeComposition.NumRecurrences[j] = recurrences; // set limb segment (recurrence) in our chromosome // iterate through our segments for (var k = 0; k <= recurrences; k++) { // creat erandom scale for each segment var scale = new Vector3(Random.Range(_minimumLimbScale.x, _maximumLimbScale.x), Random.Range(_minimumLimbScale.y, _maximumLimbScale.y), Random.Range(_minimumLimbScale.z, _maximumLimbScale.z) ); var position = Utility.RandomPointInsideCube(rootScale); var limb = new ArrayList(); limb.Add(position); limb.Add(scale); limbs.Add(limb); } branches.Add(limbs); } _chromosomeComposition.SetFequency(Random.Range(3, 20)); _chromosomeComposition.SetAmplitude(Random.Range(3, 6)); _chromosomeComposition.SetPhase(Random.Range(0, 360)); _chromosomeComposition.SetBranches(branches); var pos = Utility.RandomVector3(-_wideSpread, _wideSpreadY, _wideSpread); _environment.SpawnerOrganiser.Spawn( pos, Utility.RandomVector3(), _creatureInitEnergy, _chromosomeComposition); }