package de.lessvoid.nifty.effects.impl; import de.lessvoid.nifty.Nifty; import de.lessvoid.nifty.effects.EffectImpl; import de.lessvoid.nifty.effects.EffectProperties; import de.lessvoid.nifty.effects.Falloff; import de.lessvoid.nifty.elements.Element; import de.lessvoid.nifty.render.NiftyRenderEngine; import de.lessvoid.nifty.tools.Color; import de.lessvoid.nifty.tools.SizeValue; import de.lessvoid.nifty.tools.pulsate.Pulsator; import javax.annotation.Nonnull; import javax.annotation.Nullable; /** * Color - color overlay. * * @author void */ public class Pulsate implements EffectImpl { @Nonnull private final Color currentColor = new Color("#000f"); @Nullable private Color startColor; @Nullable private Color endColor; @Nullable private SizeValue width; @Nullable private Pulsator pulsator; private boolean changeColorOnly = false; private boolean activated = false; @Override public void activate( @Nonnull final Nifty nifty, @Nonnull final Element element, @Nonnull final EffectProperties parameter) { startColor = new Color(parameter.getProperty("startColor", "#00000000")); endColor = new Color(parameter.getProperty("endColor", "#ffffffff")); width = new SizeValue(parameter.getProperty("width")); changeColorOnly = Boolean.valueOf(parameter.getProperty("changeColorOnly", "false")); pulsator = new Pulsator(parameter, nifty.getTimeProvider()); } @Override public void execute( @Nonnull final Element element, final float normalizedTime, @Nullable final Falloff falloff, @Nonnull final NiftyRenderEngine r) { if (startColor == null || endColor == null || width == null || pulsator == null) { return; } if (!activated && normalizedTime > 0.0f) { activated = true; pulsator.reset(); } if (activated) { if (!changeColorOnly) { r.saveStates(); } float value = pulsator.update(); currentColor.linear(startColor, endColor, value); r.setColor(currentColor); if (!changeColorOnly) { int size = width.getValueAsInt(element.getParent().getWidth()); if (size == -1) { r.renderQuad(element.getX(), element.getY(), element.getWidth(), element.getHeight()); } else { r.renderQuad((element.getX() + element.getWidth() / 2) - size / 2, element.getY(), size, element.getHeight()); } } if (!changeColorOnly) { r.restoreStates(); } } } @Override public void deactivate() { activated = true; } }