From 2827deffe822378b6cb35dac6c90a21c3fbc0de7 Mon Sep 17 00:00:00 2001
From: Marck
Date: Fri, 26 Nov 2010 22:46:48 +0100
Subject: Trigger changed event with CHANGED_TELEPORT when teleporting to
another region.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 15 ++++++---------
.../Region/ScriptEngine/Interfaces/IScriptInstance.cs | 3 ++-
.../ScriptEngine/Shared/Instance/ScriptInstance.cs | 17 ++++++++++-------
3 files changed, 18 insertions(+), 17 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 129b52d..b1216c5 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2324,16 +2324,14 @@ namespace OpenSim.Region.Framework.Scenes
m_log.DebugFormat("[SCENE]: Problem adding scene object {0} in {1} ", sog.UUID, RegionInfo.RegionName);
return false;
}
-
- newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 2);
+
+ newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject));
newObject.ResumeScripts();
// Do this as late as possible so that listeners have full access to the incoming object
EventManager.TriggerOnIncomingSceneObject(newObject);
- TriggerChangedTeleport(newObject);
-
return true;
}
@@ -2441,7 +2439,7 @@ namespace OpenSim.Region.Framework.Scenes
return true;
}
- private void TriggerChangedTeleport(SceneObjectGroup sog)
+ private int GetStateSource(SceneObjectGroup sog)
{
ScenePresence sp = GetScenePresence(sog.OwnerID);
@@ -2452,13 +2450,12 @@ namespace OpenSim.Region.Framework.Scenes
if (aCircuit != null && (aCircuit.teleportFlags != (uint)TeleportFlags.Default))
{
// This will get your attention
- //m_log.Error("[XXX] Triggering ");
+ //m_log.Error("[XXX] Triggering CHANGED_TELEPORT");
- // Trigger CHANGED_TELEPORT
- sp.Scene.EventManager.TriggerOnScriptChangedEvent(sog.LocalId, (uint)Changed.TELEPORT);
+ return 5; // StateSource.Teleporting
}
-
}
+ return 2; // StateSource.PrimCrossing
}
#endregion
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index 0c99d8c..8b7871b 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -42,7 +42,8 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
NewRez = 1,
PrimCrossing = 2,
ScriptedRez = 3,
- AttachedRez = 4
+ AttachedRez = 4,
+ Teleporting = 5
}
public interface IScriptWorkItem
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 660e9a3..8e712b6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -390,19 +390,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
}
else if (m_stateSource == StateSource.RegionStart)
{
-// m_log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script");
+ //m_log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script");
PostEvent(new EventParams("changed",
- new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION_RESTART) },
- new DetectParams[0]));
+ new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION_RESTART) }, new DetectParams[0]));
}
- else if (m_stateSource == StateSource.PrimCrossing)
+ else if (m_stateSource == StateSource.PrimCrossing || m_stateSource == StateSource.Teleporting)
{
// CHANGED_REGION
PostEvent(new EventParams("changed",
- new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION) },
- new DetectParams[0]));
+ new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION) }, new DetectParams[0]));
+
+ // CHANGED_TELEPORT
+ if (m_stateSource == StateSource.Teleporting)
+ PostEvent(new EventParams("changed",
+ new Object[] { new LSL_Types.LSLInteger((int)Changed.TELEPORT) }, new DetectParams[0]));
}
- }
+ }
else
{
Start();
--
cgit v1.1
From 0e311a210444b2c85210cfb7e32f75a7b72004c0 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 27 Nov 2010 00:53:35 +0000
Subject: If we fail to gather asset uuids for a particular asset, log the
failing asset id and type
---
OpenSim/Region/Framework/Scenes/UuidGatherer.cs | 40 +++++++++++++++----------
1 file changed, 25 insertions(+), 15 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index aee2d10..3978a7d 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -86,23 +86,33 @@ namespace OpenSim.Region.Framework.Scenes
/// The assets gathered
public void GatherAssetUuids(UUID assetUuid, AssetType assetType, IDictionary assetUuids)
{
- assetUuids[assetUuid] = assetType;
-
- if (AssetType.Bodypart == assetType || AssetType.Clothing == assetType)
- {
- GetWearableAssetUuids(assetUuid, assetUuids);
- }
- else if (AssetType.Gesture == assetType)
- {
- GetGestureAssetUuids(assetUuid, assetUuids);
- }
- else if (AssetType.LSLText == assetType)
- {
- GetScriptAssetUuids(assetUuid, assetUuids);
+ try
+ {
+ assetUuids[assetUuid] = assetType;
+
+ if (AssetType.Bodypart == assetType || AssetType.Clothing == assetType)
+ {
+ GetWearableAssetUuids(assetUuid, assetUuids);
+ }
+ else if (AssetType.Gesture == assetType)
+ {
+ GetGestureAssetUuids(assetUuid, assetUuids);
+ }
+ else if (AssetType.LSLText == assetType)
+ {
+ GetScriptAssetUuids(assetUuid, assetUuids);
+ }
+ else if (AssetType.Object == assetType)
+ {
+ GetSceneObjectAssetUuids(assetUuid, assetUuids);
+ }
}
- else if (AssetType.Object == assetType)
+ catch (Exception)
{
- GetSceneObjectAssetUuids(assetUuid, assetUuids);
+ m_log.ErrorFormat(
+ "[UUID GATHERER]: Failed to gather uuids for asset id {0}, type {1}",
+ assetUuid, assetType);
+ throw;
}
}
--
cgit v1.1
From 541a7660e06206c9a9eb2426dee0449afb554921 Mon Sep 17 00:00:00 2001
From: Mic Bowman
Date: Tue, 23 Nov 2010 16:08:10 -0800
Subject: Refactor appearance and avatar data sending code. Paritioning the
routines into "one-to-many" and "many-to-one" makes it possible to call the
right function on presence creation (both child and root) and when a child
agent is promoted to root. This brings the total number of appearance sends
down to one or two on login.
Cleaned up the avatar update calls in the groups code. Cleaned up
some commented and debugging code, and a few formating fixes.
---
.../Avatar/AvatarFactory/AvatarFactoryModule.cs | 30 +--
.../EntityTransfer/EntityTransferModule.cs | 4 +-
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 231 +++++++++++----------
.../Avatar/XmlRpcGroups/GroupsModule.cs | 9 +-
4 files changed, 132 insertions(+), 142 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 0df4585..ab1c206 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -183,7 +183,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
});
}
- // m_log.WarnFormat("[AVFACTORY]: Complete texture check for {0}",client.AgentId);
+ m_log.WarnFormat("[AVFACTORY]: Complete texture check for {0}",client.AgentId);
}
// Process the visual params, this may change height as well
@@ -196,12 +196,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
sp.SetHeight(sp.Appearance.AvatarHeight);
}
}
-
- // Send the appearance back to the avatar, not clear that this is needed
- sp.ControllingClient.SendAvatarDataImmediate(sp);
- // AvatarAppearance avp = sp.Appearance;
- // sp.ControllingClient.SendAppearance(avp.Owner,avp.VisualParams,avp.Texture.GetBytes());
-
}
@@ -274,21 +268,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// Send the appearance to everyone in the scene
sp.SendAppearanceToAllOtherAgents();
- // sp.ControllingClient.SendAvatarDataImmediate(sp);
-
- // Send the appearance back to the avatar
- // AvatarAppearance avp = sp.Appearance;
- // sp.ControllingClient.SendAppearance(avp.Owner, avp.VisualParams, avp.Texture.GetBytes());
-
-/*
-// this needs to be fixed, the flag should be on scene presence not the region module
- // Start the animations if necessary
- if (!m_startAnimationSet)
- {
- sp.Animator.UpdateMovementAnimations();
- m_startAnimationSet = true;
- }
-*/
}
private void HandleAppearanceSave(UUID agentid)
@@ -374,6 +353,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
// m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}", client.AgentId);
+ // operate on a copy of the appearance so we don't have to lock anything
AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance, false);
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
@@ -388,9 +368,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
SetAppearanceAssets(sp.UUID, ref avatAppearance);
// could get fancier with the locks here, but in the spirit of "last write wins"
- // this should work correctly
+ // this should work correctly, also, we don't need to send the appearance here
+ // since the "iswearing" will trigger a new set of visual param and baked texture changes
+ // when those complete, the new appearance will be sent
sp.Appearance = avatAppearance;
- m_scene.AvatarService.SetAppearance(client.AgentId, sp.Appearance);
+ QueueAppearanceSave(client.AgentId);
}
private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index f02a922..b57dc88 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -903,8 +903,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
}
agent.MakeChildAgent();
+
// now we have a child agent in this region. Request all interesting data about other (root) agents
- agent.SendInitialFullUpdateToAllClients();
+ agent.SendOtherAgentsAvatarDataToMe();
+ agent.SendOtherAgentsAppearanceToMe();
CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true);
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index db69093..4a48ac3 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -703,7 +703,9 @@ namespace OpenSim.Region.Framework.Scenes
// Note: This won't send data *to* other clients in that region (children don't send)
// MIC: This gets called again in CompleteMovement
- SendInitialFullUpdateToAllClients();
+ // SendInitialFullUpdateToAllClients();
+ SendOtherAgentsAvatarDataToMe();
+ SendOtherAgentsAppearanceToMe();
RegisterToEvents();
SetDirectionVectors();
@@ -1613,7 +1615,7 @@ namespace OpenSim.Region.Framework.Scenes
{
AbsolutePosition = part.AbsolutePosition;
Velocity = Vector3.Zero;
- SendFullUpdateToAllClients();
+ SendAvatarDataToAllAgents();
//HandleAgentSit(ControllingClient, m_requestedSitTargetUUID);
}
@@ -1688,7 +1690,7 @@ namespace OpenSim.Region.Framework.Scenes
m_parentPosition = Vector3.Zero;
m_parentID = 0;
- SendFullUpdateToAllClients();
+ SendAvatarDataToAllAgents();
m_requestedSitTargetID = 0;
if (m_physicsActor != null && m_appearance != null)
{
@@ -2154,7 +2156,7 @@ namespace OpenSim.Region.Framework.Scenes
RemoveFromPhysicalScene();
Animator.TrySetMovementAnimation(sitAnimation);
- SendFullUpdateToAllClients();
+ SendAvatarDataToAllAgents();
// This may seem stupid, but Our Full updates don't send avatar rotation :P
// So we're also sending a terse update (which has avatar rotation)
// [Update] We do now.
@@ -2379,165 +2381,169 @@ namespace OpenSim.Region.Framework.Scenes
}
///
- /// Tell other client about this avatar (The client previously didn't know or had outdated details about this avatar)
+ /// Do everything required once a client completes its movement into a region and becomes
+ /// a root agent.
///
- ///
- public void SendFullUpdateToOtherClient(ScenePresence remoteAvatar)
+ private void SendInitialData()
{
- // 2 stage check is needed.
- if (remoteAvatar == null)
- return;
-
- IClientAPI cl = remoteAvatar.ControllingClient;
- if (cl == null)
- return;
+ // Moved this into CompleteMovement to ensure that m_appearance is initialized before
+ // the inventory arrives
+ // m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance);
- if (m_appearance.Texture == null)
- return;
+ // This agent just became root. We are going to tell everyone about it. The process of
+ // getting other avatars information was initiated in the constructor... don't do it
+ // again here...
+ SendAvatarDataToAllAgents();
-// MT: This is needed for sit. It's legal to send it to oneself, and the name
-// of the method is a misnomer
-//
-// if (LocalId == remoteAvatar.LocalId)
-// {
-// m_log.WarnFormat("[SCENEPRESENCE]: An agent is attempting to send avatar data to itself; {0}", UUID);
-// return;
-// }
+ // We have an appearance but we may not have the baked textures. Check the asset cache
+ // to see if all the baked textures are already here.
+ if (m_scene.AvatarFactory != null)
+ {
+ if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient))
+ {
+// m_log.WarnFormat("[SCENEPRESENCE]: baked textures are in the cache for {0}", Name);
+ SendAppearanceToAgent(this);
- if (IsChildAgent)
+ // If the avatars baked textures are all in the cache, then we have a
+ // complete appearance... send it out, if not, then we'll send it when
+ // the avatar finishes updating its appearance
+ SendAppearanceToAllOtherAgents();
+ }
+ }
+ else
{
- m_log.WarnFormat("[SCENEPRESENCE]: A child agent is attempting to send out avatar data; {0}", UUID);
- return;
+ m_log.WarnFormat("[SCENEPRESENCE]: AvatarFactory not set for {0}", Name);
}
-
- remoteAvatar.m_controllingClient.SendAvatarDataImmediate(this);
- m_scene.StatsReporter.AddAgentUpdates(1);
}
///
- /// Tell *ALL* agents about this agent
+ /// Send this agent's avatar data to all other root and child agents in the scene
+ /// This agent must be root. This avatar will receive its own update.
///
- public void SendInitialFullUpdateToAllClients()
+ public void SendAvatarDataToAllAgents()
{
- m_perfMonMS = Util.EnvironmentTickCount();
- int avUpdates = 0;
- m_scene.ForEachScenePresence(delegate(ScenePresence avatar)
+ // only send update from root agents to other clients; children are only "listening posts"
+ if (IsChildAgent)
{
- ++avUpdates;
-
- // Don't update ourselves
- if (avatar.LocalId == LocalId)
- return;
-
- // If this is a root agent, then get info about the avatar
- if (!IsChildAgent)
- {
- SendFullUpdateToOtherClient(avatar);
- }
+ m_log.Warn("[SCENEPRESENCE] attempt to send avatar data from a child agent");
+ return;
+ }
+
+ m_perfMonMS = Util.EnvironmentTickCount();
- // If the other avatar is a root
- if (!avatar.IsChildAgent)
- {
- avatar.SendFullUpdateToOtherClient(this);
- avatar.SendAppearanceToOtherAgent(this);
- avatar.Animator.SendAnimPackToClient(ControllingClient);
- }
- });
+ int count = 0;
+ m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
+ {
+ SendAvatarDataToAgent(scenePresence);
+ count++;
+ });
- m_scene.StatsReporter.AddAgentUpdates(avUpdates);
+ m_scene.StatsReporter.AddAgentUpdates(count);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
-
- //Animator.SendAnimPack();
}
- public void SendFullUpdateToAllClients()
+ ///
+ /// Send avatar data for all other root agents to this agent, this agent
+ /// can be either a child or root
+ ///
+ public void SendOtherAgentsAvatarDataToMe()
{
m_perfMonMS = Util.EnvironmentTickCount();
- // only send update from root agents to other clients; children are only "listening posts"
- if (IsChildAgent)
- {
- m_log.Warn("[SCENEPRESENCE] attempt to send update from a childagent");
- return;
- }
-
int count = 0;
- m_scene.ForEachScenePresence(delegate(ScenePresence sp)
- {
- if (sp.IsChildAgent)
- return;
- SendFullUpdateToOtherClient(sp);
- ++count;
- });
+ m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
+ {
+ // only send information about root agents
+ if (scenePresence.IsChildAgent)
+ return;
+
+ // only send information about other root agents
+ if (scenePresence.UUID == UUID)
+ return;
+
+ scenePresence.SendAvatarDataToAgent(this);
+ count++;
+ });
+
m_scene.StatsReporter.AddAgentUpdates(count);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
-
- Animator.SendAnimPack();
}
///
- /// Do everything required once a client completes its movement into a region
+ /// Send avatar data to an agent.
///
- public void SendInitialData()
+ ///
+ private void SendAvatarDataToAgent(ScenePresence avatar)
{
- // Moved this into CompleteMovement to ensure that m_appearance is initialized before
- // the inventory arrives
- // m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance);
+// m_log.WarnFormat("[SP] Send avatar data from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId);
- m_controllingClient.SendAvatarDataImmediate(this);
- if (m_scene.AvatarFactory != null)
- {
- if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient))
- {
-// m_log.WarnFormat("[SCENEPRESENCE]: baked textures are in the cache for {0}", Name);
- m_controllingClient.SendAppearance(
- m_appearance.Owner,m_appearance.VisualParams,m_appearance.Texture.GetBytes());
- }
- }
- else
+ avatar.ControllingClient.SendAvatarDataImmediate(this);
+ Animator.SendAnimPackToClient(avatar.ControllingClient);
+ }
+
+ ///
+ /// Send this agent's appearance to all other root and child agents in the scene
+ /// This agent must be root.
+ ///
+ public void SendAppearanceToAllOtherAgents()
+ {
+ // only send update from root agents to other clients; children are only "listening posts"
+ if (IsChildAgent)
{
- m_log.WarnFormat("[SCENEPRESENCE]: AvatarFactory not set for {0}", Name);
+ m_log.Warn("[SCENEPRESENCE] attempt to send avatar data from a child agent");
+ return;
}
+
+ m_perfMonMS = Util.EnvironmentTickCount();
+
+ int count = 0;
+ m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
+ {
+ if (scenePresence.UUID == UUID)
+ return;
- SendInitialFullUpdateToAllClients();
+ SendAppearanceToAgent(scenePresence);
+ count++;
+ });
+
+ m_scene.StatsReporter.AddAgentUpdates(count);
+ m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
///
- ///
+ /// Send appearance from all other root agents to this agent. this agent
+ /// can be either root or child
///
- public void SendAppearanceToAllOtherAgents()
+ public void SendOtherAgentsAppearanceToMe()
{
-// DEBUG ON
-// m_log.WarnFormat("[SCENEPRESENCE]: Send appearance from {0} to all other agents", m_uuid);
-// DEBUG OFF
m_perfMonMS = Util.EnvironmentTickCount();
+ int count = 0;
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
{
- if (scenePresence.UUID != UUID)
- {
- SendAppearanceToOtherAgent(scenePresence);
- }
+ // only send information about root agents
+ if (scenePresence.IsChildAgent)
+ return;
+
+ // only send information about other root agents
+ if (scenePresence.UUID == UUID)
+ return;
+
+ scenePresence.SendAppearanceToAgent(this);
+ count++;
});
+ m_scene.StatsReporter.AddAgentUpdates(count);
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
}
///
- /// Send appearance data to an agent that isn't this one.
+ /// Send appearance data to an agent.
///
///
- public void SendAppearanceToOtherAgent(ScenePresence avatar)
+ private void SendAppearanceToAgent(ScenePresence avatar)
{
- if (LocalId == avatar.LocalId)
- {
- m_log.WarnFormat("[SCENE PRESENCE]: An agent is attempting to send appearance data to itself; {0}", UUID);
- return;
- }
-
-// DEBUG ON
// m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId);
-// DEBUG OFF
avatar.ControllingClient.SendAppearance(
m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
@@ -3050,9 +3056,6 @@ namespace OpenSim.Region.Framework.Scenes
public void CopyFrom(AgentData cAgent)
{
-// DEBUG ON
- m_log.ErrorFormat("[SCENEPRESENCE] CALLING COPYFROM");
-// DEBUG OFF
m_originRegionID = cAgent.RegionID;
m_callbackURI = cAgent.CallbackURI;
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index 0c8113e..ccf5289 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -1173,10 +1173,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
presence = scene.GetScenePresence(AgentID);
if (presence != null)
{
- presence.Grouptitle = Title;
+ if (presence.Grouptitle != Title)
+ {
+ presence.Grouptitle = Title;
- // FixMe: Ter suggests a "Schedule" method that I can't find.
- presence.SendFullUpdateToAllClients();
+ if (! presence.IsChildAgent)
+ presence.SendAvatarDataToAllAgents();
+ }
}
}
}
--
cgit v1.1
From a8a8fb6e1380c37b64963d0968c5af4f64e6f25e Mon Sep 17 00:00:00 2001
From: Micheil Merlin
Date: Sat, 20 Nov 2010 17:04:59 -0600
Subject: llVecNorm nant test
---
.../ScriptEngine/Shared/Tests/LSL_ApiTest.cs | 24 ++++++++++++++++++++++
1 file changed, 24 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs
index dfc9aa3..1d55b95 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs
@@ -47,6 +47,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
{
private const double ANGLE_ACCURACY_IN_RADIANS = 1E-6;
+ private const double VECTOR_COMPONENT_ACCURACY = 0.0000005d;
private LSL_Api m_lslApi;
[SetUp]
@@ -164,5 +165,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
Assert.Greater(eulerCalc.z, eulerCheck.z - ANGLE_ACCURACY_IN_RADIANS, "TestllRot2Euler Z lower bounds check fail");
Assert.Less(eulerCalc.z, eulerCheck.z + ANGLE_ACCURACY_IN_RADIANS, "TestllRot2Euler Z upper bounds check fail");
}
+
+ [Test]
+ // llVecNorm test.
+ public void TestllVecNorm()
+ {
+ // Check special case for normalizing zero vector.
+ CheckllVecNorm(new LSL_Types.Vector3(0.0d, 0.0d, 0.0d), new LSL_Types.Vector3(0.0d, 0.0d, 0.0d));
+ // Check various vectors.
+ CheckllVecNorm(new LSL_Types.Vector3(10.0d, 25.0d, 0.0d), new LSL_Types.Vector3(0.371391d, 0.928477d, 0.0d));
+ CheckllVecNorm(new LSL_Types.Vector3(1.0d, 0.0d, 0.0d), new LSL_Types.Vector3(1.0d, 0.0d, 0.0d));
+ CheckllVecNorm(new LSL_Types.Vector3(-90.0d, 55.0d, 2.0d), new LSL_Types.Vector3(-0.853128d, 0.521356d, 0.018958d));
+ CheckllVecNorm(new LSL_Types.Vector3(255.0d, 255.0d, 255.0d), new LSL_Types.Vector3(0.577350d, 0.577350d, 0.577350d));
+ }
+
+ public void CheckllVecNorm(LSL_Types.Vector3 vec, LSL_Types.Vector3 vecNormCheck)
+ {
+ // Call LSL function to normalize the vector.
+ LSL_Types.Vector3 vecNorm = m_lslApi.llVecNorm(vec);
+ // Check each vector component against expected result.
+ Assert.AreEqual(vecNorm.x, vecNormCheck.x, VECTOR_COMPONENT_ACCURACY, "TestllVecNorm vector check fail on x component");
+ Assert.AreEqual(vecNorm.y, vecNormCheck.y, VECTOR_COMPONENT_ACCURACY, "TestllVecNorm vector check fail on y component");
+ Assert.AreEqual(vecNorm.z, vecNormCheck.z, VECTOR_COMPONENT_ACCURACY, "TestllVecNorm vector check fail on z component");
+ }
}
}
--
cgit v1.1
From 6ed63487d912c9d1e0946fb271639c40356483e9 Mon Sep 17 00:00:00 2001
From: Micheil Merlin
Date: Sat, 20 Nov 2010 21:49:37 -0600
Subject: llUnsit position fix 4063 (updated 11-20-2010)
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 29 ++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4a48ac3..d4b4e0a 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -445,8 +445,33 @@ namespace OpenSim.Region.Framework.Scenes
PhysicsActor actor = m_physicsActor;
if (actor != null)
m_pos = actor.Position;
-
- return m_parentPosition + m_pos;
+ else // OS Mantis #4063
+ { // OS Mantis #4063
+ // OpenSim Mantis #4063. Obtain the correct position of a seated avatar. In addition
+ // to providing the correct position while the avatar is seated, this value will also
+ // be used as the location to unsit to.
+ //
+ // If m_parentID is not 0, assume we are a seated avatar and we should return the
+ // position based on the sittarget offset and rotation of the prim we are seated on.
+ //
+ // Generally, m_pos will contain the position of the avator in the sim unless the avatar
+ // is on a sit target. While on a sit target, m_pos will contain the desired offset
+ // without the parent rotation applied.
+ if (m_parentID != 0) // OS Mantis #4063
+ {
+ SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID); // OS Mantis #4063
+ if (part != null) // OS Mantis #4063
+ { // OS Mantis #4064
+ return m_parentPosition + (m_pos * part.GetWorldRotation()); // OS Mantis #4063
+ }
+ else // OS Mantis #4064
+ { // OS Mantis #4063
+ return m_parentPosition + m_pos; // OS Mantis #4064
+ } // OS Mantis #4063
+ } // OS Mantis #4063
+ } // OS Mantis #4063
+
+ return m_pos; // OS Mantis #4063
}
set
{
--
cgit v1.1
From 63e2c3b2d66b5800fa77be76d4a7d47e1bf4a66f Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sat, 27 Nov 2010 01:28:02 +0000
Subject: Reformat an overzealous comment. Remove end of line marks and
reference to the Mantis solved, as that isn't needed to understand the code.
Reformat the comment for 80 col screens.
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 45 +++++++++++++-----------
1 file changed, 24 insertions(+), 21 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index d4b4e0a..82214bf 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -445,33 +445,36 @@ namespace OpenSim.Region.Framework.Scenes
PhysicsActor actor = m_physicsActor;
if (actor != null)
m_pos = actor.Position;
- else // OS Mantis #4063
- { // OS Mantis #4063
- // OpenSim Mantis #4063. Obtain the correct position of a seated avatar. In addition
- // to providing the correct position while the avatar is seated, this value will also
+ else
+ {
+ // Obtain the correct position of a seated avatar.
+ // In addition to providing the correct position while
+ // the avatar is seated, this value will also
// be used as the location to unsit to.
//
- // If m_parentID is not 0, assume we are a seated avatar and we should return the
- // position based on the sittarget offset and rotation of the prim we are seated on.
+ // If m_parentID is not 0, assume we are a seated avatar
+ // and we should return the position based on the sittarget
+ // offset and rotation of the prim we are seated on.
//
- // Generally, m_pos will contain the position of the avator in the sim unless the avatar
- // is on a sit target. While on a sit target, m_pos will contain the desired offset
+ // Generally, m_pos will contain the position of the avatar
+ // in the sim unless the avatar is on a sit target. While
+ // on a sit target, m_pos will contain the desired offset
// without the parent rotation applied.
- if (m_parentID != 0) // OS Mantis #4063
+ if (m_parentID != 0)
{
- SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID); // OS Mantis #4063
- if (part != null) // OS Mantis #4063
- { // OS Mantis #4064
- return m_parentPosition + (m_pos * part.GetWorldRotation()); // OS Mantis #4063
+ SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID);
+ if (part != null)
+ {
+ return m_parentPosition + (m_pos * part.GetWorldRotation());
}
- else // OS Mantis #4064
- { // OS Mantis #4063
- return m_parentPosition + m_pos; // OS Mantis #4064
- } // OS Mantis #4063
- } // OS Mantis #4063
- } // OS Mantis #4063
-
- return m_pos; // OS Mantis #4063
+ else
+ {
+ return m_parentPosition + m_pos;
+ }
+ }
+ }
+
+ return m_pos;
}
set
{
--
cgit v1.1
From d71d4f96e32a674c86eb4b20af7c10d382443ce4 Mon Sep 17 00:00:00 2001
From: Marck
Date: Sat, 27 Nov 2010 10:59:14 +0100
Subject: Amend GetLinkPrimitiveParams with implementations for PRIM_TEXGEN,
PRIM_BUMP_SHINY, PRIM_FULLBRIGHT, and PRIM_GLOW
---
.../Shared/Api/Implementation/LSL_Api.cs | 86 +++++++++++++++++++---
1 file changed, 76 insertions(+), 10 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index d06b134..3c5f2d0 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -7759,24 +7759,59 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
break;
case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
- // TODO--------------
if (remain < 1)
return res;
face=(int)rules.GetLSLIntegerItem(idx++);
- res.Add(new LSL_Integer(0));
- res.Add(new LSL_Integer(0));
+ tex = part.Shape.Textures;
+ if (face == ScriptBaseClass.ALL_SIDES)
+ {
+ for (face = 0; face < GetNumberOfSides(part); face++)
+ {
+ Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
+ // Convert Shininess to PRIM_SHINY_*
+ res.Add(new LSL_Integer((uint)texface.Shiny >> 6));
+ // PRIM_BUMP_*
+ res.Add(new LSL_Integer((int)texface.Bump));
+ }
+ }
+ else
+ {
+ if (face >= 0 && face < GetNumberOfSides(part))
+ {
+ Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
+ // Convert Shininess to PRIM_SHINY_*
+ res.Add(new LSL_Integer((uint)texface.Shiny >> 6));
+ // PRIM_BUMP_*
+ res.Add(new LSL_Integer((int)texface.Bump));
+ }
+ }
break;
case (int)ScriptBaseClass.PRIM_FULLBRIGHT:
- // TODO--------------
if (remain < 1)
return res;
face=(int)rules.GetLSLIntegerItem(idx++);
- res.Add(new LSL_Integer(0));
+ tex = part.Shape.Textures;
+ if (face == ScriptBaseClass.ALL_SIDES)
+ {
+ for (face = 0; face < GetNumberOfSides(part); face++)
+ {
+ Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
+ res.Add(new LSL_Integer(texface.Fullbright ? 1 : 0));
+ }
+ }
+ else
+ {
+ if (face >= 0 && face < GetNumberOfSides(part))
+ {
+ Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
+ res.Add(new LSL_Integer(texface.Fullbright ? 1 : 0));
+ }
+ }
break;
case (int)ScriptBaseClass.PRIM_FLEXIBLE:
@@ -7797,14 +7832,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
break;
case (int)ScriptBaseClass.PRIM_TEXGEN:
- // TODO--------------
- // (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR)
if (remain < 1)
return res;
face=(int)rules.GetLSLIntegerItem(idx++);
- res.Add(new LSL_Integer(0));
+ tex = part.Shape.Textures;
+ if (face == ScriptBaseClass.ALL_SIDES)
+ {
+ for (face = 0; face < GetNumberOfSides(part); face++)
+ {
+ MappingType texgen = tex.GetFace((uint)face).TexMapType;
+ // Convert MappingType to PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR etc.
+ res.Add(new LSL_Integer((uint)texgen >> 1));
+ }
+ }
+ else
+ {
+ if (face >= 0 && face < GetNumberOfSides(part))
+ {
+ MappingType texgen = tex.GetFace((uint)face).TexMapType;
+ res.Add(new LSL_Integer((uint)texgen >> 1));
+ }
+ }
break;
case (int)ScriptBaseClass.PRIM_POINT_LIGHT:
@@ -7823,14 +7873,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
break;
case (int)ScriptBaseClass.PRIM_GLOW:
- // TODO--------------
if (remain < 1)
return res;
face=(int)rules.GetLSLIntegerItem(idx++);
- res.Add(new LSL_Float(0));
+ tex = part.Shape.Textures;
+ if (face == ScriptBaseClass.ALL_SIDES)
+ {
+ for (face = 0; face < GetNumberOfSides(part); face++)
+ {
+ Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
+ res.Add(new LSL_Float(texface.Glow));
+ }
+ }
+ else
+ {
+ if (face >= 0 && face < GetNumberOfSides(part))
+ {
+ Primitive.TextureEntryFace texface = tex.GetFace((uint)face);
+ res.Add(new LSL_Float(texface.Glow));
+ }
+ }
break;
+
case (int)ScriptBaseClass.PRIM_TEXT:
Color4 textColor = part.GetTextColor();
res.Add(part.Text);
--
cgit v1.1
From 5aeb83125a9485eb0ab38c65a939964973b7962b Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sun, 28 Nov 2010 23:30:55 +0000
Subject: Remove the most spammy XML dumps from the FS voice module
---
.../Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index a583cca..0b51bf0 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -132,7 +132,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
m_FreeswitchService = ServerUtils.LoadPlugin(serviceDll, args);
string jsonConfig = m_FreeswitchService.GetJsonConfig();
- m_log.Debug("[FreeSwitchVoice]: Configuration string: " + jsonConfig);
+ //m_log.Debug("[FreeSwitchVoice]: Configuration string: " + jsonConfig);
OSDMap map = (OSDMap)OSDParser.DeserializeJson(jsonConfig);
m_freeSwitchAPIPrefix = map["APIPrefix"].AsString();
@@ -363,7 +363,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
try
{
- m_log.DebugFormat("[FreeSwitchVoice][PROVISIONVOICE]: request: {0}, path: {1}, param: {2}",
+ //m_log.DebugFormat("[FreeSwitchVoice][PROVISIONVOICE]: request: {0}, path: {1}, param: {2}",
request, path, param);
//XmlElement resp;
@@ -445,7 +445,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
// voice channel
LandData land = scene.GetLandData(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
- m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": request: {4}, path: {5}, param: {6}",
+ //m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": request: {4}, path: {5}, param: {6}",
scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, request, path, param);
// TODO: EstateSettings don't seem to get propagated...
@@ -592,7 +592,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
response["int_response_code"] = 200;
- m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler return {0}",response["str_response_string"]);
+ //m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler return {0}",response["str_response_string"]);
return response;
}
@@ -664,7 +664,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
response["str_response_string"] = resp.ToString();
Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline);
- m_log.DebugFormat("[FREESWITCH]: {0}", normalizeEndLines.Replace((string)response["str_response_string"],""));
+ //m_log.DebugFormat("[FREESWITCH]: {0}", normalizeEndLines.Replace((string)response["str_response_string"],""));
return response;
}
@@ -696,7 +696,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
}
}
- m_log.DebugFormat("[FreeSwitchVoice]: AUTH, URI: {0}, Content-Type:{1}, Body{2}", uri, contenttype,
+ //m_log.DebugFormat("[FreeSwitchVoice]: AUTH, URI: {0}, Content-Type:{1}, Body{2}", uri, contenttype,
requestbody);
Hashtable response = new Hashtable();
response["str_response_string"] = string.Format(@"
--
cgit v1.1
From 04ce7de5ed54b0586c3287b6c848dadfb507b132 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Mon, 29 Nov 2010 01:15:02 +0000
Subject: Fix the build break
---
.../Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index 0b51bf0..e9c5453 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -364,7 +364,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
try
{
//m_log.DebugFormat("[FreeSwitchVoice][PROVISIONVOICE]: request: {0}, path: {1}, param: {2}",
- request, path, param);
+ // request, path, param);
//XmlElement resp;
string agentname = "x" + Convert.ToBase64String(agentID.GetBytes());
@@ -446,7 +446,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
LandData land = scene.GetLandData(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
//m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": request: {4}, path: {5}, param: {6}",
- scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, request, path, param);
+ // scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, request, path, param);
// TODO: EstateSettings don't seem to get propagated...
// if (!scene.RegionInfo.EstateSettings.AllowVoice)
@@ -697,7 +697,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
}
//m_log.DebugFormat("[FreeSwitchVoice]: AUTH, URI: {0}, Content-Type:{1}, Body{2}", uri, contenttype,
- requestbody);
+ // requestbody);
Hashtable response = new Hashtable();
response["str_response_string"] = string.Format(@"
--
cgit v1.1