code: protected void computeInfo (MisoSceneMetrics metrics)
      {
          // start with the screen coordinates of our origin tile
          Point tpos = MisoUtil.tileToScreen(
              metrics, info.x, info.y, new Point());
  
          // if the tile has an origin coordinate, use that, otherwise
          // compute it from the tile footprint
          int tox = tile.getOriginX(), toy = tile.getOriginY();
          if (tox == Integer.MIN_VALUE) {
              tox = tile.getBaseWidth() * metrics.tilehwid;
          }
          if (toy == Integer.MIN_VALUE) {
              toy = tile.getHeight();
          }
  
          bounds = new Rectangle(tpos.x + metrics.tilehwid - tox,
                                 tpos.y + metrics.tilehei - toy,
                                 tile.getWidth(), tile.getHeight());
  
          // compute our object footprint as well
          _frect = new Rectangle(info.x - tile.getBaseWidth() + 1,
                                 info.y - tile.getBaseHeight() + 1,
                                 tile.getBaseWidth(), tile.getBaseHeight());
          _footprint = MisoUtil.getFootprintPolygon(
              metrics, _frect.x, _frect.y, _frect.width, _frect.height);
  
          // compute our object spot if we've got one
          if (tile.hasSpot()) {
              _fspot = MisoUtil.tilePlusFineToFull(
                  metrics, info.x, info.y, tile.getSpotX(), tile.getSpotY(),
                  new Point());
              _sspot = MisoUtil.fullToScreen(
                  metrics, _fspot.x, _fspot.y, new Point());
          }
  
  //         Log.info("Computed object metrics " +
  //                  "[tpos=" + StringUtil.coordsToString(tx, ty) +
  //                  ", info=" + info +
  //                  ", sbounds=" + StringUtil.toString(bounds) + "].");
      }
docs: Computes our screen bounds, tile footprint and other useful cached metrics.