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

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