package fishsim;
import javafx.stage.*;
import javafx.scene.input.*;
import javafx.scene.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.scene.text.*;
import javafx.animation.*;
var fish = Fish {
translateX: 300
translateY: 100
};
fish.wag.play();
var ripper = RippleGenerator { };
var w = 600;
var h = 400;
var textOverlay = Text {
fill: Color.WHITE font: Font { size: 30 }
content: "Click to create ripples"
x: 70
y: 70
opacity: 1.0
visible: true;
};
var textFade = Timeline {
keyFrames: [
at(1s) { textOverlay.opacity=>0.0 }
KeyFrame {time:1s action: function() { textOverlay.visible = false } }
]
};
Stage {
scene: Scene {
content : Group { content: [
Rectangle { width: w height: h
fill: RadialGradient {
radius:500
focusX: 0
focusY: 0
centerX: 300
centerY: 300
proportional: false
stops: [
Stop {offset: 0 color: Color.BLACK },
Stop {offset: 1 color: Color.BLUE },
]
}
},
fish,
ripper,
Rectangle {
fill: Color.rgb(255,255,255,0.0)
width: w
height: h
onMousePressed: function(e:MouseEvent) {
ripper.generatorCenterX= e.x;
ripper.generatorCenterY= e.y;
ripper.createRipple();
ripper.generate.play();
fish.goTo(e.x,e.y);
if(textOverlay.visible) {
textFade.play();
}
}
onMouseDragged: function(e:MouseEvent) {
ripper.generatorCenterX= e.x;
ripper.generatorCenterY= e.y;
fish.goTo(e.x,e.y);
}
onMouseReleased: function(e:MouseEvent) {
ripper.generate.stop();
}
},
textOverlay
]
}
}
}