home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Component;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.MediaTracker;
- import java.awt.image.MemoryImageSource;
- import java.awt.image.PixelGrabber;
-
- public class HawkRay extends Applet implements Runnable {
- // $FF: renamed from: w int
- protected int field_0;
- // $FF: renamed from: h int
- protected int field_1;
- protected int dispx;
- protected int dispz;
- protected int m_sw;
- protected int m_sh;
- protected int[] texel;
- protected int m_cos1;
- protected int m_sin1;
- protected int xres;
- protected int yres;
- protected int m_alti = 120;
- // $FF: renamed from: d int
- protected int field_2 = 1;
- protected int viewA = 180;
- protected int dViewA = 3;
- protected int[] screenPixel;
- protected MemoryImageSource screenMem;
- protected Image screenImage;
- private int garbageCnt;
- private Thread theThread;
- private boolean m_tAnimate = true;
-
- public void init() {
- ((Component)this).addMouseListener(new HawkRay$1(this));
- MediaTracker var1 = new MediaTracker(this);
- Image var2 = ((Applet)this).getImage(((Applet)this).getDocumentBase(), ((Applet)this).getParameter("image"));
- this.m_sh = ((Component)this).getSize().height << 2;
- this.m_sw = ((Component)this).getSize().width;
- this.screenPixel = new int[this.m_sw * this.m_sh >> 2];
- this.screenMem = new MemoryImageSource(this.m_sw, this.m_sh >> 2, this.screenPixel, 0, this.m_sw);
- var1.addImage(var2, 0);
-
- try {
- var1.waitForID(0);
- } catch (Exception var5) {
- }
-
- this.field_0 = var2.getWidth(this);
- this.field_1 = var2.getHeight(this);
- this.texel = new int[this.field_0 * this.field_1];
- PixelGrabber var3 = new PixelGrabber(var2.getSource(), 0, 0, this.field_0, this.field_1, this.texel, 0, this.field_0);
-
- try {
- var3.grabPixels();
- } catch (Exception var4) {
- return;
- }
-
- Object var6 = null;
- }
-
- public void start() {
- (this.theThread = new Thread(this)).start();
- }
-
- public void stop() {
- if (this.theThread != null) {
- this.theThread = null;
- }
-
- }
-
- public void run() {
- Graphics var1 = ((Component)this).getGraphics();
- Timer.sampleStart();
-
- for(; this.theThread != null && this.m_tAnimate; Timer.stop()) {
- Timer.start();
- if (this.viewA > 720) {
- this.dViewA = -1;
- } else if (this.viewA < 360) {
- this.dViewA = 1;
- }
-
- this.viewA += this.dViewA;
- this.renderImage();
- Thread.yield();
- this.paint(var1);
- if (this.garbageCnt++ > 120) {
- System.gc();
- this.garbageCnt = 0;
- }
- }
-
- Timer.sampleEnd();
- Timer.report();
- }
-
- public void update(Graphics var1) {
- this.paint(var1);
- }
-
- public void paint(Graphics var1) {
- if (this.screenImage != null) {
- var1.drawImage(this.screenImage, 0, 0, this);
- }
-
- }
-
- protected void renderImage() {
- int var15 = 0;
- this.m_alti = (int)((double)240.0F - (double)120.0F * Math.sin((double)this.viewA * 3.1415926 / (double)180.0F));
- this.m_sin1 = (int)((double)1024.0F * Math.sin((double)this.viewA * 3.1415926 / (double)180.0F));
- this.m_cos1 = (int)((double)1024.0F * Math.cos((double)this.viewA * 3.1415926 / (double)180.0F));
- double var9 = (double)(this.field_0 * (this.viewA % 360) / 360);
- this.dispz += this.m_cos1 << 3;
- this.dispx += this.m_sin1 << 3;
-
- for(int var16 = (3 * this.m_sh >> 2) + 1; var16 <= this.m_sh; ++var16) {
- this.planePoint(0, var16);
- double var1 = (double)this.xres;
- double var3 = (double)this.yres;
- this.planePoint(this.m_sw - 1, var16);
- double var5 = (double)this.xres;
- double var7 = (double)this.yres;
- double var11 = (var5 - var1) / (double)(this.m_sw - 1);
- double var13 = (var7 - var3) / (double)(this.m_sw - 1);
- var11 = (var11 % (double)(this.field_0 << 10) + (double)(this.field_0 << 10)) % (double)(this.field_0 << 10);
- var13 = (var13 % (double)(this.field_1 << 10) + (double)(this.field_1 << 10)) % (double)(this.field_1 << 10);
-
- for(int var17 = 0; var17 < this.m_sw; ++var17) {
- this.setTexel(var15++, (int)var1, (int)var3);
- var1 += var11;
- var3 += var13;
- }
- }
-
- this.screenImage = ((Component)this).createImage(this.screenMem);
- }
-
- void setTexel(int var1, int var2, int var3) {
- int var4 = this.modIt(this.field_0 - var2 >> 10, this.field_0);
- int var5 = this.modIt(var3 >> 10, this.field_1);
- this.screenPixel[var1] = this.texel[var5 * this.field_0 + var4];
- }
-
- int modIt(int var1, int var2) {
- int var3 = var1 % var2;
- if (var3 < 0) {
- var3 += var2;
- }
-
- return var3;
- }
-
- protected void planePoint(int var1, int var2) {
- double var5 = (double)(var2 << 1) / (double)this.m_sh - (double)1.0F;
- double var7 = (double)this.field_2 * ((double)this.m_alti - var5) / var5;
- double var3 = (double)(var1 - (this.m_sw >> 1)) / (double)this.m_sw;
- double var9 = var3 * (var7 + (double)this.field_2) / (double)this.field_2;
- this.xres = (int)((double)this.m_cos1 * var9 + (double)this.m_sin1 * var7) + this.dispx;
- this.yres = (int)((double)(-this.m_sin1) * var9 + (double)this.m_cos1 * var7) + this.dispz;
- }
-
- // $FF: synthetic method
- static boolean access$0(HawkRay var0) {
- return var0.m_tAnimate;
- }
-
- // $FF: synthetic method
- static void access$1(HawkRay var0, boolean var1) {
- var0.m_tAnimate = var1;
- }
- }
-