Possible to use a variable as literal code? (from variables to ArrayList)

so this is very complicated. im making an art software and i have many pgraphics, and i need to speak to the pgraphics. im wondering if there is any method, i could make it so it doest always is:

if(currentlayer == 1) {
  layer1.paint();
}
if(currentlayer == 2) {
  layer2.paint();
}
if(currentlayer == 3) {
  layer3.paint();
}

i need to do it for hundreds of layers. is there a way to make something like

   AsCode(currentlayer).paint();

if this is possible with complicated stuff, or a library please help me!
it is not possible to make it switch and only use one pgraphics. performance is not a problem!

for(int i=0;i<layers;i++){
  layer.get(i).paint;
}

Use for loops and something to store you layers. ArrayList, or array, or anything else that is appropriate.

enhanced for loop

for(Layers l layers){
  l.paint();
}
2 Likes

OMG you are a certified genius! thank you so much!

1 Like

You can also use currentLayer as an index for your ArrayList :

layer.get(currentLayer).paint();

Instead of using the switch() command

1 Like

for(Layers l : layers){

With :

1 Like

Hello @Aryszin,

I see that there are responses already…

I was working on this and will share nevertheless:

PGraphics [] paintings = new PGraphics[500];

void setup()
  {
  size(800, 800);
  background(128);
  for(int i = 0; i<paintings.length; i++)
    {
    paintings[i] = createGraphics(400, 400);
    }
    
   for(int i = 0; i<paintings.length; i++)
    {
    paintings[i].beginDraw();
    paintings[i].clear();
    paintings[i].fill(random(256), random(256), random(256));
    paintings[i].circle(choice(20, 400-20), choice(20, 400-20), 40);
    paintings[i].endDraw();
    }
  
  // for() loop
  for(int i = 0; i<paintings.length; i++)
    {
    image(paintings[i], 0, 0);  
    }
  
  // Enhanced for loop
  for(PImage p : paintings)
    {
    image(p, 400, 0);  
    }
  }
    
void draw()
  {
  int num = ((frameCount-1)%100);
  image(paintings[num], 0, 400);
  }

I may have over-exampled a bit.

:)

Or

class Layer { 
    
    PGraphics pg; 
    
    void paint() {
        image(pg, 400, 0);  
    } // method 
    
} // class

before setup()

ArrayList<Layer> layers = new ArrayList();

in setup()

.....
layers.add(newPG);

in draw()

layer.get(currentLayer).paint();

1 Like