package magic.ui.widget.duel.player;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Stroke;
import javax.swing.JPanel;
import magic.data.GeneralConfig;
import magic.ui.utility.MagicStyle;
import magic.ui.theme.Theme;
import magic.ui.theme.ThemeFactory;
import org.pushingpixels.trident.Timeline;
import org.pushingpixels.trident.Timeline.TimelineState;
import org.pushingpixels.trident.ease.Spline;
@SuppressWarnings("serial")
public class AnimationPanel extends JPanel {
private static final int PULSE_BORDER_WIDTH = 5;
private static final int PULSE_BORDER_OFFSET = PULSE_BORDER_WIDTH / 2;
private static final Stroke PULSE_BORDER_STROKE = new BasicStroke(PULSE_BORDER_WIDTH);
private static final Color PULSE_BORDER_COLOR = ThemeFactory.getInstance().getCurrentTheme().getColor(Theme.COLOR_CHOICE_BORDER);
private int pulsingBorderOpacity = 0;
private final Timeline pulseBorderTimeline = new Timeline();
public int getPulsingBorderOpacity() {
return pulsingBorderOpacity;
}
public void setPulsingBorderOpacity(int pulsingBorderOpacity) {
this.pulsingBorderOpacity = pulsingBorderOpacity;
repaint();
}
public void doPulsingBorderAnimation(boolean b) {
if (b) {
startPulsingBorderAnimation();
} else {
stopPulsingBorderAnimation();
}
}
private void startPulsingBorderAnimation() {
if (GeneralConfig.getInstance().showGameplayAnimations()) {
stopPulsingBorderAnimation();
pulseBorderTimeline.setDuration(500);
pulseBorderTimeline.setEase(new Spline(0.8f));
pulseBorderTimeline.addPropertyToInterpolate(
Timeline.property("pulsingBorderOpacity").on(this).from(20).to(200));
pulseBorderTimeline.playLoop(Timeline.RepeatBehavior.REVERSE);
}
}
private void stopPulsingBorderAnimation() {
if (pulseBorderTimeline != null && pulseBorderTimeline.getState() != TimelineState.IDLE) {
pulseBorderTimeline.abort();
setPulsingBorderOpacity(0);
}
}
protected void drawPulsingBorder(final Graphics2D g2d) {
if (pulsingBorderOpacity > 0) {
g2d.setStroke(PULSE_BORDER_STROKE);
g2d.setColor(MagicStyle.getTranslucentColor(PULSE_BORDER_COLOR, getPulsingBorderOpacity()));
g2d.drawRect(
PULSE_BORDER_OFFSET,
PULSE_BORDER_OFFSET,
getWidth() - PULSE_BORDER_WIDTH - 1,
getHeight() - PULSE_BORDER_WIDTH - 1);
}
}
}