From 51f2b4b9d2f90c4aff9c94d914ee88f925f5807b Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Wed, 24 Oct 2007 22:56:31 +0000 Subject: [PATCH] Added a method: getSize() and a new event: SizeChangedEvent. So that games can query and listen for changes to the size of their display area. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@470 c613c5cb-e716-0410-b11b-feb51c14d237 --- src/as/com/threerings/ezgame/EZGameControl.as | 29 +++++++- .../com/threerings/ezgame/SizeChangedEvent.as | 68 +++++++++++++++++++ .../threerings/ezgame/client/EZGamePanel.as | 12 +++- .../ezgame/client/GameControlBackend.as | 26 ++++++- 4 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 src/as/com/threerings/ezgame/SizeChangedEvent.as diff --git a/src/as/com/threerings/ezgame/EZGameControl.as b/src/as/com/threerings/ezgame/EZGameControl.as index e64dc5b6..1a355708 100644 --- a/src/as/com/threerings/ezgame/EZGameControl.as +++ b/src/as/com/threerings/ezgame/EZGameControl.as @@ -21,6 +21,8 @@ package com.threerings.ezgame { +import flash.display.DisplayObject; + import flash.errors.IllegalOperationError; import flash.events.Event; @@ -28,7 +30,7 @@ import flash.events.EventDispatcher; import flash.events.KeyboardEvent; import flash.events.MouseEvent; -import flash.display.DisplayObject; +import flash.geom.Point; /** * Dispatched when a key is pressed when the game has focus. @@ -44,6 +46,13 @@ import flash.display.DisplayObject; */ [Event(name="keyUp", type="flash.events.KeyboardEvent")] +/** + * Dispatched when the size of the game area changes. + * + * @eventType com.threerings.ezgame.SizeChangedEvent.TYPE + */ +[Event(name="SizeChanged", type="com.threerings.ezgame.SizeChangedEvent")] + /** * Dispatched when the controller changes for the game. * @@ -189,6 +198,15 @@ public class EZGameControl extends BaseControl return _gameConfig; } + /** + * Get the size of the game area, expressed as a Point + * (x = width, y = height). + */ + public function getSize () :Point + { + return callEZCode("getSize_v1") as Point; + } + /** * Get the CollectionsControl, which contains methods for utilizing the server to dispatch * private information. @@ -623,6 +641,7 @@ public class EZGameControl extends BaseControl o["dispatchEvent_v1"] = dispatch; o["occupantChanged_v1"] = occupantChanged_v1; o["userChat_v1"] = userChat_v1; + o["sizeChanged_v1"] = sizeChanged_v1; } /** @@ -702,6 +721,14 @@ public class EZGameControl extends BaseControl dispatch(new UserChatEvent(this, speaker, message)); } + /** + * Private method to generate a SizeChangedEvent. + */ + private function sizeChanged_v1 (size :Point) :void + { + dispatch(new SizeChangedEvent(this, size)); + } + /** * 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/SizeChangedEvent.as b/src/as/com/threerings/ezgame/SizeChangedEvent.as new file mode 100644 index 00000000..25ce9b7e --- /dev/null +++ b/src/as/com/threerings/ezgame/SizeChangedEvent.as @@ -0,0 +1,68 @@ +// +// $Id$ +// +// 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; + +import flash.geom.Point; + +/** + * Dispatched when the size of the game area changes, for example as a result of the user + * resizing their browser window. + */ +public class SizeChangedEvent extends EZEvent +{ + /** The type of this event. */ + public static const TYPE :String = "SizeChanged"; + + /** + * Get the size of the game area, expressed as a Point + * (The width is the x value, the height is the y value). + */ + public function get size () :Point + { + return _size; + } + + /** + * Constructor. + */ + public function SizeChangedEvent (ezgame :EZGameControl, size :Point) + { + super(TYPE, ezgame); + _size = size; + } + + override public function toString () :String + { + return "[SizeChangedEvent size=" + _size + "]"; + } + + override public function clone () :Event + { + return new SizeChangedEvent(_ezgame, _size.clone()); + } + + /** Our implementation details. */ + protected var _size: Point; +} +} diff --git a/src/as/com/threerings/ezgame/client/EZGamePanel.as b/src/as/com/threerings/ezgame/client/EZGamePanel.as index 09d9f924..c2e01b6f 100644 --- a/src/as/com/threerings/ezgame/client/EZGamePanel.as +++ b/src/as/com/threerings/ezgame/client/EZGamePanel.as @@ -80,6 +80,16 @@ public class EZGamePanel extends Canvas backend.shutdown(); } + override protected function updateDisplayList (uw :Number, uh :Number) :void + { + super.updateDisplayList(uw, uh); + +// TODO: debugging. Remove. + trace("UpdateDisplayList: " + uw + ":" + _gameView.width + ", " + + uh + ":" + _gameView.height); + backend.sizeChanged(); + } + /** * Creates the backend object that will handle requests from user code. */ @@ -93,7 +103,7 @@ public class EZGamePanel extends Canvas view.percentWidth = 100; view.percentHeight = 100; } - + protected var _ctx :CrowdContext; protected var _ctrl :EZGameController; protected var _gameView :GameContainer; diff --git a/src/as/com/threerings/ezgame/client/GameControlBackend.as b/src/as/com/threerings/ezgame/client/GameControlBackend.as index e4cc066c..44d445bc 100644 --- a/src/as/com/threerings/ezgame/client/GameControlBackend.as +++ b/src/as/com/threerings/ezgame/client/GameControlBackend.as @@ -21,17 +21,18 @@ package com.threerings.ezgame.client { +import flash.display.DisplayObject; +import flash.display.InteractiveObject; + import flash.errors.IllegalOperationError; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IEventDispatcher; import flash.events.KeyboardEvent; - import flash.events.MouseEvent; -import flash.display.DisplayObject; -import flash.display.InteractiveObject; +import flash.geom.Point; import flash.utils.ByteArray; import flash.utils.Dictionary; @@ -189,6 +190,14 @@ public class GameControlBackend callUserCode("roundStateChanged_v1", started); } + /** + * Called by the EZGamePanel when the size of the game area has changed. + */ + public function sizeChanged () :void + { + callUserCode("sizeChanged_v1", getSize_v1()); + } + // from SetListener public function entryAdded (event :EntryAddedEvent) :void { @@ -286,6 +295,7 @@ public class GameControlBackend // from ChatDisplay public function clear () :void { + // we do nothing } // from ChatDisplay @@ -517,6 +527,8 @@ public class GameControlBackend o["startTransaction"] = startTransaction_v1; o["commitTransaction"] = commitTransaction_v1; + o["getSize_v1"] = getSize_v1; + // compatability o["endTurn_v2"] = startNextTurn_v1; // it's the same! } @@ -909,6 +921,14 @@ public class GameControlBackend _ctx.getClient().getInvocationDirector().commitTransaction(); } + /** + * Get the size of the game area. + */ + protected function getSize_v1 () :Point + { + return new Point(_container.width, _container.height); + } + /** * Converts a Flash array of ints to a TypedArray for delivery over the wire to the server. */