home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / handson / files / java / stage4 / HawkRay.class (.txt) next >
Encoding:
Java Class File  |  2000-01-30  |  4.0 KB  |  174 lines

  1. import java.applet.Applet;
  2. import java.awt.Component;
  3. import java.awt.Graphics;
  4. import java.awt.Image;
  5. import java.awt.MediaTracker;
  6. import java.awt.image.MemoryImageSource;
  7. import java.awt.image.PixelGrabber;
  8.  
  9. public class HawkRay extends Applet implements Runnable {
  10.    // $FF: renamed from: w int
  11.    protected int field_0;
  12.    // $FF: renamed from: h int
  13.    protected int field_1;
  14.    protected int dispx = 0;
  15.    protected int dispz = 0;
  16.    protected int m_sw;
  17.    protected int m_sh;
  18.    protected int[] texel;
  19.    protected int m_cos1;
  20.    protected int m_sin1;
  21.    protected int xres;
  22.    protected int yres;
  23.    protected int m_alti = 120;
  24.    // $FF: renamed from: d int
  25.    protected int field_2 = 1;
  26.    protected int viewA = 180;
  27.    protected int dViewA = 3;
  28.    protected int[] screenPixel;
  29.    protected MemoryImageSource screenMem;
  30.    protected Image screenImage;
  31.    private int garbageCnt = 0;
  32.    private Thread theThread;
  33.    private boolean m_tAnimate = true;
  34.  
  35.    // $FF: synthetic method
  36.    static boolean access$0(HawkRay var0) {
  37.       return var0.m_tAnimate;
  38.    }
  39.  
  40.    // $FF: synthetic method
  41.    static void access$1(HawkRay var0, boolean var1) {
  42.       var0.m_tAnimate = var1;
  43.    }
  44.  
  45.    public void init() {
  46.       ((Component)this).addMouseListener(new HawkRay$1(this));
  47.       MediaTracker var1 = new MediaTracker(this);
  48.       Image var2 = ((Applet)this).getImage(((Applet)this).getDocumentBase(), ((Applet)this).getParameter("image"));
  49.       this.m_sh = ((Component)this).getSize().height << 2;
  50.       this.m_sw = ((Component)this).getSize().width;
  51.       this.screenPixel = new int[this.m_sw * this.m_sh >> 2];
  52.       this.screenMem = new MemoryImageSource(this.m_sw, this.m_sh >> 2, this.screenPixel, 0, this.m_sw);
  53.       var1.addImage(var2, 0);
  54.  
  55.       try {
  56.          var1.waitForID(0);
  57.       } catch (Exception var5) {
  58.       }
  59.  
  60.       this.field_0 = var2.getWidth(this);
  61.       this.field_1 = var2.getHeight(this);
  62.       this.texel = new int[this.field_0 * this.field_1];
  63.       PixelGrabber var3 = new PixelGrabber(var2.getSource(), 0, 0, this.field_0, this.field_1, this.texel, 0, this.field_0);
  64.  
  65.       try {
  66.          var3.grabPixels();
  67.       } catch (Exception var4) {
  68.          return;
  69.       }
  70.  
  71.       Object var6 = null;
  72.    }
  73.  
  74.    public void paint(Graphics var1) {
  75.       if (this.screenImage != null) {
  76.          var1.drawImage(this.screenImage, 0, 0, this);
  77.       }
  78.  
  79.    }
  80.  
  81.    protected void renderImage() {
  82.       int var7 = 0;
  83.       int var10 = this.field_0;
  84.       int var11 = this.field_1;
  85.       int var12 = this.m_sw - 1;
  86.       int var13 = this.m_sw;
  87.       int var14 = this.dispx;
  88.       int var15 = this.dispz;
  89.       int var16 = (3 * this.m_sh >> 2) + 1;
  90.       int var17 = this.m_sh;
  91.       double var18 = (double)this.m_sh;
  92.       int var20 = this.field_0 << 10;
  93.       int var21 = this.field_1 << 10;
  94.       int var22 = (int)((double)240.0F - (double)120.0F * Math.sin((double)this.viewA * 0.0174432925));
  95.       int var23 = (int)((double)1024.0F * Math.sin((double)this.viewA * 0.0174432925));
  96.       int var24 = (int)((double)1024.0F * Math.cos((double)this.viewA * 0.0174432925));
  97.       this.dispz += var24 << 3;
  98.       this.dispx += var23 << 3;
  99.  
  100.       for(int var25 = var16; var25 <= var17; ++var25) {
  101.          double var28 = (double)(var25 << 1) / var18 - (double)1.0F;
  102.          double var30 = ((double)var22 - var28) / var28;
  103.          double var32 = -(var30 + (double)1.0F) / (double)2.0F;
  104.          int var1 = (int)((double)var24 * var32 + (double)var23 * var30) + var14;
  105.          int var2 = (int)((double)(-var23) * var32 + (double)var24 * var30) + var15;
  106.          int var3 = (int)((double)(-var24) * var32 + (double)var23 * var30) + var14;
  107.          int var4 = (int)((double)var23 * var32 + (double)var24 * var30) + var15;
  108.          int var8 = (var3 - var1) / var12;
  109.          int var9 = (var4 - var2) / var12;
  110.          var8 = (var8 % var20 + var20) % var20;
  111.          var9 = (var9 % var21 + var21) % var21;
  112.  
  113.          for(int var34 = 0; var34 < var13; ++var34) {
  114.             int var5 = (var10 - var1 >> 10) % var10;
  115.             if (var5 < 0) {
  116.                var5 += var10;
  117.             }
  118.  
  119.             int var6 = (var2 >> 10) % var11;
  120.             if (var6 < 0) {
  121.                var6 += var11;
  122.             }
  123.  
  124.             this.screenPixel[var7++] = this.texel[var6 * var10 + var5];
  125.             var1 += var8;
  126.             var2 += var9;
  127.          }
  128.       }
  129.  
  130.       this.screenImage = ((Component)this).createImage(this.screenMem);
  131.    }
  132.  
  133.    public void run() {
  134.       Graphics var1 = ((Component)this).getGraphics();
  135.       Timer.sampleStart();
  136.  
  137.       for(; this.theThread != null && this.m_tAnimate; Timer.stop()) {
  138.          Timer.start();
  139.          if (this.viewA > 720) {
  140.             this.dViewA = -1;
  141.          } else if (this.viewA < 360) {
  142.             this.dViewA = 1;
  143.          }
  144.  
  145.          this.viewA += this.dViewA;
  146.          this.renderImage();
  147.          Thread.yield();
  148.          this.paint(var1);
  149.          if (this.garbageCnt++ > 120) {
  150.             System.gc();
  151.             this.garbageCnt = 0;
  152.          }
  153.       }
  154.  
  155.       Timer.sampleEnd();
  156.       Timer.report();
  157.    }
  158.  
  159.    public void start() {
  160.       (this.theThread = new Thread(this)).start();
  161.    }
  162.  
  163.    public void stop() {
  164.       if (this.theThread != null) {
  165.          this.theThread = null;
  166.       }
  167.  
  168.    }
  169.  
  170.    public void update(Graphics var1) {
  171.       this.paint(var1);
  172.    }
  173. }
  174.