/*
 * Main.fx
 *
 * Created on Oct 21, 2008, 10:12:45 PM
 */

package carousel;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import java.lang.Math;
import java.lang.System;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.shape.Arc;
import javafx.scene.shape.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.Group;
import javafx.scene.transform.Translate;
import javafx.scene.input.*;
import javafx.scene.paint.*;

/**
 * @author Vaibhav Choudhary
 */

var angle;
var angle_rad=angle * Math.PI / 180;
var dur: Duration = 15ms;   // can control speed of rotation on by changing this variable.
var carousel: Carousel[];
var im:String[] = ["{__DIR__}im1.PNG", "{__DIR__}im2.PNG","{__DIR__}im3.PNG",
"{__DIR__}im4.PNG","{__DIR__}im5.PNG","{__DIR__}im6.PNG"];

var s:String;
var y=0;
var speed=5;
var radius=100;
var xcenter=70;
var ycenter=50;
var zcenter=100;

var fl=100;  // used for scaling factor. Basically it will work like a camera at Z axis.
var shift = Math.PI  /  2;
var image_gap = Math.PI  /  3;  // placement of each image at PI/6 distance,because of 6 images.
var radius_y = 60;

var s_left:Image = Image {url: "{__DIR__}leftlight.png"};
var s_leftglow:Image = Image {url: "{__DIR__}left.png"};
var s_right:Image = Image {url: "{__DIR__}rightlight.png"};
var s_rightglow:Image = Image {url: "{__DIR__}right.png"};

var s_right_d = s_right;
var s_left_d = s_left;


    for(i in [0..5]) {
   insert Carousel {
            X:  Math.cos(angle + i  *  image_gap + shift) * radius + xcenter;
            Y:  -Math .sin(angle + i  *  image_gap + shift) * radius_y + ycenter ;
            Z:  Math.sin(angle + i  *  image_gap + shift) * radius + zcenter
            scale: fl / (fl + Math.sin(angle + i  *  image_gap + shift) * radius + zcenter)
            image: bind Image {
                url: im[i]
            }

        } into carousel
    }
var timeline = Timeline {
        repeatCount: 20
        keyFrames : [
            KeyFrame {
                time : dur
                action: function() {
                    angle_rad = angle_rad + Math.PI / 60;
                    for(i in [0..5]) {
                        carousel[i].update(i,angle_rad);
                    }
                }
            }
        ]
}
// timeline for anti-clockwise rotation

var timeline_rev = Timeline {
        repeatCount: 20
        keyFrames : [
            KeyFrame {
                time : dur
                action: function() {
                    angle_rad = angle_rad - Math.PI / 60;
                    for(i in [0..5]) {
                        carousel[i].update(i,angle_rad);
                    }

                }
            }
        ]
}

    Stage{
        title : "Carousel Application"
        width: 240
        height: 320
        scene: Scene{
            fill: Color.BLACK
            content:  [
                Rectangle {
                    x: 5, y: 25
                    width: 220, height: 200
                    arcHeight:20
                    arcWidth:20
                    strokeWidth: 1
                    stroke: Color.LIGHTGRAY
                    opacity: 0.0
                    onKeyPressed:function(e:KeyEvent):Void {
                        if(e.code == KeyCode.VK_LEFT) {
                            timeline_rev.play();
                        }
                        if(e.code == KeyCode.VK_RIGHT) {
                            timeline.play();
                        }
                    }

                },
                carousel,
                Rectangle {
                    x: 0, y: 265
                    width: 240, height: 25
                    arcHeight:5 arcWidth:5
                    fill: LinearGradient {
                        startX: 0.0
                        startY: 0.0
                        endX: 0.0
                        endY: 1.0
                        proportional: true
                        stops: [
                            Stop { offset: 0.0 color: Color.GRAY },
                            Stop { offset: 0.5 color: Color.BLACK },
                            Stop { offset: 1.0 color: Color.GRAY }
                        ]
                    }
                    opacity:0.5
                },

                ImageView {
                    x: 40 y: 264
                    image: bind s_left
                    onMouseClicked: function( e: MouseEvent ):Void {
                        s_left = s_leftglow;
                        timeline_rev.play();
                    }
                    onMouseMoved: function( e: MouseEvent ):Void {
                        s_left = s_leftglow;
                    }
                    onMouseExited: function( e: MouseEvent ):Void {
                        s_left = s_left_d;
                    }
                },

                ImageView {
                    x: 170 y: 264
                    image: bind s_right
                    onMouseClicked: function( e: MouseEvent ):Void {
                        s_right = s_rightglow;
                        timeline.play();
                    }
                    onMouseMoved: function( e: MouseEvent ):Void {
                        s_right = s_rightglow;
                    }
                    onMouseExited: function( e: MouseEvent ):Void {
                        s_right = s_right_d;
                    }
                },
            ]
        }
}