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: [
            // a colorful background
            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
            ]
        }
    }
}