home *** CD-ROM | disk | FTP | other *** search
Wrap
import java.applet.Applet; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.net.MalformedURLException; import java.net.URL; public class GIFLake extends Applet implements Runnable { private int boatHeight; private boolean keepRunning = true; private int captureCount; // $FF: renamed from: g1 Animator private Animator field_0; private transient Thread thrLake; private static final String PARAM_IMAGE = "image"; private static final String PARAM_OVERLAY = "overlay"; private static final String PARAM_TARGET = "target"; private static final String PARAM_HREF = "hRef"; private static final String PARAM_ROCKING = "rocking"; private static final String PARAM_UNDERWATER = "underwater"; private static final String PARAM_SPEED = "speed"; private Image image; private Image overlay; private MediaTracker overlayTracker; private String target = "_self"; private URL hRef; private boolean rocking = false; private boolean underwater = false; private int speed = 50; private int numFrames = 12; private transient Graphics gMain; private transient Graphics gWave; private transient Image imgWave; private transient int currImage; private transient int widthImage; private transient int heightImage; private transient int widthOverlay; private transient int heightOverlay; private transient boolean allLoaded = false; private transient boolean isAnimating = true; private transient int boatPhase; private transient int boatPhaseTotal = 50; public void initAnimation() { Dimension var1 = ((Component)this).getSize(); this.field_0 = Animator.getInstance("GIF", var1.width, var1.height); this.field_0.setFPS(40); } public void startCapture() { this.captureCount = 12; } public void captureFrame() { if (this.captureCount > 0) { this.field_0.addImage(this.imgWave, this); if (--this.captureCount == 0) { try { this.field_0.getAnimation().serializeTo(new PrintStream(new FileOutputStream("lake.gif"))); return; } catch (IOException var1) { return; } } } } public void start() { this.keepRunning = true; if (this.thrLake == null) { this.thrLake = new Thread(this); this.thrLake.start(); } } public void stop() { this.keepRunning = false; } public void run() { this.currImage = 0; this.initAnimation(); while(this.keepRunning) { try { while(!this.isAnimating) { Thread.sleep(500L); } if (++this.currImage == this.numFrames) { this.currImage = 0; } if (++this.boatPhase == this.boatPhaseTotal) { this.boatPhase = 0; } this.displayImage(); this.captureFrame(); ((Component)this).repaint(); Thread.sleep(30L); } catch (InterruptedException var1) { this.stop(); } } } public String getAppletInfo() { return "Name: Lake Version 3.1\r\nAuthor: David Griffiths\r\nis an applet class which takes in an \r\nimage and reflects it in a virtual Lake.\r\nLast compiled: 4th April 1999 at 08:27\t\r\nFor more information about this and other applets\r\ngo to http://www.demon.co.uk/davidg/spigots.htm\r\nCreated with Sun JDK 1.1"; } public Image getImage() { return this.image; } public void setImage(Image var1) { this.image = var1; this.widthImage = this.image.getWidth(this); this.heightImage = this.image.getHeight(this); this.allLoaded = true; this.createAnimation(); } public void setImageValue(String var1) { this.setImage(((Applet)this).getImage(((Applet)this).getDocumentBase(), var1)); } public boolean imageUpdate(Image var1, int var2, int var3, int var4, int var5, int var6) { boolean var7 = super.imageUpdate(var1, var2, var3, var4, var5, var6); if (var1 == this.image) { int var8 = this.heightImage; if ((var2 & 48) != 0) { this.widthImage = var5; this.heightImage = var6; } else { this.widthImage = ((Component)this).getSize().width; this.heightImage = 10 * ((Component)this).getSize().height / 18; } if (var8 != this.heightImage) { this.createAnimation(); } } return var7; } public Image getOverlay() { return this.overlay; } public void setOverlay(Image var1) { this.overlay = var1; this.overlayTracker = new MediaTracker(this); this.overlayTracker.addImage(var1, 0); } public void setOverlayValue(String var1) { this.setOverlay(((Applet)this).getImage(((Applet)this).getDocumentBase(), var1)); } private boolean overlayReady() { if (this.overlayTracker != null) { return this.overlayTracker.statusID(0, true) == 8; } else { return false; } } public String getTarget() { return this.target; } public void setTarget(String var1) { this.target = var1; } public void setTargetValue(String var1) { this.setTarget(var1); } public URL getHRef() { return this.hRef; } public void setHRef(URL var1) { this.hRef = var1; } public void setHRefValue(String var1) { this.setHRef(this.createURL(var1)); } private URL createURL(String var1) { URL var2 = null; if (var1 != null) { try { var2 = new URL(((Applet)this).getDocumentBase(), var1); } catch (MalformedURLException var3) { this.error("Bad URL: " + var1); var2 = null; } } return var2; } public boolean isRocking() { return this.rocking; } public void setRocking(boolean var1) { this.rocking = var1; } public void setRockingValue(String var1) { this.setRocking(var1.toUpperCase().equals("TRUE")); } public void toggleRocking() { this.setRocking(!this.isRocking()); } public boolean isUnderwater() { return this.underwater; } public void setUnderwater(boolean var1) { this.underwater = var1; } public void setUnderwaterValue(String var1) { this.setUnderwater(var1.toUpperCase().equals("TRUE")); } public void toggleUnderwater() { this.setUnderwater(!this.isUnderwater()); } public int getSpeed() { return this.speed; } public void setSpeed(int var1) { if (var1 > 100) { var1 = 100; } else if (var1 < 1) { var1 = 1; } this.speed = var1; this.numFrames = 600 / var1; } public void setSpeedValue(String var1) { this.setSpeed(Integer.parseInt(var1)); } public String[][] getParameterInfo() { String[][] var1 = new String[][]{{"image", "Image", "JPG or GIF file to reflect"}, {"overlay", "Image", "JPG or GIF file to use as an overlay"}, {"target", "String", "Target frame"}, {"hRef", "URL", "URL to link to"}, {"rocking", "boolean", "TRUE if boat rocking"}, {"underwater", "boolean", "TRUE if viewer underwater"}, {"speed", "int", "The animation speed: 1-100"}}; return var1; } private void loadParams() { String var1 = ((Applet)this).getParameter("image"); if (var1 != null) { this.setImageValue(var1); } var1 = ((Applet)this).getParameter("overlay"); if (var1 != null) { this.setOverlayValue(var1); } var1 = ((Applet)this).getParameter("target"); var1 = ((Applet)this).getParameter("hRef"); if (var1 != null) { this.setHRefValue(var1); } var1 = ((Applet)this).getParameter("rocking"); if (var1 != null) { this.setRockingValue(var1); } var1 = ((Applet)this).getParameter("underwater"); if (var1 != null) { this.setUnderwaterValue(var1); } var1 = ((Applet)this).getParameter("speed"); if (var1 != null) { this.setSpeedValue(var1); } } public void init() { ((Component)this).repaint(); System.out.println(this.getAppletInfo()); this.loadParams(); this.allLoaded = true; ((Component)this).addMouseListener(new GIFLake$1(this)); } public Dimension getPreferredSize() { return new Dimension(this.widthImage, (int)((double)this.heightImage * 1.8)); } private void error(String var1) { ((Applet)this).getAppletContext().showStatus(var1); } public void update(Graphics var1) { this.paint(var1); } public void paint(Graphics var1) { if (this.imgWave != null) { var1.drawImage(this.imgWave, 0, this.boatHeight, this); } } private void displayImage() { if (this.isRocking()) { this.boatHeight = (int)((double)this.heightImage * Math.sin((Math.PI * 2D) * (double)this.boatPhase / (double)this.boatPhaseTotal) / (double)8.0F) - this.heightImage / 8; } else { this.boatHeight = 0; } if (this.imgWave != null) { if (this.isUnderwater()) { this.gWave.drawImage(this.image, 0, ((Component)this).getSize().height - this.heightImage, this); this.makeWavesInverse(this.gWave, this.currImage); this.boatHeight = -this.boatHeight; } else { this.gWave.drawImage(this.image, 0, 0, this); this.makeWaves(this.gWave, this.currImage); } if (this.overlay != null && this.overlayReady()) { this.gWave.drawImage(this.overlay, this.widthImage - this.overlay.getWidth(this) >> 1, this.heightImage - (this.overlay.getHeight(this) >> 1) + this.boatHeight, this); } } } private void createAnimation() { if (this.widthImage > 0 && this.heightImage > 0) { synchronized(this){} try { this.imgWave = ((Component)this).createImage(this.widthImage, 2 * this.heightImage); this.gWave = this.imgWave.getGraphics(); } catch (Throwable var3) { throw var3; } } ((Component)this).repaint(); } private void makeWaves(Graphics var1, int var2) { double var3 = (Math.PI * 2D) * (double)var2 / (double)this.numFrames; for(int var5 = 0; var5 < this.heightImage; ++var5) { int var6 = (int)((double)(this.heightImage / 14) * ((double)var5 + (double)28.0F) * Math.sin((double)(this.heightImage / 14 * (this.heightImage - var5)) / (double)(var5 + 1) + var3) / (double)this.heightImage); if (var5 - this.heightImage > var6) { var1.copyArea(0, this.heightImage - var5, this.widthImage, 1, 0, var5 << 1); } else { var1.copyArea(0, this.heightImage - var5 + var6, this.widthImage, 1, 0, (var5 << 1) - var6); } } } private void makeWavesInverse(Graphics var1, int var2) { double var3 = (Math.PI * 2D) * (double)var2 / (double)this.numFrames; int var5 = ((Component)this).getSize().height; for(int var6 = 0; var6 < this.heightImage; ++var6) { int var7 = (int)((double)(this.heightImage / 14) * ((double)var6 + (double)28.0F) * Math.sin((double)(this.heightImage / 14 * (this.heightImage - var6)) / (double)(var6 + 1) + var3) / (double)this.heightImage); if (var6 - this.heightImage > var7) { var1.copyArea(0, var5 - this.heightImage + var6, this.widthImage, 1, 0, -(var6 << 1)); } else { var1.copyArea(0, var5 - this.heightImage + var6 - var7, this.widthImage, 1, 0, var7 - (var6 << 1)); } } } // $FF: synthetic method static URL access$0(GIFLake var0) { return var0.hRef; } // $FF: synthetic method static void access$1(GIFLake var0, String var1) { var0.error(var1); } // $FF: synthetic method static String access$2(GIFLake var0) { return var0.target; } }