home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Component;
- import java.awt.Event;
- 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
- private int field_0;
- // $FF: renamed from: h int
- private int field_1;
- private int dispx;
- private int dispz;
- private int m_sw;
- private int m_sh;
- private int[] texel;
- private int m_cos1;
- private int m_sin1;
- private int xres;
- private int yres;
- private int[] screenPixel;
- private int m_alti = 120;
- // $FF: renamed from: d int
- private int field_2 = 1;
- private int viewA = 180;
- private int dViewA = 3;
- private int paintCnt;
- private int garbageCnt;
- private MemoryImageSource screenMem;
- private Thread theThread;
- private Image screenImage;
- private boolean m_tAnimate = true;
-
- public void init() {
- MediaTracker var1 = new MediaTracker(this);
- Image var2 = ((Applet)this).getImage(((Applet)this).getDocumentBase(), ((Applet)this).getParameter("image"));
- this.m_sh = ((Component)this).size().height << 2;
- this.m_sw = ((Component)this).size().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.stop();
- this.theThread = null;
- }
-
- }
-
- public void run() {
- while(this.theThread != null) {
- if (this.paintCnt++ < 5 && this.m_tAnimate) {
- if (this.viewA > 720) {
- this.dViewA = -1;
- } else if (this.viewA < 360) {
- this.dViewA = 1;
- }
-
- this.viewA += this.dViewA;
- this.renderImage();
- ((Component)this).repaint();
-
- try {
- Thread.sleep(50L);
- } catch (InterruptedException var2) {
- }
- } else {
- try {
- Thread.sleep(1000L);
- } catch (InterruptedException var1) {
- }
- }
-
- if (this.garbageCnt++ > 120) {
- System.gc();
- this.garbageCnt = 0;
- }
- }
-
- }
-
- public boolean mouseDown(Event var1, int var2, int var3) {
- this.m_tAnimate = !this.m_tAnimate;
- return true;
- }
-
- public void update(Graphics var1) {
- this.paint(var1);
- }
-
- public void paint(Graphics var1) {
- this.paintCnt = 0;
- if (this.screenImage != null) {
- var1.drawImage(this.screenImage, 0, 0, this);
- }
-
- }
-
- private void renderImage() {
- int var8 = 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));
- int var7 = this.field_0 * (this.viewA % 360) / 360;
- this.dispz += this.m_cos1 << 3;
- this.dispx += this.m_sin1 << 3;
-
- for(int var11 = (3 * this.m_sh >> 2) + 1; var11 <= this.m_sh; ++var11) {
- this.planePoint(0, var11);
- int var1 = this.xres;
- int var2 = this.yres;
- this.planePoint(this.m_sw - 1, var11);
- int var3 = this.xres;
- int var4 = this.yres;
- int var9 = (var3 - var1) / (this.m_sw - 1);
- int var10 = (var4 - var2) / (this.m_sw - 1);
- var9 = (var9 % (this.field_0 << 10) + (this.field_0 << 10)) % (this.field_0 << 10);
- var10 = (var10 % (this.field_1 << 10) + (this.field_1 << 10)) % (this.field_1 << 10);
-
- for(int var12 = 0; var12 < this.m_sw; ++var12) {
- int var5 = (var1 >> 10) % this.field_0;
- if (var5 < 0) {
- var5 += this.field_0;
- }
-
- int var6 = (var2 >> 10) % this.field_1;
- if (var6 < 0) {
- var6 += this.field_1;
- }
-
- this.screenPixel[var8++] = this.texel[var6 * this.field_0 + var5];
- var1 += var9;
- var2 += var10;
- }
- }
-
- this.screenImage = ((Component)this).createImage(this.screenMem);
- }
-
- private 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;
- }
- }
-