public Chromosome(int chromosome, GenomeManager thisGenome, CreatureManager hManager) { genes = new Gene[GlobalGEPSettings.CHROMOSOME_LENGTH]; genome = thisGenome; chromosomeNumber = chromosome; GenerateChromosome(hManager.generator); }
public Chromosome(int chromosome, GenomeManager thisGenome, CreatureManager hManager, Chromosome motherChromosome, Chromosome fatherChromosome) { genes = new Gene[GlobalGEPSettings.CHROMOSOME_LENGTH]; genome = thisGenome; chromosomeNumber = chromosome; for (int i = 0; i < GlobalGEPSettings.CHROMOSOME_LENGTH; i++) { if (chromosomeNumber != 22) { genes[i] = new Gene(this, i, hManager.generator, motherChromosome.genes[i], fatherChromosome.genes[i]); } } }
private IEnumerator SetupCreature() { //Find each object in the main Creature object //Such as Hair, skin and eye objects //Cycles through each child looking at tags for (int i = 0; i < gameObject.transform.childCount; i++) { string childTag = gameObject.transform.GetChild(i).tag; //get hair object if (childTag.ToLower().Equals("hair")) { hairObject = gameObject.transform.GetChild(i).gameObject; } else if (childTag.ToLower().Equals("skin")) { skinObject = gameObject.transform.GetChild(i).gameObject; } else if (childTag.ToLower().Equals("eyes")) { GameObject eyesObject = gameObject.transform.GetChild(i).gameObject; eyeObjects = new GameObject[eyesObject.transform.childCount]; for (int j = 0; j < eyesObject.transform.childCount; j++) { eyeObjects[j] = eyesObject.transform.GetChild(j).gameObject; } } else if (childTag.ToLower().Equals("background")) { popColourObject = gameObject.transform.GetChild(i).gameObject; } } //Initialize key components generator = new System.Random((int)System.DateTime.Now.Ticks); genomeManager = new GenomeManager(); traitManager = new TraitManager(); phenotypeNodesManager = new NodeManager(); creatureStats = gameObject.AddComponent <Stats>(); //Start a new threaded job to run concurrently with the Unity program. //This handles all the loading of data (such as generating new genome etc) //For Reproduction, a different function will be needed that does not randomly generate the genome loadCreatureJob = new Job(); loadCreatureJob.hManager = this; loadCreatureJob.Start(); if (loadCreatureJob == null) { Debug.Log("ERROR: loadCreatureJob does not exist, cannot continue as no data will be available"); yield return(null); } //Halt setup until loading of creature genome/phenotype has been complete yield return(StartCoroutine(loadCreatureJob.WaitFor())); traitIndices = traitManager.traitIndices; //Set hair, Eye and skin Colour hairColour = traitManager.hairColour.color; skinColour = traitManager.skinColour.color; eyeColours = new Color[eyeObjects.Length]; //For each eye object found (either 1 or 2 eyes) assign the colours for (int i = 0; i < eyeColours.Length; i++) { eyeColours[i] = traitManager.eyeColours[i].color; eyeObjects[i].GetComponent <SpriteRenderer>().color = eyeColours[i]; } //If skin object found assign skin colour (some creatures only have hair/fur) if (skinObject != null) { skinObject.GetComponent <SpriteRenderer>().color = skinColour; } if (popColourObject != null) { popColourObject.GetComponent <SpriteRenderer>().color = population.populationColour; } //Assign hair/fur colour hairObject.GetComponent <SpriteRenderer>().color = hairColour; creatureStats.SetStats(this); behaviourManager = gameObject.AddComponent <AIBehaviour>(); //AI FSM Notes https://forum.unity3d.com/threads/state-machine-coroutine-vs-update.103110/ yield return(null); }