Exemple #1
0
 public Chromosome(int chromosome, GenomeManager thisGenome, CreatureManager hManager)
 {
     genes            = new Gene[GlobalGEPSettings.CHROMOSOME_LENGTH];
     genome           = thisGenome;
     chromosomeNumber = chromosome;
     GenerateChromosome(hManager.generator);
 }
Exemple #2
0
    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]);
            }
        }
    }
Exemple #3
0
    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);
    }