207 lines
7.4 KiB
C#
207 lines
7.4 KiB
C#
/*
|
||
* 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.
|
||
*/
|
||
|
||
#region Header
|
||
|
||
// CMView.cs created with MonoDevelop
|
||
// User: bongiojp at 11:57 AM 7/3/2008
|
||
//
|
||
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
|
||
//
|
||
|
||
#endregion Header
|
||
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
|
||
using OpenMetaverse;
|
||
|
||
using OpenSim;
|
||
using OpenSim.Framework;
|
||
using OpenSim.Region.Framework.Interfaces;
|
||
using OpenSim.Region.Framework.Scenes;
|
||
using OpenSim.Region.Physics.Manager;
|
||
|
||
using log4net;
|
||
|
||
namespace OpenSim.Region.OptionalModules.ContentManagement
|
||
{
|
||
public class CMView
|
||
{
|
||
#region Static Fields
|
||
|
||
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||
|
||
#endregion Static Fields
|
||
|
||
#region Fields
|
||
|
||
CMModel m_model = null;
|
||
|
||
#endregion Fields
|
||
|
||
#region Constructors
|
||
|
||
public CMView()
|
||
{
|
||
}
|
||
|
||
#endregion Constructors
|
||
|
||
#region Public Methods
|
||
|
||
// Auras To
|
||
public void DisplayAuras(CMEntityCollection auraCollection)
|
||
{
|
||
foreach (Object ent in auraCollection.Auras.Values)
|
||
((AuraMetaEntity)ent).SendFullUpdateToAll();
|
||
}
|
||
|
||
// Auras To Client
|
||
public void DisplayAuras(CMEntityCollection auraCollection, IClientAPI client)
|
||
{
|
||
foreach (Object ent in auraCollection.Auras.Values)
|
||
((AuraMetaEntity)ent).SendFullUpdate(client);
|
||
}
|
||
|
||
// Auras from List To ALL
|
||
public void DisplayAuras(ArrayList list)
|
||
{
|
||
foreach (Object ent in list)
|
||
{
|
||
m_log.Debug("[CONTENT MANAGEMENT] displaying new aura riiiiiiiiiiiight NOW");
|
||
((AuraMetaEntity)ent).SendFullUpdateToAll();
|
||
}
|
||
}
|
||
|
||
// Entities to ALL
|
||
public void DisplayEntities(CMEntityCollection entityCollection)
|
||
{
|
||
foreach (Object ent in entityCollection.Entities.Values)
|
||
((ContentManagementEntity)ent).SendFullDiffUpdateToAll();
|
||
}
|
||
|
||
// Entities to Client
|
||
public void DisplayEntities(CMEntityCollection entityCollection, IClientAPI client)
|
||
{
|
||
foreach (Object ent in entityCollection.Entities.Values)
|
||
((ContentManagementEntity)ent).SendFullDiffUpdate(client);
|
||
}
|
||
|
||
// Entities from List to ALL
|
||
public void DisplayEntities(ArrayList list)
|
||
{
|
||
foreach (Object ent in list)
|
||
((ContentManagementEntity)ent).SendFullDiffUpdateToAll();
|
||
}
|
||
|
||
// Entity to ALL
|
||
public void DisplayEntity(ContentManagementEntity ent)
|
||
{
|
||
ent.SendFullDiffUpdateToAll();
|
||
}
|
||
|
||
public void DisplayHelpMenu(Scene scene)
|
||
{
|
||
string menu = "Menu:\n";
|
||
menu += "commit (ci) - saves current state of the region to a database on the server\n";
|
||
menu += "diff-mode (dm) - displays those aspects of region that have not been saved but changed since the very last revision. Will dynamically update as you change environment.\n";
|
||
SendSimChatMessage(scene, menu);
|
||
}
|
||
|
||
public void DisplayMetaEntity(UUID uuid)
|
||
{
|
||
ContentManagementEntity group = m_model.GetMetaGroupByPrim(uuid);
|
||
if (group != null)
|
||
group.SendFullDiffUpdateToAll();
|
||
}
|
||
|
||
/// <summary>
|
||
/// update all clients of red/green/blue auras and meta entities that the model knows about.
|
||
/// </summary>
|
||
public void DisplayRecentChanges()
|
||
{
|
||
m_log.Debug("[CONTENT MANAGEMENT] Sending update to clients for " + m_model.MetaEntityCollection.Entities.Count + " objects.");
|
||
DisplayEntities(m_model.MetaEntityCollection);
|
||
DisplayAuras(m_model.MetaEntityCollection);
|
||
}
|
||
|
||
public void Hide(ContentManagementEntity ent)
|
||
{
|
||
ent.HideFromAll();
|
||
}
|
||
|
||
public void HideAllAuras()
|
||
{
|
||
foreach (Object obj in m_model.MetaEntityCollection.Auras.Values)
|
||
((MetaEntity)obj).HideFromAll();
|
||
}
|
||
|
||
public void HideAllMetaEntities()
|
||
{
|
||
foreach (Object obj in m_model.MetaEntityCollection.Entities.Values)
|
||
((ContentManagementEntity)obj).HideFromAll();
|
||
}
|
||
|
||
public void Initialise(CMModel model)
|
||
{
|
||
m_model = model;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Figures out if the part deleted was a new scene object part or a revisioned part that's been deleted.
|
||
/// If it's a new scene object, any green aura attached to it is deleted.
|
||
/// If a revisioned part is deleted, a new full update is sent to the environment of the meta entity, which will
|
||
/// figure out that there should be a red aura and not a blue aura/beam.
|
||
/// </summary>
|
||
public void RemoveOrUpdateDeletedEntity(SceneObjectGroup group)
|
||
{
|
||
// Deal with revisioned parts that have been deleted.
|
||
if (m_model.MetaEntityCollection.Entities.ContainsKey(group.UUID))
|
||
((ContentManagementEntity)m_model.MetaEntityCollection.Entities[group.UUID]).SendFullDiffUpdateToAll();
|
||
|
||
// Deal with new parts not revisioned that have been deleted.
|
||
foreach (SceneObjectPart part in group.Parts)
|
||
if (m_model.MetaEntityCollection.Auras.ContainsKey(part.UUID))
|
||
((AuraMetaEntity)m_model.MetaEntityCollection.Auras[part.UUID]).HideFromAll();
|
||
}
|
||
|
||
public void SendMetaEntitiesToNewClient(IClientAPI client)
|
||
{
|
||
}
|
||
|
||
public void SendSimChatMessage(Scene scene, string message)
|
||
{
|
||
scene.SimChat(Utils.StringToBytes(message),
|
||
ChatTypeEnum.Broadcast, 0, new Vector3(0,0,0), "Content Manager", UUID.Zero, false);
|
||
}
|
||
|
||
#endregion Public Methods
|
||
}
|
||
}
|