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.*;
var angle;
var angle_rad=angle * Math.PI / 180;
var dur: Duration = 15ms;
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;
var shift = Math.PI / 2;
var image_gap = Math.PI / 3;
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);
}
}
}
]
}
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;
}
},
]
}
}