package org.ege.widget;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.delay;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeIn;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeOut;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.run;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.sequence;
import okj.easy.core.eAdmin;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Actor;
public class Toast extends Actor{
public static final int FADE = 1;
public static final int MOVE_HORIZONTAL = 2;
public static final int MOVE_VERTICAL = 3;
ToastStyle mStyle;
HAlignment mAlign = HAlignment.CENTER;
Runnable mCompleted =null;
Color tmp ;
Toast(){
super();
mStyle = new ToastStyle();
mStyle.font = new BitmapFont();
}
Toast(ToastStyle style){
super();
mStyle = style;
if(mStyle.font == null)
mStyle.font = new BitmapFont();
}
public static Toast newToast(){
return new Toast();
}
public static Toast newToast(TextureRegion background,String text,float time){
return new Toast().setBackground(background).setText(text).setTime(time);
}
public static Toast newToast(TextureRegion background,BitmapFont font,String text,float time){
return new Toast().setBackground(background).setText(text).setTime(time).setFont(font);
}
public static Toast newToast(TextureRegion background,String text,float wrappedWidth,float time){
return new Toast().setBackground(background).setText(text).setTime(time).setWrappedWidth(wrappedWidth);
}
public static Toast newToast(TextureRegion background,BitmapFont font,String text,float wrappedWidth,float time){
return new Toast().setBackground(background).setText(text).setTime(time).setWrappedWidth(wrappedWidth).setFont(font);
}
public static Toast newToast(ToastStyle style){
return new Toast(style);
}
/*******************************************************
*
*******************************************************/
public Toast setCompleteListener(Runnable listener){
mCompleted = listener;
return this;
}
public Toast setFont(BitmapFont font){
mStyle.font = font;
return this;
}
public Toast setText(String text){
mStyle.text = text;
return this;
}
public Toast setFontSize(float size){
float ratio = size/mStyle.font.getCapHeight();
mStyle.font.scale(ratio);
return this;
}
public Toast setFontColor(Color color){
mStyle.font.setColor(color);
return this;
}
public Toast setFontColor(float r,float g,float b,float a){
mStyle.font.setColor(r, g, b, a);
return this;
}
public Toast setTime(float time){
mStyle.time = time;
return this;
}
public Toast setWrappedWidth(float wrappedWidth){
mStyle.wrapped = wrappedWidth;
return this;
}
public Toast setFontAlign(HAlignment align){
mAlign = align;
return this;
}
public Toast setBackground(TextureRegion background){
mStyle.backgound = background;
return this;
}
public void show(Layout layout){
if(mStyle.time == 0)
mStyle.time = 1f;
if(mStyle.wrapped == 0)
mStyle.wrapped = eAdmin.toastWidth();
float t = mStyle.time/3;
setColor(1, 1, 1, 0);
addAction(sequence(fadeIn(t),delay(t),fadeOut(t),run(new Runnable() {
@Override
public void run () {
hide();
if(mCompleted != null)
mCompleted.run();
}
})));
setHeight(mStyle.font.getWrappedBounds(mStyle.text, mStyle.wrapped).height);
setWidth(mStyle.wrapped);
setX(eAdmin.uiWidth()/2 - mStyle.wrapped/2);
setY(eAdmin.uiHeight()/3+ getHeight()/2);
setZIndex(Integer.MAX_VALUE);
layout.addActor(this);
}
private void hide(){
tmp = null;
remove();
}
/*******************************************************
*
*******************************************************/
@Override
public void draw (SpriteBatch batch, float parentAlpha) {
final Color color = getColor();
batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
final float x= getX();
final float y = getY();
tmp= mStyle.font.getColor();
mStyle.font.setColor(tmp.r, tmp.g, tmp.b, color.a * parentAlpha);
if(mStyle.backgound != null)
batch.draw(mStyle.backgound,x - 13,y - getHeight()-13,getWidth() + 26 ,getHeight() + 26);
mStyle.font.drawWrapped(batch, mStyle.text, x, y, mStyle.wrapped, mAlign);
}
/***************************************************
* @author trung
*/
public static class ToastStyle {
public TextureRegion backgound;
public BitmapFont font;
public String text = "";
public float time = 1.3f;
public float wrapped;
}
}