From d93c79cfd0fd087c150d2dfdec5b926d63da78c1 Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Thu, 13 Jul 2006 21:45:21 +0000 Subject: [PATCH] A standard portal modification scene update. Will be used by msoy, but could be used by other games as well. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@24 c613c5cb-e716-0410-b11b-feb51c14d237 --- .../whirled/spot/data/ModifyPortalsUpdate.as | 91 +++++++++++++++++++ .../spot/data/ModifyPortalsUpdate.java | 69 ++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 src/as/com/threerings/whirled/spot/data/ModifyPortalsUpdate.as create mode 100644 src/java/com/threerings/whirled/spot/data/ModifyPortalsUpdate.java diff --git a/src/as/com/threerings/whirled/spot/data/ModifyPortalsUpdate.as b/src/as/com/threerings/whirled/spot/data/ModifyPortalsUpdate.as new file mode 100644 index 00000000..7c90dfa7 --- /dev/null +++ b/src/as/com/threerings/whirled/spot/data/ModifyPortalsUpdate.as @@ -0,0 +1,91 @@ +// +// $Id$ +// +// Vilya library - tools for developing networked games +// Copyright (C) 2002-2006 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.whirled.spot.data { + +import com.threerings.io.ObjectInputStream; +import com.threerings.io.ObjectOutputStream; +import com.threerings.io.TypedArray; + +import com.threerings.whirled.data.SceneModel; +import com.threerings.whirled.data.SceneUpdate; + +/** + * A scene update to add/remove portals. + */ +public class ModifyPortalsUpdate extends SceneUpdate +{ + /** The portals to be removed from the room. */ + public var portalsRemoved :TypedArray; + + /** The portals to be added to the scene. */ + public var portalsAdded :TypedArray; + + /** + * Initialize the update with all necessary data. + */ + public function initialize ( + targetId :int, targetVersion :int, removed :TypedArray, + added :TypedArray) :void + { + init(targetId, targetVersion); + + portalsRemoved = removed; + portalsAdded = added; + } + + override public function apply (model :SceneModel) :void + { + super.apply(model); + + // extract the spot scene model + var spotModel :SpotSceneModel = SpotSceneModel.getSceneModel(model); + + var portal :Portal; + if (portalsRemoved != null) { + for each (portal in portalsRemoved) { + spotModel.removePortal(portal); + } + } + if (portalsAdded != null) { + for each (portal in portalsAdded) { + spotModel.addPortal(portal); + } + } + } + + override public function writeObject (out :ObjectOutputStream) :void + { + super.writeObject(out); + + out.writeObject(portalsRemoved); + out.writeObject(portalsAdded); + } + + override public function readObject (ins :ObjectInputStream) :void + { + super.readObject(ins); + + portalsRemoved = (ins.readObject() as TypedArray); + portalsAdded = (ins.readObject() as TypedArray); + } +} +} diff --git a/src/java/com/threerings/whirled/spot/data/ModifyPortalsUpdate.java b/src/java/com/threerings/whirled/spot/data/ModifyPortalsUpdate.java new file mode 100644 index 00000000..912807d3 --- /dev/null +++ b/src/java/com/threerings/whirled/spot/data/ModifyPortalsUpdate.java @@ -0,0 +1,69 @@ +// +// $Id$ +// +// Vilya library - tools for developing networked games +// Copyright (C) 2002-2006 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.whirled.spot.data; + +import com.threerings.whirled.data.SceneModel; +import com.threerings.whirled.data.SceneUpdate; + +/** + * A scene update to add/remove portals. + */ +public class ModifyPortalsUpdate extends SceneUpdate +{ + /** The portals to be removed from the room. */ + public Portal[] portalsRemoved; + + /** The portals to be added to the scene. */ + public Portal[] portalsAdded; + + /** + * Initialize the update with all necessary data. + */ + public void initialize ( + int targetId, int targetVersion, Portal[] removed, Portal[] added) + { + init(targetId, targetVersion); + + portalsRemoved = removed; + portalsAdded = added; + } + + @Override + public void apply (SceneModel model) + { + super.apply(model); + + // extract the spot scene model + SpotSceneModel spotModel = SpotSceneModel.getSceneModel(model); + + if (portalsRemoved != null) { + for (Portal portal : portalsRemoved) { + spotModel.removePortal(portal); + } + } + if (portalsAdded != null) { + for (Portal portal : portalsAdded) { + spotModel.addPortal(portal); + } + } + } +}