From 155b0bf2d6808e833d52ba3a5041794e84dab0e9 Mon Sep 17 00:00:00 2001 From: Mike Thomas Date: Fri, 13 Aug 2010 21:15:30 +0000 Subject: [PATCH] When you arrive where you were walking, recenter the view. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@955 c613c5cb-e716-0410-b11b-feb51c14d237 --- .../threerings/stage/client/CharacterIsoSprite.as | 13 +++++++++++++ .../threerings/stage/client/CrowdStageScenePanel.as | 7 +++++++ 2 files changed, 20 insertions(+) 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;