/*
  This file belongs in

  <TheGHOUL/DemoFiles/>

  Hank J. van Leuvensteijn Jr. 2021
  theghoul@hankjr.ca
*/

include<TheGHOUL/Config.scad>

/* Set the graph/function domain. */
Domain=2;
$AnimSegs=3;
AnimVector=[0.5,1,2,2.5];
RSphere=0.02;

// Pick a good viewpoint.
$vpr=[0,0,0];
//$vpt=[0.5*$AnimSegs,0.5,0];
$vpt=[1.1,-0.5,0];
$vpd=3*$AnimSegs;

// Generate some graph paper...
translate([0,0,-0.01])
GraphPaper(Major=1,Minor=0.1,Size=[[-0.1,-0.1],[$AnimSegs+0.1,1.1]],LineFactor=262,Color=[0.5,0.5,0.5],Alpha=0.3);

/*
  Experiment with the parameters directly in this call. See the actual function AnimationFxTwoSines() for an explanation of the parameters. This is just a demo-file.

  Activate ONE of the module calls immediately below, or more if you'd like to compare...
*/

*TS(AnimVector,Base=0.1,SinA=[0.6,90,2],SinB=[0.6,180,12],Freq=1,Max=2); // TwoSines

*TC(AnimVector,Base=0,CosA=[0.5,90,1],CosB=[0.4,360,1],Freq=1,Max=1); // TwoCosines

*TRNGL(Freq=2); // Triangle

FRAC(Freq=1); // Fraction

*SQR(Freq=2); // Square

*BMP(); // Bump

*BNC(); // Bounce

*LPH(); // Alpha

*OMG(); // Omega

*FLS(); // Flash

*DIP(); // Dip

*WBL(); // Wobble

*AMR(); // Animator
/*
  The modules that draw the above graphs. They all have uppercase names, so we know for sure there's no conflict with library modules and functions.
*/

module TS(AnimVector,Base,SinA,SinB,Freq,Max){
    for(I=[0:0.001:$AnimSegs])
    translate([I,AnFxTS(AnimVector,Base,SinA,SinB,Freq,Max,$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module TC(AnimVector,Base,CosA,CosB,Freq,Max){
    for(I=[0:0.001:$AnimSegs])
    translate([I,AnFxTC(AnimVector,Base,CosA,CosB,Freq,Max,$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module TRNGL(Freq=1){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxTr(AnimVector,Freq,$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module FRAC(Freq=1){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxFr(AnimVector,Freq,$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module SQR(Freq=1){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxSq(AnimVector,Freq,$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module BMP(){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxTS(AnimVector,0,[1,90,6],[0.8,180,6],$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module BNC(){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxTS(AnimVector,0,[1,90,6],[1.2,180,6],$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module LPH(){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxTS(AnimVector,0.3,[0.7,90,2],[0,180,1],$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module OMG(){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxTS(AnimVector,1,[-0.7,90,2],[0,180,1],$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module FLS(){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxTS(AnimVector,0,[0,90,1],[1,180,2],$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module DIP(){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxTS(AnimVector,1,[0,90,1],[-1,180,2],$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module WBL(){
    for(I=[0:0.01:$AnimSegs])
    translate([I,AnFxTS(AnimVector,0.5,[0,90,1],[-0.5,360,1],$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}

module AMR(){
    for(I=[0:0.01:$AnimSegs])
    translate([I,Animator([[0,0.9],[1.5,0.7,0.5],[2.5,0.9],[4,0.4],[5,0.4]],$t=I/$AnimSegs),0])
    sphere(r=RSphere,$fn=10);
}