package com.opticalcobra.storybear.game;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import com.opticalcobra.storybear.debug.DebugSettings;
import com.opticalcobra.storybear.editor.StoryInfo;
import com.opticalcobra.storybear.main.ILevelAppearance;
import com.opticalcobra.storybear.res.Imagelib;
import com.opticalcobra.storybear.res.Ressources;
import com.opticalcobra.storybear.res.StoryBearRandom;
public class DummyRendererMG extends Renderer implements IRenderer {
private Imagelib il = Imagelib.getInstance();
private StoryBearRandom rand = StoryBearRandom.getInstance();
private int lastTile = 0;
private int panelnum = 0;
private int elementPointer = 0;
private StoryInfo storyInfo;
private ArrayList<Integer> currentTileIds;
public DummyRendererMG(StoryInfo si){
this.storyInfo = si;
}
private BufferedImage getNextMapElement(){
Integer[] following = il.getFollowingTiles(lastTile, Imagelib.QUERY_MIDDLEGROUND);
int next = following[rand.nextInt(following.length)];
lastTile = next;
currentTileIds.add(next);
return il.loadLandscapeTile(next, Imagelib.QUERY_MIDDLEGROUND, null);
}
@Override
public void getNextViewPart(JLabel pane) {
ArrayList<ILevelAppearance> elements = this.storyInfo.getElements();
currentTileIds = new ArrayList<Integer>();
panelnum++;
BufferedImage image = new BufferedImage(Ressources.WINDOW.width, Ressources.WINDOW.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D) image.getGraphics();
for(int i=0;i<4;i++){
g.drawImage(getNextMapElement(),i*Ressources.RASTERSIZE*4,0,null);
if(DebugSettings.mgtilenum)
renderText(g,((float) (Ressources.STORYTEXTSIZE/Ressources.SCALE)), lastTile+"", (i*4*Ressources.RASTERSIZE)+20,100);
if(DebugSettings.mgpanelborder)
g.drawRect(i*4*Ressources.RASTERSIZE, 0, Ressources.RASTERSIZE*4, Ressources.WINDOW.height);
}
for(int i=0;i<4;i++){
//Bilder werden gerendert
if(elementPointer < elements.size() &&
elements.get(elementPointer).getBlock() <= (i + (panelnum-1)*4)){
(elements.get(elementPointer)).render(g, currentTileIds.get(0), Ressources.LAYERMIDDLEGROUND, pane);
//Wenn mehrere Elemente auf eine Kachel gerendert werden, darf i nicht hochgez�hlt werden
if (elementPointer+1 < storyInfo.getElements().size() &&
storyInfo.getElements().get(elementPointer).getBlock() == storyInfo.getElements().get(elementPointer+1).getBlock()){
i--;
} else{
currentTileIds.remove(0);
}
elementPointer++;
}
else{
currentTileIds.remove(0);
}
}
pane.setIcon(new ImageIcon(image));
if(DebugSettings.mgpanelnum)
renderText(g,50, panelnum+"", 20, 40);
}
}