package com.github.plushaze.traynotification.animations; import com.github.plushaze.traynotification.models.CustomStage; import javafx.animation.SequentialTransition; import javafx.animation.Timeline; import javafx.util.Duration; public abstract class AbstractAnimation implements Animation { protected final CustomStage stage; protected final Timeline showAnimation, dismissAnimation; protected final SequentialTransition sq; protected volatile boolean trayIsShowing; protected AbstractAnimation(CustomStage stage) { this.stage = stage; showAnimation = setupShowAnimation(); dismissAnimation = setupDismissAnimation(); sq = new SequentialTransition(setupShowAnimation(), setupDismissAnimation()); } protected abstract Timeline setupShowAnimation(); protected abstract Timeline setupDismissAnimation(); @Override public final CustomStage getStage() { return stage; } @Override public final void playSequential(Duration dismissDelay) { sq.getChildren().get(1).setDelay(dismissDelay); sq.play(); } @Override public final void playShowAnimation() { showAnimation.play(); } @Override public final void playDismissAnimation() { dismissAnimation.play(); } @Override public final boolean isShowing() { return trayIsShowing; } }