package org.ripple.power.ui.projector.core;
import org.ripple.power.config.LSystem;
import org.ripple.power.ui.graphics.LColor;
import org.ripple.power.ui.graphics.LGraphics;
import org.ripple.power.ui.graphics.LImage;
import org.ripple.power.ui.projector.Config;
import org.ripple.power.ui.projector.action.sprite.effect.ArcEffect;
import org.ripple.power.ui.projector.action.sprite.effect.CrossEffect;
import org.ripple.power.ui.projector.action.sprite.effect.FadeEffect;
import org.ripple.power.ui.projector.action.sprite.effect.SplitEffect;
import org.ripple.power.utils.GraphicsUtils;
public class LTransition {
/**
* 随机的百叶窗特效
*
* @return
*/
public final static LTransition newCrossRandom() {
return newCrossRandom(LColor.black);
}
/**
* 百叶窗特效
*
* @param c
* @return
*/
public final static LTransition newCrossRandom(LColor c) {
return newCross(LSystem.getRandomBetWeen(0, 1),
GraphicsUtils.createLImage(LSystem.screenRect.width,
LSystem.screenRect.height, c));
}
/**
* 百叶窗特效
*
* @param c
* @return
*/
public final static LTransition newCross(final int c, final LImage texture) {
final LTransition transition = new LTransition();
transition.setTransitionListener(new TransitionListener() {
final CrossEffect cross = new CrossEffect(c, texture);
public void draw(LGraphics g) {
cross.createUI(g);
}
public void update(long elapsedTime) {
cross.update(elapsedTime);
}
public boolean completed() {
return cross.isComplete();
}
public void dispose() {
cross.dispose();
}
});
transition.setDisplayGameUI(true);
transition.code = 1;
return transition;
}
/**
* 默认使用黑色的圆弧渐变特效
*
* @return
*/
public final static LTransition newArc() {
return newArc(LColor.black);
}
/**
* 单一色彩的圆弧渐变特效
*
* @return
*/
public final static LTransition newArc(final LColor c) {
final LTransition transition = new LTransition();
transition.setTransitionListener(new TransitionListener() {
final ArcEffect arc = new ArcEffect(c);
public void draw(LGraphics g) {
arc.createUI(g);
}
public void update(long elapsedTime) {
arc.update(elapsedTime);
}
public boolean completed() {
return arc.isComplete();
}
public void dispose() {
arc.dispose();
}
});
transition.setDisplayGameUI(true);
transition.code = 1;
return transition;
}
/**
* 产生一个Screen画面向双向分裂的过渡特效
*
* @param texture
* @return
*/
public final static LTransition newSplitRandom(LImage texture) {
return newSplit(LSystem.getRandomBetWeen(0, Config.TDOWN), texture);
}
/**
* 产生一个Screen画面向双向分裂的过渡特效
*
* @param c
* @return
*/
public final static LTransition newSplitRandom(LColor c) {
return newSplitRandom(GraphicsUtils.createLImage(
LSystem.screenRect.width, LSystem.screenRect.height, c));
}
/**
* 产生一个Screen画面向双向分裂的过渡特效(方向的静态值位于Config类中)
*
* @param d
* @param texture
* @return
*/
public final static LTransition newSplit(final int d, final LImage texture) {
final LTransition transition = new LTransition();
transition.setTransitionListener(new TransitionListener() {
final SplitEffect split = new SplitEffect(texture, d);
public void draw(LGraphics g) {
split.createUI(g);
}
public void update(long elapsedTime) {
split.update(elapsedTime);
}
public boolean completed() {
return split.isComplete();
}
public void dispose() {
split.dispose();
}
});
transition.setDisplayGameUI(true);
transition.code = 1;
return transition;
}
/**
* 产生一个黑色的淡入效果
*
* @return
*/
public final static LTransition newFadeIn() {
return LTransition.newFade(FadeEffect.TYPE_FADE_IN);
}
/**
* 产生一个黑色的淡出效果
*
* @return
*/
public final static LTransition newFadeOut() {
return LTransition.newFade(FadeEffect.TYPE_FADE_OUT);
}
/**
* 产生一个黑色的淡入/淡出效果
*
* @param type
* @return
*/
public final static LTransition newFade(int type) {
return LTransition.newFade(type, LColor.black);
}
/**
* 产生一个指定色彩的淡入效果
*
* @param c
* @return
*/
public final static LTransition newFade(final int type, final LColor c) {
final LTransition transition = new LTransition();
transition.setTransitionListener(new TransitionListener() {
final FadeEffect fade = FadeEffect.getInstance(type, c);
public void draw(LGraphics g) {
fade.createUI(g);
}
public void update(long elapsedTime) {
fade.update(elapsedTime);
}
public boolean completed() {
return fade.isStop();
}
public void dispose() {
fade.dispose();
}
});
transition.setDisplayGameUI(true);
transition.code = 1;
return transition;
}
public final static LTransition newEmpty() {
final LTransition transition = new LTransition();
transition.setTransitionListener(new TransitionListener() {
public void draw(LGraphics g) {
}
public void update(long elapsedTime) {
}
public boolean completed() {
return true;
}
public void dispose() {
}
});
transition.setDisplayGameUI(true);
transition.code = 1;
return transition;
}
public static interface TransitionListener {
public void update(long elapsedTime);
public void draw(LGraphics g);
public boolean completed();
public void dispose();
}
// 是否在在启动过渡效果同时显示游戏画面(即是否顶层绘制过渡画面,底层同时绘制标准游戏画面)
boolean isDisplayGameUI;
int code;
TransitionListener listener;
public void setDisplayGameUI(boolean s) {
this.isDisplayGameUI = s;
}
public boolean isDisplayGameUI() {
return this.isDisplayGameUI;
}
public void setTransitionListener(TransitionListener l) {
this.listener = l;
}
public TransitionListener getTransitionListener() {
return this.listener;
}
final void update(long elapsedTime) {
if (listener != null) {
listener.update(elapsedTime);
}
}
final void draw(LGraphics g) {
if (listener != null) {
listener.draw(g);
}
}
final boolean completed() {
if (listener != null) {
return listener.completed();
}
return false;
}
final void dispose() {
if (listener != null) {
listener.dispose();
}
}
}