package org.multiverseking.game.gui.control; import com.jme3.input.event.MouseButtonEvent; import com.jme3.input.event.MouseMotionEvent; import com.jme3.math.FastMath; import com.jme3.math.Vector2f; import com.jme3.math.Vector4f; import tonegod.gui.controls.buttons.Button; import tonegod.gui.controls.buttons.ButtonAdapter; import tonegod.gui.core.Element; import tonegod.gui.core.ElementManager; import tonegod.gui.effects.Effect; /** * * @todo On mouse press effect * @author roah */ public abstract class AnimatedButton extends Element { private float currentTimer = 0; private float endTimer; private boolean animate = false; private boolean reverseRotation = false; private Button buttonImg; public AnimatedButton(ElementManager screen, String UID, Vector2f position, Vector2f dimensions, String defaultImg, float timer) { this(screen, UID, position, dimensions, defaultImg, timer, false); } public AnimatedButton(ElementManager screen, String UID, Vector2f position, Vector2f dimensions, String defaultImg, float timer, boolean reverseRotation) { super(screen, UID + "Hook", new Vector2f(position.x + (dimensions.x / 2), position.y + (dimensions.y / 2)), new Vector2f(), Vector4f.ZERO, null); endTimer = timer; this.reverseRotation = reverseRotation; buttonImg = new ButtonAdapter(screen, UID, new Vector2f(-dimensions.x / 2, -dimensions.y / 2), dimensions, Vector4f.ZERO, defaultImg) { @Override public void onButtonFocus(MouseMotionEvent evt) { if (!animate) { animate = true; } } @Override public void onButtonMouseLeftDown(MouseButtonEvent evt, boolean toggled) { MouseLeftDown(evt, toggled); } @Override public void onButtonMouseRightDown(MouseButtonEvent evt, boolean toggled) { MouseRightDown(evt, toggled); } @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { MouseLeftUp(evt, toggled); } @Override public void onButtonMouseRightUp(MouseButtonEvent evt, boolean toggled) { MouseRightUp(evt, toggled); } }; buttonImg.removeEffect(Effect.EffectEvent.Hover); // buttonImg.removeEffect(Effect.EffectEvent.Press); this.addChild(buttonImg); } public void update(float tpf) { if (animate) { currentTimer += tpf; if (currentTimer >= endTimer) { if (buttonImg.getHasFocus()) { currentTimer = 0; updateRoll(currentTimer / endTimer); return; } currentTimer = 0; resetRoll(); animate = false; } else { updateRoll(currentTimer / endTimer); } } } private void updateRoll(float pass) { this.setLocalRotation(this.getLocalRotation().fromAngles(0, 0, 360 * FastMath.DEG_TO_RAD * (reverseRotation ? pass : 1.0f - pass))); } private void resetRoll() { this.setLocalRotation(this.getLocalRotation().fromAngles(0, 0, 0)); } public void MouseLeftDown(MouseButtonEvent evt, boolean toggled) { } public void MouseRightDown(MouseButtonEvent evt, boolean toggled) { } public void MouseLeftUp(MouseButtonEvent evt, boolean toggled) { } public void MouseRightUp(MouseButtonEvent evt, boolean toggled) { } }