package com.opticalcobra.storybear.game; import java.util.LinkedList; import java.util.Queue; import javax.swing.JLabel; import com.opticalcobra.storybear.main.Semaphore; import com.opticalcobra.storybear.menu.LoadingPanel; public class RenderThreadWrapper extends Thread{ private static RenderThreadWrapper renderThreadWrapper = null; private JLabel jl; private IRenderer ir; private LinkedList<Element> que = new LinkedList<Element>(); private LoadingPanel loading; private boolean enableRenderEnd = false; private RenderThreadWrapper(){ this.setPriority(Thread.MIN_PRIORITY); } public static RenderThreadWrapper getInstance(LoadingPanel lp){ if (renderThreadWrapper == null){ renderThreadWrapper = new RenderThreadWrapper(); renderThreadWrapper.start(); renderThreadWrapper.setLoadingPanel(lp); } return renderThreadWrapper; } public static void addRenderTask(IRenderer renderer, JLabel label){ Element el = new Element(); el.comp = label; el.renderer = renderer; renderThreadWrapper.que.add(el); } public void setLoadingPanel(LoadingPanel lp) { loading = lp; new Thread(new Runnable() { @Override public void run() { loading.setVisible(true); } }).start(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) {} enableRenderEnd = true; } }).start(); } @SuppressWarnings("static-access") @Override public void run(){ while(true){ if(!que.isEmpty()){ Element el = que.removeFirst(); // Debigging // System.out.println(el.renderer.toString()); el.renderer.getNextViewPart(el.comp); } this.yield(); // Loadingscreen if(enableRenderEnd && que.isEmpty()) loading.setVisible(false); loading.setMaximum(que.size()); loading.update(); } } public static class Element{ public IRenderer renderer; public JLabel comp; } public void cleanup() { stop(); renderThreadWrapper = null; que = new LinkedList<Element>(); } }