home *** CD-ROM | disk | FTP | other *** search
/ Java 1.2 How-To / JavaHowTo.iso / 3rdParty / Gamelication / com / next / gt / DisplayManager.java < prev    next >
Text File  |  1998-04-15  |  3KB  |  131 lines

  1. /**
  2.  *
  3.  * DisplayManager.java
  4.  * @author    Mark G. Tacchi (mtacchi@next.com) 
  5.  * @version    0.8
  6.  * Mar 28/1996
  7.  *
  8.  * DisplayManager provides optimized screen display. Images are drawn to
  9.  * an offscreen buffer and blitted out to the display.  If images are close
  10.  * to one another, they are coalesced and blitted as a single image.
  11.  *
  12.  * A read only cache is kept which represents an untainted background image.
  13.  * This is used in the optimization algorithm as a source for a clean
  14.  * background.
  15.  *
  16.  */
  17.  
  18. package com.next.gt;
  19.  
  20. import java.awt.Rectangle;
  21. import java.awt.Graphics;
  22. import java.awt.Image;
  23. import java.awt.MediaTracker;
  24.  
  25. public class DisplayManager extends java.lang.Object  {
  26.   private Image            background;
  27.   private Image         offScreenBuffer;
  28.   private DirtyRectSet    dirtyRects= new DirtyRectSet();
  29.   
  30.   /**
  31.   *  A reference back to the gamelication this manager is servicing.
  32.   */
  33.   protected Gamelication owner;
  34.   
  35.   
  36. public DisplayManager(Gamelication theOwner) {
  37.   owner= theOwner;
  38. } /*DisplayManager()*/
  39.  
  40.  
  41.  
  42. /**
  43.  * Refresh screen.
  44.  */
  45. public void refresh (){
  46.   dirtyRects.addRect (new Rectangle (0, 0, owner.getSize().width, owner.getSize().height));
  47. } /*setBackground*/
  48.  
  49.  
  50.  
  51. /**
  52.  * Set the background image to the specified image.
  53.  */
  54. public void setBackground (Image theImage){
  55.   MediaTracker    tracker= new java.awt.MediaTracker(owner);
  56.  
  57.   tracker.addImage(theImage, 0);
  58.   try{
  59.     tracker.waitForID(0);
  60.   } catch (InterruptedException e) {
  61.   }
  62.  
  63.   background= theImage;
  64.   offScreenBuffer= owner.createImage (owner.getSize().width, owner.getSize().height);
  65.   offScreenBuffer.getGraphics().drawImage (theImage, 0, 0, owner);
  66.  
  67.   dirtyRects.addRect (new Rectangle (0, 0, owner.getSize().width, owner.getSize().height));
  68.   
  69. }/*setBackground*/
  70.  
  71.  
  72.  
  73. /**
  74.  * Tile the background with the specifed tile image.
  75.  */
  76. public void setBackgroundTile (Image theImage){
  77.   MediaTracker    tracker= new java.awt.MediaTracker(owner);
  78.  
  79.   tracker.addImage(theImage, 0);
  80.   try{
  81.     tracker.waitForID(0);
  82.   } catch (InterruptedException e) {}
  83.  
  84.   setBackground(TiledImage.createTiledImage(theImage, owner.getSize().width,
  85.                           owner.getSize().height, owner));
  86.   
  87. }/*setBackgroundTile*/
  88.  
  89.  
  90.   
  91. /**
  92.  * Display changed portions of screen.
  93.  */
  94. public void paint(Graphics g) {
  95.   DirtyRectSet flushRects; 
  96.   Graphics osb;
  97.   if( offScreenBuffer == null )
  98.       osb = null;
  99.   //      offScreenBuffer = owner.createImage( 1, 1 );
  100.   else
  101.       osb = offScreenBuffer.getGraphics ();
  102.   
  103.   //
  104.   // clear background behind actors...
  105.   //
  106.   dirtyRects.drawImage (osb, background, owner);
  107.  
  108.   flushRects= dirtyRects;
  109.   dirtyRects= new DirtyRectSet(owner.actorManager.actors.size ());
  110.  
  111.   //
  112.   // draw actors
  113.   //
  114.   for (int j= 0; j< owner.actorManager.actors.size (); j++) {
  115.     Actor anActor= (Actor)owner.actorManager.actors.elementAt(j);
  116.     Rectangle r= new Rectangle ((int)anActor.x, (int)anActor.y, anActor.width, anActor.height);
  117.     dirtyRects.addRect (r);
  118.     flushRects.addRect (r);
  119.     //offScreenBuffer= owner.createImage (anActor.width, 
  120.     //                        anActor.height);
  121.     //osb= offScreenBuffer.getGraphics ();
  122.     anActor.draw (osb);
  123.   }/*next_j*/
  124.  
  125.   flushRects.drawImage (g, offScreenBuffer, owner);
  126.   
  127. } /*paint*/
  128.  
  129.  
  130. } /*DisplayManager*/
  131.