From 3d0615cedddfe1f7dcacdfedf374158491593e57 Mon Sep 17 00:00:00 2001 From: Mike Thomas Date: Wed, 11 Aug 2010 20:10:48 +0000 Subject: [PATCH] Use the Ticker to handle the ticking of the underlying character sprites. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@952 c613c5cb-e716-0410-b11b-feb51c14d237 --- .../stage/client/CharacterIsoSprite.as | 12 ++++++++ .../stage/client/CrowdStageScenePanel.as | 30 ++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/as/com/threerings/stage/client/CharacterIsoSprite.as b/src/as/com/threerings/stage/client/CharacterIsoSprite.as index 73e8a148..2c6ba9b1 100644 --- a/src/as/com/threerings/stage/client/CharacterIsoSprite.as +++ b/src/as/com/threerings/stage/client/CharacterIsoSprite.as @@ -22,6 +22,7 @@ package com.threerings.stage.client { import flash.display.DisplayObject; import flash.display.Sprite; +import com.threerings.miso.client.Tickable; import com.threerings.miso.util.MisoSceneMetrics; import com.threerings.miso.util.MisoUtil; import com.threerings.stage.data.StageLocation; @@ -44,9 +45,18 @@ public class CharacterIsoSprite extends IsoSprite wrapper.y = _metrics.tilehhei; wrapper.addChild(disp); + _character = disp; + sprites = [wrapper]; } + public function tick (tickStamp :int) :void + { + if (_character is Tickable) { + Tickable(_character).tick(tickStamp); + } + } + public function isMoving () :Boolean { return false; //TODO Path @@ -77,5 +87,7 @@ public class CharacterIsoSprite extends IsoSprite protected var _bodyOid :int; protected var _metrics :MisoSceneMetrics; + + protected var _character :DisplayObject; } } \ 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 b1e72442..ead2568a 100644 --- a/src/as/com/threerings/stage/client/CrowdStageScenePanel.as +++ b/src/as/com/threerings/stage/client/CrowdStageScenePanel.as @@ -24,6 +24,7 @@ import flash.display.DisplayObject; import flash.geom.Point; import flash.geom.Rectangle; +import flash.events.Event; import flash.events.MouseEvent; import com.threerings.crowd.client.OccupantObserver; @@ -52,13 +53,14 @@ import com.threerings.presents.dobj.EntryUpdatedEvent; import com.threerings.presents.dobj.SetAdapter; import com.threerings.presents.dobj.SetListener; +import com.threerings.miso.client.Tickable; import com.threerings.miso.util.MisoSceneMetrics; import com.threerings.miso.util.MisoUtil; import as3isolib.geom.Pt; public class CrowdStageScenePanel extends StageScenePanel - implements OccupantObserver + implements OccupantObserver, Tickable { private var log :Log = Log.getLog(CrowdStageScenePanel); @@ -76,6 +78,25 @@ public class CrowdStageScenePanel extends StageScenePanel recomputeProximate(); _vbounds = new Rectangle(0, 0, _isoView.size.x, _isoView.size.y); + + 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 @@ -87,6 +108,13 @@ public class CrowdStageScenePanel extends StageScenePanel updateDisplayForScene(); } + public function tick (tickStamp :int) :void + { + _sprites.forEach(function (key :int, sprite :CharacterIsoSprite) :void { + sprite.tick(tickStamp); + }); + } + protected function updateDisplayForScene () :void { // remove all old-scene sprites