void camera() { translate(width/2, height/2, -30); if(!stopped) { if(mousePressed) { scl += (mouseY - pmouseY) / 3.0; } else { newXmag = mouseX/float(width) * TWO_PI; newYmag = mouseY/float(height) * TWO_PI; float diff = xmag-newXmag; if (abs(diff) > 0.01) { xmag -= diff/4.0; } diff = ymag-newYmag; if (abs(diff) > 0.01) { ymag -= diff/4.0; } } } rotateX(-ymag/4.2+PI/1.8); rotateZ(-xmag-PI/3.0); scale(scl); } boolean changeTheme(String name, int it) { if(it > theme.length) return false; if(theme[it] == null) { name = themeList[0]; } if(name == "next") { int l = themeList.length; for(int i=0; i < l; ++i) { if(theme[it].getname() == themeList[i]) { i++; if(i >= l) { i = 0; name = "none"; } else name = themeList[i]; break; } } } boolean success = false; for(int i = 0; i < num; ++i) windows[i].stopglow(it); if(name == "themeOne") { theme[it] = new themeOne(themecolors[it],it); theme[it].start(themespeed[it]); success = true; } else if(name == "themeRandom") { theme[it] = new themeRandom(themecolors[it], it, num / 18); theme[it].start(themespeed[it]); success = true; } else if(name == "themeH1") { theme[it] = new themeH1(themecolors[it], it); theme[it].start(themespeed[it]); success = true; } else if(name == "themeH5") { theme[it] = new themeH5(themecolors[it], it); theme[it].start(themespeed[it]); success = true; } else if(name == "themeV1") { theme[it] = new themeV1(themecolors[it], it); theme[it].start(themespeed[it]); success = true; } else if(name == "themeV5") { theme[it] = new themeV5(themecolors[it], it); theme[it].start(themespeed[it]); success = true; } else if(name == "none") { theme[it] = null; success = true; } return success; } int getnb(int i, int dir, boolean flipv) { int totlen = 2*(w+l); int row = i / totlen; int spl = i % totlen; dir %= 4; if(dir == 0) { spl--; if(spl < 0) spl = totlen - 1; } else if(dir == 1) { row++; if(row >= h) { if(!flipv) return -1; row = 0; } } else if(dir == 2) { spl++; if(spl >= totlen) spl = 0; } else if(dir == 3) { row--; if(row < 0) { if(!flipv) return -1; row = h-1; } } return row*totlen + spl; } int getleft(int i) { return getnb(i, 0, false); } int getup(int i) { return getnb(i, 1, false); } int getright(int i) { return getnb(i, 2, false); } int getdown(int i) { return getnb(i, 3, false); } boolean createWindows() { num = (l+w)*2*h; println("Anzahl Fenster: "+num); if(num > 10000) { println("Mehr als 10000 Fenster. Programm wird beendet"); return false; } windows = new Window[num]; int totlen = 2*(w+l); float x = -l*sizexy/2, y = -w*sizexy/2; float s[] = {sizexy, sizez}; for(int i = 0; i < num; ++i) { int row = i / totlen; int spl = i % totlen; float dx, dy; if(spl < l) { dx = sizexy; dy = 0.0; s[0] = sizexy; } else if(spl >= l+w && spl < 2*l+w) { dx = -sizexy; dy = 0.0; s[0] = -sizexy; } else if(spl >= l && spl < l+w) { dx = 0.0; dy = sizexy; s[0] = sizexy; } else { dx = 0.0; dy = -sizexy; s[0] = -sizexy; } float p[] = {x,y,row*sizez-sizez*h/2}; int gs = int(float(row) / float(h) * 128) + (i%2 * 10); windows[i] = new Window(s, p, dx == 0.0, color(gs + 64, gs + 64, gs + 100)); x += dx; y += dy; } for(int i = 0; i < 3; ++i) { if(theme[i] != null) theme[i].start(themespeed[i]); } return true; }