home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / handson / files / java / stage2 / HawkRay.class (.txt) next >
Encoding:
Java Class File  |  2000-01-30  |  4.2 KB  |  173 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;
  15.    protected int dispz;
  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;
  32.    private Thread theThread;
  33.    private boolean m_tAnimate = true;
  34.  
  35.    public void init() {
  36.       ((Component)this).addMouseListener(new HawkRay$1(this));
  37.       MediaTracker var1 = new MediaTracker(this);
  38.       Image var2 = ((Applet)this).getImage(((Applet)this).getDocumentBase(), ((Applet)this).getParameter("image"));
  39.       this.m_sh = ((Component)this).getSize().height << 2;
  40.       this.m_sw = ((Component)this).getSize().width;
  41.       this.screenPixel = new int[this.m_sw * this.m_sh >> 2];
  42.       this.screenMem = new MemoryImageSource(this.m_sw, this.m_sh >> 2, this.screenPixel, 0, this.m_sw);
  43.       var1.addImage(var2, 0);
  44.  
  45.       try {
  46.          var1.waitForID(0);
  47.       } catch (Exception var5) {
  48.       }
  49.  
  50.       this.field_0 = var2.getWidth(this);
  51.       this.field_1 = var2.getHeight(this);
  52.       this.texel = new int[this.field_0 * this.field_1];
  53.       PixelGrabber var3 = new PixelGrabber(var2.getSource(), 0, 0, this.field_0, this.field_1, this.texel, 0, this.field_0);
  54.  
  55.       try {
  56.          var3.grabPixels();
  57.       } catch (Exception var4) {
  58.          return;
  59.       }
  60.  
  61.       Object var6 = null;
  62.    }
  63.  
  64.    public void start() {
  65.       (this.theThread = new Thread(this)).start();
  66.    }
  67.  
  68.    public void stop() {
  69.       if (this.theThread != null) {
  70.          this.theThread = null;
  71.       }
  72.  
  73.    }
  74.  
  75.    public void run() {
  76.       Graphics var1 = ((Component)this).getGraphics();
  77.  
  78.       while(this.theThread != null && this.m_tAnimate) {
  79.          if (this.viewA > 720) {
  80.             this.dViewA = -1;
  81.          } else if (this.viewA < 360) {
  82.             this.dViewA = 1;
  83.          }
  84.  
  85.          this.viewA += this.dViewA;
  86.          this.renderImage();
  87.          Thread.yield();
  88.          this.paint(var1);
  89.          if (this.garbageCnt++ > 120) {
  90.             System.gc();
  91.             this.garbageCnt = 0;
  92.          }
  93.       }
  94.  
  95.    }
  96.  
  97.    public void update(Graphics var1) {
  98.       this.paint(var1);
  99.    }
  100.  
  101.    public void paint(Graphics var1) {
  102.       if (this.screenImage != null) {
  103.          var1.drawImage(this.screenImage, 0, 0, this);
  104.       }
  105.  
  106.    }
  107.  
  108.    protected void renderImage() {
  109.       int var15 = 0;
  110.       this.m_alti = (int)((double)240.0F - (double)120.0F * Math.sin((double)this.viewA * 3.1415926 / (double)180.0F));
  111.       this.m_sin1 = (int)((double)1024.0F * Math.sin((double)this.viewA * 3.1415926 / (double)180.0F));
  112.       this.m_cos1 = (int)((double)1024.0F * Math.cos((double)this.viewA * 3.1415926 / (double)180.0F));
  113.       double var9 = (double)(this.field_0 * (this.viewA % 360) / 360);
  114.       this.dispz += this.m_cos1 << 3;
  115.       this.dispx += this.m_sin1 << 3;
  116.  
  117.       for(int var16 = (3 * this.m_sh >> 2) + 1; var16 <= this.m_sh; ++var16) {
  118.          this.planePoint(0, var16);
  119.          double var1 = (double)this.xres;
  120.          double var3 = (double)this.yres;
  121.          this.planePoint(this.m_sw - 1, var16);
  122.          double var5 = (double)this.xres;
  123.          double var7 = (double)this.yres;
  124.          double var11 = (var5 - var1) / (double)(this.m_sw - 1);
  125.          double var13 = (var7 - var3) / (double)(this.m_sw - 1);
  126.          var11 = (var11 % (double)(this.field_0 << 10) + (double)(this.field_0 << 10)) % (double)(this.field_0 << 10);
  127.          var13 = (var13 % (double)(this.field_1 << 10) + (double)(this.field_1 << 10)) % (double)(this.field_1 << 10);
  128.  
  129.          for(int var17 = 0; var17 < this.m_sw; ++var17) {
  130.             this.setTexel(var15++, (int)var1, (int)var3);
  131.             var1 += var11;
  132.             var3 += var13;
  133.          }
  134.       }
  135.  
  136.       this.screenImage = ((Component)this).createImage(this.screenMem);
  137.    }
  138.  
  139.    void setTexel(int var1, int var2, int var3) {
  140.       int var4 = this.modIt(this.field_0 - var2 >> 10, this.field_0);
  141.       int var5 = this.modIt(var3 >> 10, this.field_1);
  142.       this.screenPixel[var1] = this.texel[var5 * this.field_0 + var4];
  143.    }
  144.  
  145.    int modIt(int var1, int var2) {
  146.       int var3 = var1 % var2;
  147.       if (var3 < 0) {
  148.          var3 += var2;
  149.       }
  150.  
  151.       return var3;
  152.    }
  153.  
  154.    protected void planePoint(int var1, int var2) {
  155.       double var5 = (double)(var2 << 1) / (double)this.m_sh - (double)1.0F;
  156.       double var7 = (double)this.field_2 * ((double)this.m_alti - var5) / var5;
  157.       double var3 = (double)(var1 - (this.m_sw >> 1)) / (double)this.m_sw;
  158.       double var9 = var3 * (var7 + (double)this.field_2) / (double)this.field_2;
  159.       this.xres = (int)((double)this.m_cos1 * var9 + (double)this.m_sin1 * var7) + this.dispx;
  160.       this.yres = (int)((double)(-this.m_sin1) * var9 + (double)this.m_cos1 * var7) + this.dispz;
  161.    }
  162.  
  163.    // $FF: synthetic method
  164.    static boolean access$0(HawkRay var0) {
  165.       return var0.m_tAnimate;
  166.    }
  167.  
  168.    // $FF: synthetic method
  169.    static void access$1(HawkRay var0, boolean var1) {
  170.       var0.m_tAnimate = var1;
  171.    }
  172. }
  173.