diff --git a/src/as/com/threerings/stage/client/CharacterIsoSprite.as b/src/as/com/threerings/stage/client/CharacterIsoSprite.as index ef966e20..42e53401 100644 --- a/src/as/com/threerings/stage/client/CharacterIsoSprite.as +++ b/src/as/com/threerings/stage/client/CharacterIsoSprite.as @@ -138,7 +138,17 @@ public class CharacterIsoSprite extends IsoSprite public function pathCompleted (timestamp :int) :void { _character.pathCompleted(timestamp); + var opath :Path = _path; _path = null; + + for each (var listener :Function in _pathCompleteListeners) { + listener(this, opath, timestamp); + } + } + + public function addPathCompleteListener (listener :Function) :void + { + _pathCompleteListeners.push(listener); } public function move (path :Path) :void @@ -173,5 +183,8 @@ public class CharacterIsoSprite extends IsoSprite /** The time we started moving on our path. */ protected var _pathStamp :int; + + /** Anyone who cares when our path finishes. */ + protected var _pathCompleteListeners :Array = []; } } \ No newline at end of file diff --git a/src/as/com/threerings/stage/client/CrowdStageScenePanel.as b/src/as/com/threerings/stage/client/CrowdStageScenePanel.as index 70e01a90..92412ae7 100644 --- a/src/as/com/threerings/stage/client/CrowdStageScenePanel.as +++ b/src/as/com/threerings/stage/client/CrowdStageScenePanel.as @@ -490,6 +490,7 @@ public class CrowdStageScenePanel extends StageScenePanel _objScene.addChild(sprite); _sprites.put(info.getBodyOid(), sprite); + sprite.addPathCompleteListener(pathCompleted); if (sprite.getBodyOid() == myOid()) { _selfSprite = sprite; @@ -655,6 +656,7 @@ public class CrowdStageScenePanel extends StageScenePanel } finally { // keep track of the last time we came to rest if (sprite == _selfSprite) { + centerView(); _centerStamp = tickStamp; } } @@ -712,6 +714,11 @@ public class CrowdStageScenePanel extends StageScenePanel } } + protected function pathCompleted (sprite :CharacterIsoSprite, path :Path, when :int) :void + { + handleSpriteArrived(sprite, when); + } + protected var _occupantListener :SetListener = new SetAdapter(null, occupantEntryUpdated, null); protected var _cCtx :CrowdContext;