//HELIX ANIMATION uint8_t animation::helix(cube &c){ float X = 0; float Y = 0; float Z = 0; slow++; if(slow < 100){ return 0; } slow = 0; c.clearVoxels(); //use my fancy pants sine function for(uint8_t i = 0; i < 3; i++){ for(uint8_t z = 0; z < 4; z++){ Z = z*52; X = get_sinA(Z + phase + 18*i); Y = get_sinA(Z + phase + 90 + 18*i); X = (X+1)*4; Y = (Y+1)*4; c.setVoxel((uint8_t)X, (uint8_t)Y, z); c.setVoxel((uint8_t)(8-X), (uint8_t)(8-Y), z+4); } } //increment the phase phase+=18; if(phase > 360){ phase -= 360; } return 1; }
//SINGLE PLANE BOUNCING uint8_t animation::bouncePlane(cube &c, uint8_t axis){ slow++; if(slow < 200){ return 0; } slow = 0; //the X animation looks the same but actually clears everything in its path //rather than clear everything at the start, it makes a simple but cool //transition between some animations if(axis != 'X'){ c.clearVoxels(); } switch(axis){ case 'X': for(uint8_t z = 0; z < Zd; z++){ for(uint8_t y = 0; y < Yd; y++){ for(uint8_t x = 0; x < Xd; x++){ if(x == pos - dir){ c.clearVoxel(x, y, z); } c.setVoxel(pos, y, z); } } } break; case 'Y': for(uint8_t x = 0; x < Xd; x++){ for(uint8_t z = 0; z < Zd; z++){ c.setVoxel(x, pos, z); } } break; case 'Z': for(uint8_t x = 0; x < Xd; x++){ for(uint8_t y = 0; y < Yd; y++){ c.setVoxel(x, y, pos); } } break; } //bounce the pos variable between 0 and 7 bouncePos(); return 1; }