let the base state listen to the resolution change events
This commit is contained in:
@@ -17,7 +17,49 @@
|
||||
*/
|
||||
package yugecin.opsudance.core.state;
|
||||
|
||||
public abstract class BaseOpsuState implements OpsuState {
|
||||
import yugecin.opsudance.core.DisplayContainer;
|
||||
import yugecin.opsudance.core.ResolutionChangeListener;
|
||||
|
||||
public abstract class BaseOpsuState implements OpsuState, ResolutionChangeListener {
|
||||
|
||||
protected final DisplayContainer displayContainer;
|
||||
|
||||
/**
|
||||
* state is dirty when resolution or skin changed but hasn't rendered yet
|
||||
*/
|
||||
private boolean isDirty;
|
||||
private boolean isCurrentState;
|
||||
|
||||
public BaseOpsuState(DisplayContainer displayContainer) {
|
||||
this.displayContainer = displayContainer;
|
||||
displayContainer.addResolutionChangeListener(this);
|
||||
}
|
||||
|
||||
protected void revalidate() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisplayResolutionChanged(int width, int height) {
|
||||
if (isCurrentState) {
|
||||
revalidate();
|
||||
return;
|
||||
}
|
||||
isDirty = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enter() {
|
||||
isCurrentState = true;
|
||||
if (isDirty) {
|
||||
revalidate();
|
||||
isDirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void leave() {
|
||||
isCurrentState = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCloseRequest() {
|
||||
|
||||
@@ -17,8 +17,16 @@
|
||||
*/
|
||||
package yugecin.opsudance.core.state.transitions;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import yugecin.opsudance.core.DisplayContainer;
|
||||
|
||||
public class EmptyTransitionState extends TransitionState {
|
||||
|
||||
@Inject
|
||||
public EmptyTransitionState(DisplayContainer displayContainer) {
|
||||
super(displayContainer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enter() {
|
||||
finish();
|
||||
|
||||
@@ -23,12 +23,10 @@ import yugecin.opsudance.core.DisplayContainer;
|
||||
|
||||
public abstract class FadeTransitionState extends TransitionState {
|
||||
|
||||
private final DisplayContainer container;
|
||||
|
||||
private final Color black;
|
||||
|
||||
public FadeTransitionState(DisplayContainer container) {
|
||||
this.container = container;
|
||||
public FadeTransitionState(DisplayContainer displayContainer) {
|
||||
super(displayContainer);
|
||||
black = new Color(Color.black);
|
||||
}
|
||||
|
||||
@@ -37,7 +35,7 @@ public abstract class FadeTransitionState extends TransitionState {
|
||||
applicableState.render(g);
|
||||
black.a = getMaskAlphaLevel((float) transitionTime / transitionTargetTime);
|
||||
g.setColor(black);
|
||||
g.fillRect(0, 0, container.width, container.height);
|
||||
g.fillRect(0, 0, displayContainer.width, displayContainer.height);
|
||||
}
|
||||
|
||||
protected abstract float getMaskAlphaLevel(float fadeProgress);
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package yugecin.opsudance.core.state.transitions;
|
||||
|
||||
import org.newdawn.slick.Graphics;
|
||||
import yugecin.opsudance.core.DisplayContainer;
|
||||
import yugecin.opsudance.core.state.BaseOpsuState;
|
||||
import yugecin.opsudance.core.state.OpsuState;
|
||||
|
||||
@@ -30,6 +31,10 @@ public abstract class TransitionState extends BaseOpsuState {
|
||||
|
||||
private TransitionFinishedListener listener;
|
||||
|
||||
public TransitionState(DisplayContainer displayContainer) {
|
||||
super(displayContainer);
|
||||
}
|
||||
|
||||
public final TransitionState set(OpsuState applicableState, int targetTime, TransitionFinishedListener listener) {
|
||||
this.applicableState = applicableState;
|
||||
this.transitionTargetTime = targetTime;
|
||||
@@ -61,12 +66,10 @@ public abstract class TransitionState extends BaseOpsuState {
|
||||
|
||||
@Override
|
||||
public void enter() {
|
||||
super.enter();
|
||||
transitionTime = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void leave() { }
|
||||
|
||||
protected final void finish() {
|
||||
listener.onFinish();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user