diff --git a/src/as/com/threerings/ezgame/EZGameControl.as b/src/as/com/threerings/ezgame/EZGameControl.as index da55d737..2a075aec 100644 --- a/src/as/com/threerings/ezgame/EZGameControl.as +++ b/src/as/com/threerings/ezgame/EZGameControl.as @@ -100,6 +100,13 @@ import flash.display.DisplayObject; */ [Event(name="msgReceived", type="com.threerings.ezgame.MessageReceivedEvent")] +/** + * Dispatched when a user chats. + * + * @eventType com.whirled.UserChatEvent.TYPE + */ +[Event(name="UserChat", type="com.threerings.ezgame.UserChatEvent")] + /** * The single point of control for each client in your multiplayer EZGame. @@ -541,6 +548,7 @@ public class EZGameControl extends BaseControl o["roundStateChanged_v1"] = roundStateChanged_v1; o["dispatchEvent_v1"] = dispatch; o["occupantChanged_v1"] = occupantChanged_v1; + o["userChat_v1"] = userChat_v1; } /** @@ -604,6 +612,14 @@ public class EZGameControl extends BaseControl OccupantChangedEvent.OCCUPANT_LEFT, this, occupantId, player)); } + /** + * Private method to post a UserChatEvent. + */ + private function userChat_v1 (speaker :int, message :String) :void + { + dispatch(new UserChatEvent(this, speaker, message)); + } + /** * Sets the properties we received from the EZ game framework on the other side of the security * boundary. diff --git a/src/as/com/threerings/ezgame/UserChatEvent.as b/src/as/com/threerings/ezgame/UserChatEvent.as new file mode 100644 index 00000000..a7549467 --- /dev/null +++ b/src/as/com/threerings/ezgame/UserChatEvent.as @@ -0,0 +1,74 @@ +// +// $Id: UserChatEvent.as 271 2007-04-07 00:25:58Z dhoover $ +// +// Vilya library - tools for developing networked games +// Copyright (C) 2002-2007 Three Rings Design, Inc., All Rights Reserved +// http://www.threerings.net/code/vilya/ +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +package com.threerings.ezgame { + +import flash.events.Event; + +/** + * Dispatched when a player speaks. + */ +public class UserChatEvent extends EZEvent +{ + /** The type of a property change event. */ + public static const TYPE :String = "UserChat"; + + /** + * Get the name of the user who spoke. + */ + public function get speaker () :int + { + return _speaker; + } + + /** + * Get the content of the chat. + */ + public function get message () :Object + { + return _message; + } + + /** + * Constructor. + */ + public function UserChatEvent (ezgame :EZGameControl, speaker :int, message :String) + { + super(TYPE, ezgame); + _speaker = speaker; + _message = message; + } + + override public function toString () :String + { + return "[UserChatEvent speaker=" + _speaker + ", message=" + _message + "]"; + } + + override public function clone () :Event + { + return new UserChatEvent(_ezgame, _speaker, _message); + } + + /** Our implementation details. */ + protected var _speaker: int; + protected var _message :String; +} +} diff --git a/src/as/com/threerings/ezgame/client/GameControlBackend.as b/src/as/com/threerings/ezgame/client/GameControlBackend.as index 54cb125a..b1a560c8 100644 --- a/src/as/com/threerings/ezgame/client/GameControlBackend.as +++ b/src/as/com/threerings/ezgame/client/GameControlBackend.as @@ -66,6 +66,11 @@ import com.threerings.presents.dobj.ObjectRemovedEvent; import com.threerings.presents.dobj.OidListListener; import com.threerings.presents.dobj.SetListener; +import com.threerings.crowd.chat.client.ChatDisplay; +import com.threerings.crowd.chat.data.ChatCodes; +import com.threerings.crowd.chat.data.ChatMessage; +import com.threerings.crowd.chat.data.UserMessage; + import com.threerings.crowd.data.BodyObject; import com.threerings.crowd.data.OccupantInfo; import com.threerings.crowd.data.PlaceObject; @@ -85,7 +90,7 @@ import com.threerings.ezgame.util.EZObjectMarshaller; */ public class GameControlBackend implements MessageListener, SetListener, ElementUpdateListener, - PropertySetListener + PropertySetListener, ChatDisplay { public var log :Log = Log.getLog(this); @@ -99,6 +104,7 @@ public class GameControlBackend _ezObj.addListener(this); _ctx.getClient().getClientObject().addListener(_userListener); + _ctx.getChatDirector().addChatDisplay(this); } public function setSharedEvents (disp :IEventDispatcher) :void @@ -832,6 +838,23 @@ public class GameControlBackend event.getOldValue(), event.getIndex()); } + // from ChatDisplay + public function clear () :void + { + } + + // from ChatDisplay + public function displayMessage (msg :ChatMessage, alreadyDisplayed :Boolean) :Boolean + { + if (msg is UserMessage && msg.localtype == ChatCodes.PLACE_CHAT_TYPE) { + var info :OccupantInfo = _ezObj.getOccupantInfo((msg as UserMessage).speaker); + if (info != null) { + callUserCode("userChat_v1", info.bodyOid, msg.message); + } + } + return true; + } + public function messageReceived (event :MessageEvent) :void { var name :String = event.getName();