From b6f3de5028ab9a288f60b020a0dffda079dc550d Mon Sep 17 00:00:00 2001 From: BlueWall Date: Fri, 20 Jan 2012 23:50:37 -0500 Subject: Telehub Support: Support for viewer side of telehub management. Can manupulate Telehubs and SpawnPoints from the viewer estate managemnt tools. This is a work in progress and does not yet persist or affect teleport routing. --- .../World/Estate/EstateManagementModule.cs | 65 ++++++++++- .../CoreModules/World/Estate/TelehubManager.cs | 130 +++++++++++++++++++++ 2 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 OpenSim/Region/CoreModules/World/Estate/TelehubManager.cs (limited to 'OpenSim/Region/CoreModules/World') diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 58d9455..0d4df6c 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs @@ -53,6 +53,7 @@ namespace OpenSim.Region.CoreModules.World.Estate protected EstateManagementCommands m_commands; private EstateTerrainXferHandler TerrainUploader; + private TelehubManager m_Telehub; public event ChangeDelegate OnRegionInfoChange; public event ChangeDelegate OnEstateInfoChange; @@ -599,6 +600,65 @@ namespace OpenSim.Region.CoreModules.World.Estate } } + private void handleOnEstateManageTelehub (IClientAPI client, UUID invoice, UUID senderID, string cmd, uint param1) + { + uint ObjectLocalID; + SceneObjectPart part; + // UUID EstateID = Scene.RegionInfo.EstateSettings.EstateID; + TelehubManager.Telehub telehub; + + switch (cmd) + { + case "info ui": + // Send info: + if (m_Telehub.HasTelehub) + { + telehub = m_Telehub.TelehubVals(); + client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition, + telehub.ObjectRotation, telehub.SpawnPoint); + } + else + { + return; + } + break; + + case "connect": + // Add the Telehub + part = Scene.GetSceneObjectPart((uint)param1); + telehub = m_Telehub.Connect(part); + client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition, + telehub.ObjectRotation, telehub.SpawnPoint); + break; + + case "delete": + // Disconnect Telehub + part = Scene.GetSceneObjectPart((uint)param1); + telehub = m_Telehub.DisConnect(part); + client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition, + telehub.ObjectRotation, telehub.SpawnPoint); + break; + + case "spawnpoint add": + // Add SpawnPoint to the Telehub + part = Scene.GetSceneObjectPart((uint)param1); + telehub = m_Telehub.AddSpawnPoint(part.AbsolutePosition); + client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition, + telehub.ObjectRotation, telehub.SpawnPoint); + break; + + case "spawnpoint remove": + // Remove SpawnPoint from Telehub + telehub = m_Telehub.RemoveSpawnPoint((int)param1); + client.SendTelehubInfo(telehub.ObjectID, telehub.ObjectName, telehub.ObjectPosition, + telehub.ObjectRotation, telehub.SpawnPoint); + break; + + default: + break; + } + } + private void SendSimulatorBlueBoxMessage( IClientAPI remote_client, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message) { @@ -1055,7 +1115,9 @@ namespace OpenSim.Region.CoreModules.World.Estate Scene.RegisterModuleInterface(this); Scene.EventManager.OnNewClient += EventManager_OnNewClient; Scene.EventManager.OnRequestChangeWaterHeight += changeWaterHeight; - + + m_Telehub = new TelehubManager(scene); + m_commands = new EstateManagementCommands(this); m_commands.Initialise(); } @@ -1109,6 +1171,7 @@ namespace OpenSim.Region.CoreModules.World.Estate client.OnEstateRestartSimRequest += handleEstateRestartSimRequest; client.OnEstateChangeCovenantRequest += handleChangeEstateCovenantRequest; client.OnEstateChangeInfo += handleEstateChangeInfo; + client.OnEstateManageTelehub += handleOnEstateManageTelehub; client.OnUpdateEstateAccessDeltaRequest += handleEstateAccessDeltaRequest; client.OnSimulatorBlueBoxMessageRequest += SendSimulatorBlueBoxMessage; client.OnEstateBlueBoxMessageRequest += SendEstateBlueBoxMessage; diff --git a/OpenSim/Region/CoreModules/World/Estate/TelehubManager.cs b/OpenSim/Region/CoreModules/World/Estate/TelehubManager.cs new file mode 100644 index 0000000..c99c9ba --- /dev/null +++ b/OpenSim/Region/CoreModules/World/Estate/TelehubManager.cs @@ -0,0 +1,130 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using OpenMetaverse; +using System.Collections.Generic; +using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; + +namespace OpenSim.Region.CoreModules.World.Estate +{ + public class TelehubManager + { + public struct Telehub + { + public UUID ObjectID; + public string ObjectName; + public Vector3 ObjectPosition; + public Quaternion ObjectRotation; + public List SpawnPoint; + }; + + private UUID ObjectID; + private string ObjectName; + private Vector3 ObjectPosition; + Quaternion ObjectRotation; + List SpawnPoint = new List(); + UUID EstateID; + bool m_HasTelehub = false; + Scene m_Scene; + // This will get an option... + Vector3 InitialSpawnPoint = new Vector3(0.0f,0.0f,-3.0f); + + public bool HasTelehub + { + get { return m_HasTelehub; } + } + + public TelehubManager(Scene scene) + { + m_Scene = scene; + } + + // Fill our Telehub struct with values + public Telehub TelehubVals() + { + Telehub telehub = new Telehub(); + + telehub.ObjectID = ObjectID; + telehub.ObjectName = ObjectName; + telehub.ObjectPosition = ObjectPosition; + telehub.ObjectRotation = ObjectRotation; + telehub.SpawnPoint = SpawnPoint; + return telehub; + } + + // Connect the Telehub + public Telehub Connect(SceneObjectPart part) + { + ObjectID = part.UUID; + ObjectName = part.Name; + ObjectPosition = part.AbsolutePosition; + ObjectRotation = part.GetWorldRotation(); + // Clear this for now + SpawnPoint.Clear(); + SpawnPoint.Add(InitialSpawnPoint); + m_HasTelehub = true; + + return TelehubVals(); + } + + // Disconnect the Telehub + public Telehub DisConnect(SceneObjectPart part) + { + ObjectID = UUID.Zero; + ObjectName = String.Empty; + ObjectPosition = Vector3.Zero; + ObjectRotation = Quaternion.Identity; + SpawnPoint.Clear(); + m_HasTelehub = false; + + return TelehubVals(); + } + + // Add a SpawnPoint to the Telehub + public Telehub AddSpawnPoint(Vector3 point) + { + float dist = (float) Util.GetDistanceTo(ObjectPosition, point); + + Vector3 nvec = Util.GetNormalizedVector(point - ObjectPosition); + + Vector3 spoint = nvec * dist; + + SpawnPoint.Add(spoint); + return TelehubVals(); + } + + // Remove a SpawnPoint from the Telehub + public Telehub RemoveSpawnPoint(int spawnpoint) + { + SpawnPoint.RemoveAt(spawnpoint); + + return TelehubVals(); + } + } +} \ No newline at end of file -- cgit v1.1