package com.ulooked.engine.services;
import java.util.ArrayList;
import java.util.List;
import android.graphics.PointF;
import com.stickycoding.rokon.*;
import com.ulooked.engine.Entity;
import com.ulooked.engine.GameEngine;
import com.ulooked.engine.commands.AddSceneCommand;
import com.ulooked.engine.commands.AddTextureCommand;
import com.ulooked.engine.commands.Command;
import com.ulooked.engine.commands.ICommandResult;
import com.ulooked.engine.commands.LoadTexturesCommand;
import com.ulooked.engine.commands.RenderCommand;
import com.ulooked.engine.commands.RenderCommandResult;
import com.ulooked.engine.components.ComponentType;
import com.ulooked.engine.components.Render;
public class RenderService implements IService {
private static ArrayList<Class<? extends Command>> _cmds = new ArrayList<Class<? extends Command>>();
private TextureAtlas _atlas;
public RenderService() {
_cmds.add(RenderCommand.class);
_cmds.add(AddTextureCommand.class);
_cmds.add(LoadTexturesCommand.class);
_cmds.add(AddSceneCommand.class);
_atlas = new TextureAtlas(100);
}
public ICommandResult process(Command command) {
if (command.getClass() == RenderCommand.class) {
Scene currScene = GameEngine.self.getScene();
for (Entity entity : command.getEntities()) {
if (entity != null && entity.hasComponent(ComponentType.Render)) {
Render render = (Render)entity.getComponent(ComponentType.Render);
Sprite sprite = render.getSprite();
currScene.add(render.getZIndex(), sprite);
}
}
} else if (command.getClass() == AddTextureCommand.class) {
_atlas.insert(((AddTextureCommand)command).getTexture());
} else if (command.getClass() == LoadTexturesCommand.class) {
_atlas.complete();
} else if (command.getClass() == AddSceneCommand.class) {
AddSceneCommand cmd = (AddSceneCommand)command;
GameEngine.self.addScene(cmd.getSceneName(), cmd.getScene());
if (cmd.activate())
GameEngine.self.gameActivity().setScene(cmd.getScene());
}
return new RenderCommandResult();
}
public List<Class<? extends Command>> handledCommands() {
return _cmds;
}
}
|