home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 39 / IOPROG_39.ISO / SOFT / sdkjava40.exe / data1.cab / fg_Samples / Samples / DirectX / d3drmcastle / Castle.java < prev    next >
Encoding:
Java Source  |  2000-05-04  |  4.8 KB  |  204 lines

  1. //
  2. // (C) Copyright 1995 - 1999 Microsoft Corporation.  All rights reserved.
  3. //
  4. import java.awt.*;
  5. import java.applet.*;
  6. import java.net.URL;
  7. import com.ms.com.*;
  8. import com.ms.directX.*;
  9.  
  10. public class Castle extends Applet implements Runnable, DirectXConstants
  11. {
  12.     private Thread t; 
  13.     private boolean running;
  14.     private boolean    StandAlone;
  15.  
  16.     URL    url;
  17.     CastleCanvas castlecanvas;
  18.     D3dVector dir    = new D3dVector();
  19.     D3dVector up     = new D3dVector();
  20.     D3dVector right  = new D3dVector();
  21.  
  22.     ////////////////////////////////////////////////////////////////////////////
  23.     public static void main(String args[])
  24.     {
  25.         Castle applet = new Castle();
  26.         applet.StandAlone = true;
  27.  
  28.         CastleFrame frame = new CastleFrame("Direct3D Retained Mode Demo");
  29.  
  30.         frame.show();
  31.         frame.resize(frame.insets().left + frame.insets().right  + 512,
  32.                      frame.insets().top  + frame.insets().bottom + 384);
  33.         frame.add("Center", applet);
  34.  
  35.         applet.init();
  36.         frame.show();
  37.         applet.start();
  38.     }
  39.  
  40.     //////////////////////////////////////////////////////////////////////////
  41.     public void init()
  42.     {
  43.         if ( StandAlone == false )
  44.             url = getCodeBase();
  45.  
  46.         BorderLayout bl = new BorderLayout();
  47.         setLayout(bl);
  48.         setBackground(Color.white);
  49.  
  50.         castlecanvas = new CastleCanvas();
  51.         add("Center",castlecanvas);
  52.  
  53.         show();
  54.  
  55.         Dimension d = bl.preferredLayoutSize(this);
  56.         resize(d.width, d.height);
  57.     }
  58.  
  59.     //////////////////////////////////////////////////////////////////////////
  60.     public void start()
  61.     {
  62.         if ( castlecanvas != null )
  63.             castlecanvas.init(url);
  64.  
  65.         requestFocus();
  66.  
  67.         running = true;
  68.         t = new Thread(this);
  69.         t.start();
  70.     }
  71.  
  72.     //////////////////////////////////////////////////////////////////////////
  73.     public void stop()
  74.     {
  75.         running = false;
  76.         t.stop();
  77.     }
  78.  
  79.     //////////////////////////////////////////////////////////////////////////
  80.     public void run()
  81.     {
  82.         while (running)
  83.             castlecanvas.renderScene();
  84.  
  85.         //
  86.         // Clear out the d3drm objects 
  87.         //
  88.         castlecanvas.scene            = null;
  89.         castlecanvas.camera            = null;
  90.         castlecanvas.mainframe        = null;
  91.         castlecanvas.builder        = null;
  92.         castlecanvas.d3drmviewport    = null;
  93.         castlecanvas.d3drmdevice    = null;
  94.         castlecanvas.d3ddevice        = null;
  95.         castlecanvas.d3d            = null;
  96.         castlecanvas.d3drm            = null;
  97.         castlecanvas.ddpal            = null;
  98.         castlecanvas.ddszbuffer        = null;
  99.         castlecanvas.ddsoffscreen    = null;    
  100.         castlecanvas.ddsprimary        = null;
  101.         castlecanvas.ddclipper        = null;
  102.         castlecanvas.dd                = null;                    
  103.         castlecanvas                = null;
  104.  
  105.         System.gc();
  106.     }
  107.  
  108.     //////////////////////////////////////////////////////////////////////////
  109.     public boolean keyUp(Event e, int key)
  110.     {
  111.         if ( castlecanvas == null )
  112.             return false;
  113.  
  114.         switch(key)
  115.         {
  116.             case Event.UP:
  117.                 castlecanvas.keydown &= ~0x1;
  118.                 break;
  119.  
  120.             case Event.DOWN:
  121.                 castlecanvas.keydown &= ~0x2;
  122.                 break;
  123.  
  124.             case Event.LEFT:
  125.                 castlecanvas.keydown &= ~0x10;
  126.                 break;
  127.  
  128.             case Event.RIGHT:
  129.                 castlecanvas.keydown &= ~0x20;
  130.                 break;
  131.  
  132.             case 'a':
  133.             case 'A':
  134.                 castlecanvas.keydown &= ~0x4;
  135.                 castlecanvas.keydir.x = 0;
  136.                 castlecanvas.keydir.z = 0;
  137.                 break;
  138.  
  139.             case 'z':
  140.             case 'Z':
  141.                 castlecanvas.keydown &= ~0x8;
  142.                 castlecanvas.keydir.x = 0;
  143.                 castlecanvas.keydir.z = 0;
  144.                 break;
  145.         }
  146.  
  147.         return true;
  148.     }
  149.  
  150.     //////////////////////////////////////////////////////////////////////////
  151.     public boolean keyDown(Event e, int key)
  152.     {
  153.         if ( castlecanvas == null )
  154.             return false;
  155.  
  156.         castlecanvas.camera.getOrientation(castlecanvas.scene, dir, up);
  157.         castlecanvas.d3drm.vectorCrossProduct(right, up, dir);
  158.  
  159.         switch(key)
  160.         {
  161.             case Event.UP:
  162.                 castlecanvas.keydown |= 0x1;
  163.                 castlecanvas.rtheta = 0.1F;
  164.                 castlecanvas.rx     = right.x;
  165.                 castlecanvas.rz     = right.z;
  166.                 break;
  167.  
  168.             case Event.DOWN:
  169.                 castlecanvas.keydown |= 0x2;
  170.                 castlecanvas.rtheta = 0.1F;
  171.                 castlecanvas.rx     = -right.x;
  172.                 castlecanvas.rz     = -right.z;
  173.                 break;
  174.                  
  175.             case Event.LEFT:
  176.                 castlecanvas.keydown |= 0x10;
  177.                 castlecanvas.rtheta = 0.2F;
  178.                 castlecanvas.ry     = -up.y;
  179.                 break;
  180.  
  181.             case Event.RIGHT:
  182.                 castlecanvas.keydown |= 0x20;
  183.                 castlecanvas.rtheta = 0.2F;
  184.                 castlecanvas.ry     = up.y;
  185.                 break;
  186.  
  187.             case 'a':
  188.             case 'A':
  189.                 castlecanvas.keydown |= 0x4;
  190.                 castlecanvas.keydir.x = dir.x * 1.3F;
  191.                 castlecanvas.keydir.z = dir.z * 1.3F;
  192.                 break;
  193.  
  194.             case 'z':
  195.             case 'Z':
  196.                 castlecanvas.keydown |= 0x8;
  197.                 castlecanvas.keydir.x = dir.x * -1.3F;
  198.                 castlecanvas.keydir.z = dir.z * -1.3F;
  199.                 break;
  200.         }
  201.         return true;
  202.     }
  203. }
  204.