From a40de2ec51ecc2852cc822b302de2b64b44de100 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Fri, 13 May 2005 22:22:56 +0000 Subject: [PATCH] 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 --- src/java/com/threerings/media/AbstractMedia.java | 13 ++++++++----- .../com/threerings/media/AbstractMediaManager.java | 14 ++++++++++++++ .../threerings/parlor/card/client/CardPanel.java | 4 ---- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/java/com/threerings/media/AbstractMedia.java b/src/java/com/threerings/media/AbstractMedia.java index 18551d423..f7144f771 100644 --- a/src/java/com/threerings/media/AbstractMedia.java +++ b/src/java/com/threerings/media/AbstractMedia.java @@ -174,16 +174,19 @@ public abstract class AbstractMedia * (least to greatest). Those with the same render order value will be * rendered in arbitrary order. * - *

This must be set before the media is added to the - * 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. + *

This method may not be called during a tick. * * @see #HUD_LAYER */ public void setRenderOrder (int renderOrder) { - _renderOrder = renderOrder; + if (_renderOrder != renderOrder) { + _renderOrder = renderOrder; + if (_mgr != null) { + _mgr.renderOrderDidChange(this); + invalidate(); + } + } } /** diff --git a/src/java/com/threerings/media/AbstractMediaManager.java b/src/java/com/threerings/media/AbstractMediaManager.java index 497978e04..06978e4a5 100644 --- a/src/java/com/threerings/media/AbstractMediaManager.java +++ b/src/java/com/threerings/media/AbstractMediaManager.java @@ -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 * to move about, change their look, generate dirty regions, and so diff --git a/src/java/com/threerings/parlor/card/client/CardPanel.java b/src/java/com/threerings/parlor/card/client/CardPanel.java index 155100c38..200725be4 100644 --- a/src/java/com/threerings/parlor/card/client/CardPanel.java +++ b/src/java/com/threerings/parlor/card/client/CardPanel.java @@ -684,9 +684,7 @@ public abstract class CardPanel extends VirtualMediaPanel continue; } if (updateLayers) { - removeSprite(cs); cs.setRenderOrder(i); - addSprite(cs); } LinePath adjust = new LinePath(new Point(getHandX(size, i), _handLocation.y), adjustDuration); @@ -805,9 +803,7 @@ public abstract class CardPanel extends VirtualMediaPanel int size = _boardSprites.size(), adjustment = layer - highest; for (int i = 0; i < size; i++) { CardSprite cs = (CardSprite)_boardSprites.get(i); - removeSprite(cs); cs.setRenderOrder(cs.getRenderOrder() + adjustment); - addSprite(cs); } }