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:
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user