Layered screen added

This commit is contained in:
Ondřej Hruška
2014-04-01 15:50:46 +02:00
parent ab73e0affd
commit b7f0057eaa
6 changed files with 141 additions and 5 deletions
@@ -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);
}
}
+4
View File
@@ -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;
}
}