Created listener interfaces that will automatically be registered
if implemented by something on the display hierarchy. You may also implement them in utility classes and register and unregister event listening by hand. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@55 c613c5cb-e716-0410-b11b-feb51c14d237
This commit is contained in:
@@ -68,7 +68,7 @@ public class EZGameController extends GameController
|
||||
public function turnDidChange (turnHolder :Name) :void
|
||||
{
|
||||
dispatchUserEvent(
|
||||
new StateChangedEvent(StateChangedEvent.TURN_CHANGED));
|
||||
new StateChangedEvent(StateChangedEvent.TURN_CHANGED, gameObjImpl));
|
||||
}
|
||||
|
||||
// from PropertySetListener
|
||||
@@ -76,8 +76,8 @@ public class EZGameController extends GameController
|
||||
{
|
||||
// notify the user game
|
||||
dispatchUserEvent(new PropertyChangedEvent(
|
||||
event.getName(), event.getValue(), event.getOldValue(),
|
||||
event.getIndex()));
|
||||
gameObjImpl, event.getName(), event.getValue(),
|
||||
event.getOldValue(), event.getIndex()));
|
||||
}
|
||||
|
||||
// from MessageListener
|
||||
@@ -114,7 +114,7 @@ public class EZGameController extends GameController
|
||||
protected function dispatchUserMessage (args :Array) :void
|
||||
{
|
||||
dispatchUserEvent(new MessageReceivedEvent(
|
||||
(args[0] as String),
|
||||
gameObjImpl, (args[0] as String),
|
||||
EZObjectMarshaller.decode(args[1])));
|
||||
}
|
||||
|
||||
@@ -127,14 +127,14 @@ public class EZGameController extends GameController
|
||||
{
|
||||
super.gameDidStart();
|
||||
dispatchUserEvent(
|
||||
new StateChangedEvent(StateChangedEvent.GAME_STARTED));
|
||||
new StateChangedEvent(StateChangedEvent.GAME_STARTED, gameObjImpl));
|
||||
}
|
||||
|
||||
override protected function gameDidEnd () :void
|
||||
{
|
||||
super.gameDidEnd();
|
||||
dispatchUserEvent(
|
||||
new StateChangedEvent(StateChangedEvent.GAME_ENDED));
|
||||
new StateChangedEvent(StateChangedEvent.GAME_ENDED, gameObjImpl));
|
||||
}
|
||||
|
||||
protected function dispatchUserEvent (event :Event) :void
|
||||
|
||||
@@ -38,6 +38,7 @@ public class EZGamePanel extends VBox
|
||||
|
||||
// add a listener so that we hear about all new children
|
||||
addEventListener(Event.ADDED, childAdded);
|
||||
addEventListener(Event.REMOVED, childRemoved);
|
||||
|
||||
var cfg :EZGameConfig = (ctrl.getPlaceConfig() as EZGameConfig);
|
||||
_gameView = new MediaContainer(cfg.configData); // TODO
|
||||
@@ -64,6 +65,7 @@ public class EZGamePanel extends VBox
|
||||
// from PlaceView
|
||||
public function didLeavePlace (plobj :PlaceObject) :void
|
||||
{
|
||||
removeListeners(_gameView);
|
||||
_ezObj = null;
|
||||
}
|
||||
|
||||
@@ -77,6 +79,17 @@ public class EZGamePanel extends VBox
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle REMOVED events.
|
||||
*/
|
||||
protected function childRemoved (event :Event) :void
|
||||
{
|
||||
trace("Child removed: " + event.target);
|
||||
if (_ezObj != null) {
|
||||
removeListeners(event.target as DisplayObject);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find any children of the specified object that implement
|
||||
* com.metasoy.game.Game and provide them with the GameObject.
|
||||
@@ -93,6 +106,17 @@ public class EZGamePanel extends VBox
|
||||
_seenGames[disp] = true;
|
||||
}
|
||||
}
|
||||
// always check to see if it's a listener
|
||||
_ctrl.gameObjImpl.registerListener(disp);
|
||||
});
|
||||
}
|
||||
|
||||
protected function removeListeners (root :DisplayObject) :void
|
||||
{
|
||||
DisplayUtil.walkDisplayObjects(root,
|
||||
function (disp :DisplayObject) :void
|
||||
{
|
||||
_ctrl.gameObjImpl.unregisterListener(disp);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,12 @@ import com.threerings.ezgame.data.PropertySetEvent;
|
||||
import com.threerings.ezgame.util.EZObjectMarshaller;
|
||||
|
||||
import com.threerings.ezgame.EZGame;
|
||||
import com.threerings.ezgame.MessageReceivedEvent;
|
||||
import com.threerings.ezgame.MessageReceivedListener;
|
||||
import com.threerings.ezgame.PropertyChangedEvent;
|
||||
import com.threerings.ezgame.PropertyChangedListener;
|
||||
import com.threerings.ezgame.StateChangedEvent;
|
||||
import com.threerings.ezgame.StateChangedListener;
|
||||
|
||||
public class GameObjectImpl extends EventDispatcher
|
||||
implements EZGame
|
||||
@@ -74,6 +79,59 @@ public class GameObjectImpl extends EventDispatcher
|
||||
_ezObj.applyPropertySet(propName, value, index);
|
||||
}
|
||||
|
||||
// from EZGame
|
||||
public function registerListener (obj :Object) :void
|
||||
{
|
||||
if (obj is MessageReceivedListener) {
|
||||
var mrl :MessageReceivedListener = (obj as MessageReceivedListener);
|
||||
addEventListener(
|
||||
MessageReceivedEvent.TYPE, mrl.messageReceived,
|
||||
false, 0, true);
|
||||
}
|
||||
if (obj is PropertyChangedListener) {
|
||||
var pcl :PropertyChangedListener = (obj as PropertyChangedListener);
|
||||
addEventListener(
|
||||
PropertyChangedEvent.TYPE, pcl.propertyChanged,
|
||||
false, 0, true);
|
||||
}
|
||||
if (obj is StateChangedListener) {
|
||||
var scl :StateChangedListener = (obj as StateChangedListener);
|
||||
addEventListener(
|
||||
StateChangedEvent.GAME_STARTED, scl.stateChanged,
|
||||
false, 0, true);
|
||||
addEventListener(
|
||||
StateChangedEvent.TURN_CHANGED, scl.stateChanged,
|
||||
false, 0, true);
|
||||
addEventListener(
|
||||
StateChangedEvent.GAME_ENDED, scl.stateChanged,
|
||||
false, 0, true);
|
||||
}
|
||||
}
|
||||
|
||||
// from EZGame
|
||||
public function unregisterListener (obj :Object) :void
|
||||
{
|
||||
if (obj is MessageReceivedListener) {
|
||||
var mrl :MessageReceivedListener = (obj as MessageReceivedListener);
|
||||
removeEventListener(
|
||||
MessageReceivedEvent.TYPE, mrl.messageReceived);
|
||||
}
|
||||
if (obj is PropertyChangedListener) {
|
||||
var pcl :PropertyChangedListener = (obj as PropertyChangedListener);
|
||||
removeEventListener(
|
||||
PropertyChangedEvent.TYPE, pcl.propertyChanged);
|
||||
}
|
||||
if (obj is StateChangedListener) {
|
||||
var scl :StateChangedListener = (obj as StateChangedListener);
|
||||
removeEventListener(
|
||||
StateChangedEvent.GAME_STARTED, scl.stateChanged);
|
||||
removeEventListener(
|
||||
StateChangedEvent.TURN_CHANGED, scl.stateChanged);
|
||||
removeEventListener(
|
||||
StateChangedEvent.GAME_ENDED, scl.stateChanged);
|
||||
}
|
||||
}
|
||||
|
||||
// from EZGame
|
||||
public function setCollection (collName :String, values :Array) :void
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user