// (C) 2001 SyGem Software import java.awt.*; import java.applet.*; import com.sygem.jazz3d3.*; import com.sygem.jazz3d3.loader.*; public class prettyLoader extends Applet implements Runnable { Thread m_ce; World myWorld; int light1; int pid; Model3d sp1; Choice models = new Choice(); int downx = 0; int downy = 0; double ddx = 0; double ddy = 0; boolean down = false; boolean antialias = false; boolean bilinear = false; boolean loading = false; //Construct the applet public prettyLoader() { } //Initialize the applet public void init() { myWorld = new World(this); setLayout(new BorderLayout()); add("Center",myWorld); models.addItem("models/Duck.asc"); models.addItem("models/55porsmx.3ds"); models.addItem("models/axe.lwo"); models.addItem("models/Bishop.gem"); models.addItem("models/brdleaf.3ds"); models.addItem("models/city.geo"); models.addItem("models/fbhelmet.3ds"); models.addItem("models/flowers.3ds"); models.addItem("models/saber.lwo"); models.addItem("models/sled.3ds"); models.addItem("models/tree.3ds"); models.addItem("models/warbird.3ds"); models.addItem("models/coolrobo.3ds"); models.addItem("models/tiefight.3ds"); add("North",models); RenderSolid tex = new RenderSolid(); tex.setDrawingMode(Render.FLAT); sp1 = new Model3d(0,0,8); LoadFactory load = new LoadFactory(); load.assignLoader("ASC", new LoaderASC()); sp1.loadModelInThread("models/Duck.asc", load); sp1.setRenderer(tex); Light l1 = new Light(0,0,1); myWorld.addLight(l1); } //Start the applet public void start() { if (m_ce == null) { m_ce = new Thread(this); m_ce.start(); } } //Stop the applet public void stop() { if (m_ce != null) { m_ce.stop(); m_ce = null; } } //Destroy the applet public void destroy() { } public void run() { int iCount = 0; long lTime0 = System.currentTimeMillis(); double z; ddx = 0.16; ddy = 0.35; z = 0.21; myWorld.prep(); // For each object... sp1.beginLoadingInThread(1); while (sp1.loading()) { myWorld.prepareCanvas(); myWorld.drawImage(); paint1(myWorld.getCanvas()); myWorld.finishCanvas(); } sp1.finishLoadingInThread(); pid = myWorld.addObject(sp1); // And then call prepNewObjects(); myWorld.prepNewObjects(); while (true) { if (!loading) { myWorld.getParentObject(pid).rotateWorld(ddy,ddx,z); myWorld.prepareCanvas(); myWorld.generateImage(); myWorld.drawImage(); myWorld.finishCanvas(); } else { myWorld.suspend(); myWorld.deleteObject(pid); RenderSolid tex = new RenderSolid(); tex.setDrawingMode(Render.FLAT); sp1 = new Model3d(0,0,8); LoadFactory load = new LoadFactory(); load.assignLoader("ASC", new LoaderASC()); load.assignLoader("3DS", new Loader3DS()); load.assignLoader("LWO", new LoaderLWO()); load.assignLoader("GEM", new LoaderGEM()); load.assignLoader("GEO", new LoaderGEO()); sp1.loadModelInThread(models.getSelectedItem(), load); sp1.setRenderer(tex); sp1.beginLoadingInThread(1); while (sp1.loading()) { myWorld.prepareCanvas(); myWorld.drawImage(); paint1(myWorld.getCanvas()); myWorld.finishCanvas(); } sp1.finishLoadingInThread(); pid = myWorld.addObject(sp1); // And then call prepNewObjects(); myWorld.prepNewObjects(); myWorld.resume(); loading=false; } } } void paint1(Graphics g) { g.setColor(new Color(255,0,0)); g.drawString("Loaded "+sp1.getLoadProgress()+"%",20,80); g.drawString("Imagine the possiblities...",20,110); g.drawString("Any kind of graphic display",20,140); g.drawString("could be used here...",20,160); } public boolean mouseDown(Event evt, int x, int y) { downx = x; downy = y; down = true; return true; } public boolean mouseUp(Event evt, int x, int y) { down = false; return true; } public boolean mouseDrag(Event evt, int x, int y) { if (down) { double dx = x - downx; double dy = y - downy; ddx = (dx / (this.size().width))*10.0; ddy = (dy / (this.size().height))*10.0; } return true; } public boolean keyDown(Event evt,int key) { if ((char)key=='a') {antialias=!antialias; myWorld.setAntiAliasing(antialias); return true; } if ((char)key=='b') {bilinear=!bilinear; myWorld.setBilinear(bilinear); return true; } return true; } public boolean action(Event e, Object s) { if (e.target==models) { if (!loading) loading=true; } return true; } }