Example #1
0
    private int MUTATION_CYCLES = 12; // maximum mutations per evolution

    public RoomConfiguration(RoomConfiguration parentRoom, int returnPortalID, int championPortalID, Artwork[] artworksPassed, Sculpture[] sculptures)
    {
        ArtGallery ag       = ArtGallery.GetArtGallery();
        Artwork    champion = artworksPassed[championPortalID];

        if (ArtGallery.DEBUG_LEVEL < ArtGallery.DEBUG.NONE)
        {
            Debug.Log("Creating a new room with " + artworksPassed.Length + " artworks");
        }
        this.parentRoom = parentRoom;

        rooms = new RoomConfiguration[artworksPassed.Length];
        if (ArtGallery.DEBUG_LEVEL < ArtGallery.DEBUG.NONE)
        {
            Debug.Log("Clearing artworks and sculptures...");
        }
        artworks        = new Artwork[artworksPassed.Length];
        this.sculptures = sculptures;
        if (ArtGallery.DEBUG_LEVEL < ArtGallery.DEBUG.NONE)
        {
            Debug.Log("Created new artworks: " + artworksPassed.Length);
        }
        rooms[returnPortalID] = parentRoom;

        // clone champion to each artwork and mutate
        for (int i = 0; i < artworksPassed.Length; i++)
        {
            TWEANNGenotype geno = new TWEANNGenotype(champion.GetGenotype().Copy());
            // champion art
            if (i == championPortalID)
            {
                //do little
                geno.Mutate();
            }
            // return art
            else if (i == returnPortalID)
            {
                // do nothing - save some cpu
            }
            else
            {
                // all other art
                TWEANNCrossover cross = new TWEANNCrossover(false)
                {
                    Sucessful = false
                }; //HACK PROTOTYPE hardcoded value
                   //TWEANNGenotype crossedGeno = cross.Crossover(new TWEANNGenotype(geno.Copy()), new TWEANNGenotype(champion.GetGenotype().Copy()));
                   //geno = crossedGeno;

                for (int m = 0; m < Random.Range(2, ag.artworkMutationChances); m++)
                {
                    geno.Mutate();
                }
            }
            artworks[i] = new Artwork(geno);
        }

        MutateSculptures();
    }
Example #2
0
    public void MutateSculptures()
    {
        ArtGallery ag = ArtGallery.GetArtGallery();

        //Sort Sculptures
        Sculpture[]    toMutate          = new Sculpture[sculptures.Length];
        TWEANNGenotype sculptureChampion = null;

        for (int s = 0; s < sculptures.Length; s++)
        {
            if (sculptures[s].GetSelected())
            {
                sculptureChampion = new TWEANNGenotype(sculptures[s].GetGenotype().Copy());
                sculptures[s].SetSelected(false);
                toMutate[s] = sculptures[s];
            }
            else
            {
                toMutate[s] = sculptures[s];
            }
        }

        //Select sculpture champion and crossover / mutate
        if (sculptureChampion != null)
        {
            for (int m = 0; m < sculptures.Length; m++)
            {
                Sculpture ms = toMutate[m];
                if (ms != null)
                {
                    TWEANNGenotype  crossedGeno = new TWEANNGenotype(sculptureChampion.Copy());
                    TWEANNCrossover cross       = new TWEANNCrossover(false)
                    {
                        Sucessful = false
                    }; // HACK PROTOTYPE hardcoded value
                       //TWEANNGenotype crossedmgeno = cross.Crossover(new TWEANNGenotype(sculptureChampion.Copy()), new TWEANNGenotype(ms.GetGenotype().Copy()));
                       //crossedGeno = crossedmgeno;

                    for (int mr = 0; mr < Random.Range(2, ag.sculptureMutationChances); mr++) //HACK PROTOTYPE hardcoded value for mutation rate
                    {
                        crossedGeno.Mutate();
                    }

                    ms.NewSculpture(new TWEANNGenotype(crossedGeno));
                }
            }
        }
    }
Example #3
0
    // Update is called once per frame
    void Update()
    {
        if (leftArt.NeedsRedraw())
        {
            leftArt.ApplyImageProcess();
            leftImg = leftArt.GetArtwork();
            leftRenderer.material.mainTexture = leftImg;
            Debug.Log("leftImg applied");
        }
        if (rightArt.NeedsRedraw())
        {
            rightArt.ApplyImageProcess();
            rightImg = rightArt.GetArtwork();
            rightRenderer.material.mainTexture = rightImg;
            Debug.Log("rightImg applied");
        }

        if (!PauseMenu.isPaused && Input.GetButtonDown("Fire2"))
        {
            leftImg  = new Texture2D(width, height, TextureFormat.ARGB32, true);
            rightImg = new Texture2D(width, height, TextureFormat.ARGB32, true);
            BuildArtworks();
            //leftArt = new Artwork(leftGeno);
            //rightArt = new Artwork(rightGeno);
        }

        if (!PauseMenu.isPaused && Input.GetButtonDown("Fire1"))
        {
            leftGeno  = new TWEANNGenotype(leftArt.GetGenotype().Copy());
            rightGeno = new TWEANNGenotype(rightArt.GetGenotype().Copy());


            TWEANNCrossover cr = new TWEANNCrossover(false);
            cr.Crossover(leftGeno, rightGeno);
            leftImg  = new Texture2D(width, height, TextureFormat.ARGB32, true);
            rightImg = new Texture2D(width, height, TextureFormat.ARGB32, true);
            leftArt  = new Artwork(leftGeno);
            rightArt = new Artwork(rightGeno);
        }
    }