package br.com.etyllica.core.context;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import br.com.etyllica.core.Updatable;
import br.com.etyllica.core.animation.AnimationHandler;
import br.com.etyllica.core.animation.script.AnimationScript;
import br.com.etyllica.core.effect.particle.Emitter;
import br.com.etyllica.core.event.KeyEvent;
import br.com.etyllica.core.event.PointerEvent;
import br.com.etyllica.core.graphics.Graphics;
import br.com.etyllica.core.ui.UIComponent;
import br.com.etyllica.layer.Layer;
public class Scene implements UIComponent {
protected List<Updatable> updatables = new ArrayList<Updatable>();
protected Map<Layer, List<Layer>> graph = new LinkedHashMap<Layer, List<Layer>>();
public Scene() {
super();
}
public void addAnimation(AnimationScript animation) {
AnimationHandler.getInstance().add(animation);
}
public void addEmitter(Emitter emitter) {
updatables.add(emitter);
add(emitter);
}
public void add(Layer layer) {
graph.put(layer, new ArrayList<Layer>());
}
public void addChild(Layer layer, Layer child) {
if(!graph.containsKey(layer)) {
add(layer);
}
List<Layer> children = graph.get(layer);
children.add(child);
}
public Map<Layer, List<Layer>> getGraph() {
return graph;
}
@Override
public void update(long now) {
for(Updatable updatable: updatables) {
updatable.update(now);
}
}
/**
* Draw Scene method with recurrency
*/
public void draw(Graphics g) {
for(Layer layer: graph.keySet()) {
drawLayer(g, layer);
}
}
private void drawLayer(Graphics g, Layer layer) {
layer.draw(g);
List<Layer> children = graph.get(layer);
for(Layer child: children) {
drawLayer(g, child);
}
}
@Override
public void updateMouse(PointerEvent event) {
// TODO Auto-generated method stub
}
@Override
public void updateKeyboard(KeyEvent event) {
// TODO Auto-generated method stub
}
}