/////////////////////////////////////////////////////////////////////////////
// Name:        press.pov
// Purpose:     POV-Ray scene used to generate clip for splash
// Author:      Wlodzimierz ABX Skiba
// Modified by:
// Created:     24/11/2004
// RCS-ID:      $Id$
// Copyright:   (c) Wlodzimierz Skiba
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////
            
#version 3.6;

// Rendering options : +FT +W80 +H60 +AM1 +A0.05 +R5 +J0 +KFF500
// Produced TGA images converted to MPG with good old (1993) CMPEG tool
// Conversion : cmpeg.exe -v1 ipb.ctl frames.lst press.mpg

#include "colors.inc"
#include "rad_def.inc"

global_settings {
    assumed_gamma 1.0
    max_trace_level 100
}

background { colour White }

#declare Texts = array[ 3 ];

#declare Texts[0] = "PRESS";
#declare Texts[1] = "ANY";
#declare Texts[2] = "KEY";

camera{ orthographic look_at .5 location .5-z right 1.05*x up 1.05*y }

#declare Items = dimension_size( Texts , 1 );
 
#declare Objects = array[ Items + 1 ];

#declare f_line = function(x,xa,ya,xb,yb){((yb-ya)/(xb-xa))*(x-xa)+ya};

#declare Counter = 0;
#while ( Counter <= Items )
    #if ( Counter < Items )
        #declare Object = text{ ttf "crystal.ttf" Texts[ Counter ] 1 0 };
    #else
        #declare Object = Objects[ Items ];
    #end

    #declare M = max_extent( Object );
    #declare m = min_extent( Object );
    #declare S = M - m;
    #declare Objects[ Counter ] = object{ Object translate -m + z*Counter scale <1/S.x,1/S.y,1> };
    #declare Objects[ Items ] = 
        #if ( Counter = 0 | Counter = Items )
            object{
        #else
            union{
                object{ Objects[ Items ] translate y*1.1 }
        #end
                object{ Objects[ Counter ] }
            };

    #declare Pause=0.1;    
    #declare X0=(Counter+Pause)/(Items+2);
    #declare Y0=0;
    #declare X1=(Counter+1)/(Items+2);
    #declare Y1=1;
    #declare X2=(Counter+2-Pause)/(Items+2);
    #declare Y2=0;

    #declare C1=f_line(clock,0,0,3/4,1);
    #declare C2=(Items+1)/(Items+2);
    #declare C3=f_line(clock,1/4,0,1,1);
    #declare C=max(min(C1,C2),C3);
    
    #declare increase=f_line(C,X0,Y0,X1,Y1);    
    #declare decrease=f_line(C,X1,Y1,X2,Y2);    
    #declare change=min(increase,decrease);
    #declare level=min(max(change,0),1);

    object{
        Objects[ Counter ]
        pigment{ rgb level transmit 1-level }
    } 
    #declare Counter = Counter + 1;
#end