Permit changing media render order as long as we're not in a tick. Removes the need to remove and re-add sprites, which was cancelling their paths.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3551 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Andrzej Kapolka
2005-05-13 22:22:56 +00:00
parent 3722bc3697
commit a40de2ec51
3 changed files with 22 additions and 9 deletions
@@ -174,16 +174,19 @@ public abstract class AbstractMedia
* (least to greatest). Those with the same render order value will be * (least to greatest). Those with the same render order value will be
* rendered in arbitrary order. * rendered in arbitrary order.
* *
* <p> This must be set <em>before</em> the media is added to the * <p>This method may not be called during a tick.
* appropriate manager and must not change while the manager is
* managing it. If you wish to change the render order, remove the
* media from the manager, change the order and add it back again.
* *
* @see #HUD_LAYER * @see #HUD_LAYER
*/ */
public void setRenderOrder (int renderOrder) public void setRenderOrder (int renderOrder)
{ {
_renderOrder = renderOrder; if (_renderOrder != renderOrder) {
_renderOrder = renderOrder;
if (_mgr != null) {
_mgr.renderOrderDidChange(this);
invalidate();
}
}
} }
/** /**
@@ -163,6 +163,20 @@ public abstract class AbstractMediaManager
} }
} }
/**
* Called by a {@link AbstractMedia} when its render order has changed.
*/
public void renderOrderDidChange (AbstractMedia media)
{
if (_tickStamp > 0) {
Log.warning("Egads! Render order changed during a tick.");
Thread.dumpStack();
}
_media.remove(media);
_media.insertSorted(media, RENDER_ORDER);
}
/** /**
* Calls {@link AbstractMedia#tick} on all media to give them a chance * Calls {@link AbstractMedia#tick} on all media to give them a chance
* to move about, change their look, generate dirty regions, and so * to move about, change their look, generate dirty regions, and so
@@ -684,9 +684,7 @@ public abstract class CardPanel extends VirtualMediaPanel
continue; continue;
} }
if (updateLayers) { if (updateLayers) {
removeSprite(cs);
cs.setRenderOrder(i); cs.setRenderOrder(i);
addSprite(cs);
} }
LinePath adjust = new LinePath(new Point(getHandX(size, i), LinePath adjust = new LinePath(new Point(getHandX(size, i),
_handLocation.y), adjustDuration); _handLocation.y), adjustDuration);
@@ -805,9 +803,7 @@ public abstract class CardPanel extends VirtualMediaPanel
int size = _boardSprites.size(), adjustment = layer - highest; int size = _boardSprites.size(), adjustment = layer - highest;
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
CardSprite cs = (CardSprite)_boardSprites.get(i); CardSprite cs = (CardSprite)_boardSprites.get(i);
removeSprite(cs);
cs.setRenderOrder(cs.getRenderOrder() + adjustment); cs.setRenderOrder(cs.getRenderOrder() + adjustment);
addSprite(cs);
} }
} }