Layered screen added
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
package mightypork.rogue.display;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import mightypork.rogue.AppAccess;
|
||||
import mightypork.rogue.display.rendering.ScreenLayer;
|
||||
|
||||
|
||||
public abstract class LayeredScreen extends Screen {
|
||||
|
||||
private List<ScreenLayer> layers = new ArrayList<ScreenLayer>();
|
||||
|
||||
|
||||
public LayeredScreen(AppAccess app) {
|
||||
super(app);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected abstract void initScreen();
|
||||
|
||||
|
||||
@Override
|
||||
protected abstract void deinitScreen();
|
||||
|
||||
|
||||
@Override
|
||||
protected abstract void onScreenEnter();
|
||||
|
||||
|
||||
@Override
|
||||
protected abstract void onScreenLeave();
|
||||
|
||||
|
||||
@Override
|
||||
protected void renderScreen()
|
||||
{
|
||||
// in reverse order (topmost added last)
|
||||
for (int i = layers.size() - 1; i >= 0; i--) {
|
||||
layers.get(i).render();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void updateScreen(double delta)
|
||||
{
|
||||
// no impl
|
||||
}
|
||||
|
||||
|
||||
protected void addLayer(ScreenLayer layer)
|
||||
{
|
||||
this.layers.add(layer);
|
||||
}
|
||||
|
||||
|
||||
protected void removeLayer(ScreenLayer layer)
|
||||
{
|
||||
this.layers.remove(layer);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package mightypork.rogue.display;
|
||||
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
|
||||
import mightypork.rogue.AppAccess;
|
||||
import mightypork.rogue.bus.DelegatingBusClient;
|
||||
import mightypork.rogue.bus.events.ScreenChangeEvent;
|
||||
@@ -233,6 +234,9 @@ public abstract class Screen extends DelegatingBusClient implements KeyBinder, B
|
||||
|
||||
renderBegin();
|
||||
renderScreen();
|
||||
|
||||
// TODO render layers ?
|
||||
|
||||
renderEnd();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,18 +1,29 @@
|
||||
package mightypork.rogue.display.rendering;
|
||||
|
||||
|
||||
import mightypork.rogue.AppAccess;
|
||||
import mightypork.rogue.bus.DelegatingBusClient;
|
||||
import mightypork.rogue.bus.UpdateReceiver;
|
||||
import mightypork.rogue.display.Screen;
|
||||
|
||||
|
||||
public abstract class ScreenLayer extends DelegatingBusClient implements Renderable {
|
||||
public abstract class ScreenLayer extends UpdateReceiver implements Renderable {
|
||||
|
||||
public ScreenLayer(AppAccess app) {
|
||||
super(app, true);
|
||||
private Screen screen;
|
||||
|
||||
public ScreenLayer(Screen screen) {
|
||||
super(screen);
|
||||
this.screen = screen;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public abstract void render();
|
||||
|
||||
|
||||
@Override
|
||||
public abstract void update(double delta);
|
||||
|
||||
protected Screen screen() {
|
||||
return screen;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user