From 3982bdd7a2995f2675a7be49d9047925943073c8 Mon Sep 17 00:00:00 2001 From: Mike Thomas Date: Fri, 13 Aug 2010 23:29:58 +0000 Subject: [PATCH] Use the smooth centering of MisoScenePanel git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@956 c613c5cb-e716-0410-b11b-feb51c14d237 --- .../stage/client/CrowdStageScenePanel.as | 40 +++++++------------ 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/src/as/com/threerings/stage/client/CrowdStageScenePanel.as b/src/as/com/threerings/stage/client/CrowdStageScenePanel.as index 92412ae7..827f1dcd 100644 --- a/src/as/com/threerings/stage/client/CrowdStageScenePanel.as +++ b/src/as/com/threerings/stage/client/CrowdStageScenePanel.as @@ -79,25 +79,6 @@ public class CrowdStageScenePanel extends StageScenePanel _proxrad = int(Math.max(_proxrad, Math.sqrt(_isoView.size.x*_isoView.size.x + _isoView.size.y*_isoView.size.y))); recomputeProximate(); - - addEventListener(Event.ADDED_TO_STAGE, addedToStage); - addEventListener(Event.REMOVED_FROM_STAGE, removedFromStage); - } - - /** - * Handles Event.ADDED_TO_STAGE. - */ - protected function addedToStage (event :Event) :void - { - _ctx.getTicker().registerTickable(this); - } - - /** - * Handles Event.REMOVED_FROM_STAGE. - */ - protected function removedFromStage (event :Event) :void - { - _ctx.getTicker().removeTickable(this); } override public function willEnterPlace (plObj :PlaceObject) :void @@ -109,8 +90,9 @@ public class CrowdStageScenePanel extends StageScenePanel updateDisplayForScene(); } - public function tick (tickStamp :int) :void + override public function tick (tickStamp :int) :void { + super.tick(tickStamp); _sprites.forEach(function (key :int, sprite :CharacterIsoSprite) :void { sprite.tick(tickStamp); }); @@ -128,15 +110,23 @@ public class CrowdStageScenePanel extends StageScenePanel // start out with the view centered on our sprite so that we // resolve the appropriate scene blocks from the get go - centerView(); + centerView(true, false); } - protected function centerView () :void + protected function centerView (immediate :Boolean, optional :Boolean) :void { if (_selfSprite != null) { var viewPt :Point = _isoView.isoToLocal(new Pt(_selfSprite.x, _selfSprite.y, _selfSprite.z)); - moveBy(new Point(viewPt.x - _isoView.width / 2, viewPt.y - _isoView.height / 2)); + + var dx :int = viewPt.x - _isoView.width / 2; + var dy :int = viewPt.y - _isoView.height / 2; + + // Unless we've forced it, if we'd move less than a quarter screen, don't bother. + if (!optional || Math.abs(dx) > _isoView.width / 4 || + Math.abs(dy) > _isoView.height / 4) { + moveBy(new Point(dx, dy), immediate); + } } } @@ -424,7 +414,7 @@ public class CrowdStageScenePanel extends StageScenePanel sprite.placeAtLoc(loc); // delay repaint until we resolve our new blocks - centerView(); + centerView(true, false); return true; } @@ -656,7 +646,7 @@ public class CrowdStageScenePanel extends StageScenePanel } finally { // keep track of the last time we came to rest if (sprite == _selfSprite) { - centerView(); + centerView(false, true); _centerStamp = tickStamp; } }