package com.opticalcobra.storybear.game; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.LinkedList; import javax.swing.ImageIcon; import javax.swing.JLabel; import com.opticalcobra.storybear.db.DBConstants; import com.opticalcobra.storybear.db.Database; import com.opticalcobra.storybear.db.TileResult; import com.opticalcobra.storybear.debug.DebugSettings; import com.opticalcobra.storybear.editor.StoryInfo; import com.opticalcobra.storybear.editor.TextAnalyzer; import com.opticalcobra.storybear.main.ILevelAppearance; import com.opticalcobra.storybear.main.Ringbuffer; import com.opticalcobra.storybear.res.Imagelib; import com.opticalcobra.storybear.res.Ressources; import com.opticalcobra.storybear.res.StoryBearRandom; public class InteractionRenderer extends Renderer implements IRenderer{ private int panelnum = 0; private ArrayList<ILevelAppearance> storyInfoElements; private LinkedList<TileResult> tileQue; private ArrayList<JLabel>[] labels= new ArrayList[3]; int elementPointer = 0; public InteractionRenderer(LinkedList<TileResult> tileQue, ArrayList<ILevelAppearance> elememts){ this.tileQue = tileQue; this.storyInfoElements = elememts; for (int i = 0; i < labels.length; i++) { labels[i] = new ArrayList<JLabel>(); } } public void getNextViewPart(JLabel pane) { JLabel currentLabel; for(JLabel label:labels[panelnum%3]){ pane.remove(label); } labels[panelnum%3].clear(); BufferedImage image = new BufferedImage(Ressources.WINDOW.width, Ressources.WINDOW.height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) image.getGraphics(); for (int i = 0; i < Ressources.TILESPERPANEL; i++){ //render collectable and character if (elementPointer < storyInfoElements.size() && storyInfoElements.get(elementPointer).getBlock()%Ressources.TILESPERPANEL == i){ if (storyInfoElements.get(elementPointer) instanceof Collectable || storyInfoElements.get(elementPointer) instanceof Character){ currentLabel = new JLabel(); if (panelnum < 3){ tileQue.get((panelnum)*Ressources.TILESPERPANEL + i).setInteractionObjectLabel(currentLabel); storyInfoElements.get(elementPointer).render(g, tileQue.get((panelnum)*Ressources.TILESPERPANEL + i).getTileType(), Ressources.LAYERINTERACTION, currentLabel); } else{ tileQue.get(2*Ressources.TILESPERPANEL +i).setInteractionObjectLabel(currentLabel); storyInfoElements.get(elementPointer).render(g, tileQue.get(2*Ressources.TILESPERPANEL +i).getTileType(), Ressources.LAYERINTERACTION, currentLabel); } labels[panelnum%3].add(currentLabel); pane.add(currentLabel); pane.revalidate(); } //Wenn mehrere Elemente auf eine Kachel gerendert werden, darf i nicht hochgez�hlt werden if (elementPointer + 1 < storyInfoElements.size() && storyInfoElements.get(elementPointer).getBlock()%Ressources.TILESPERPANEL == storyInfoElements.get(elementPointer + 1).getBlock()%Ressources.TILESPERPANEL){ i--; } elementPointer++; } } panelnum++; pane.setIcon(new ImageIcon(image)); } }