This is freaking awesome
I'm sorry, but It's not quite ready for release, but the "custom flow" feature is implemented. That means: you can completely customize the way the covers flow throught 3d-space through the settings.
Developement has slowed down since I'm playing with this thing since 2 days.
As a sneak preview, here's the "api" for customizing the flow. The language is Jscript. It should be useable for anyone who is able to use foobar titleformating (except for the mirror settings you have know what a normal is ).
// General Notes:
// Most of these functions return an array with 3 elements
// These are the x,y,z coordinates in 3d-space
// x is left to right
// y is bottom to top
// z is front to back
/************************* COVER DISPLAY *****************/
// These functions define the Display of the single Covers
// The given parameter coverId is a floating point number.
// It is 0 for the center cover, 1 for the one right
// beneath it, -1 for the one on the left side and so on.
// During movement the values float between the integer
// values.
function coverPosition(coverId){
var x, y, z;
x = coverId/2;
y = 1;
z = -8;
return new Array(x, y, z);
}
// return array is (angle, x, ,y, z) - this rotates
// the cover *angle* degrees around the vector (x,y,z)
// With (0,0,0,0) the cover is parallel to the y-z-Plane
function coverRotation(coverId){
return new Array(10,0,1,0);
}
// Sets which point of the cover coverPosition() defines
// (-1,-1) means bottom left, (0,0) means center,
// (1,1) means top right, (0, -1) means bottom center etc.
// The cover is also rotated around this point.
function coverAlign(coverId){
return new Array(0, -1);
}
// Defines the the size boundaries for the cover.
// Aspect ratio is preserved.
// Return Array is (widht, height)
function coverSizeLimits(coverId){
return new Array(1, 1.5);
}
// Defines the range of covers to draw.
// Return array is (leftmostCover, rightmostCover)
// The Selected cover is 0
function drawCovers(){
return new Array(-10, 10);
}
/************************** CAMMERA SETUP ****************/
// Position of the viewport
function eyePos(){
return new Array(0, -0.3, 0);
}
// Defines the point for the eye to look at
function lookAt(){
return new Array(0, -0.3, -4);
}
// Used to rotate the view.
// The returned Vector points upwards in the viewport.
// This vector must not be parallel to the line of sight from the
// eyePos point to the lookAt point.
function upVector(){
return new Array(0, 1, 0);
}
/************************** MIRROR SETUP *****************/
function showMirrorPlane(){
return true; // return false to hide the mirror plane
}
// Any Point on the Mirror Plane
function mirrorPoint (){
return new Array(0, -1, -50);
}
// Normal of the Mirror Plane
function mirrorNormal (){
return new Array(0, 0, 1);
}