Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
f3835fe15c
|
@ -323,7 +323,7 @@ namespace OpenSim.Data.Tests
|
||||||
.IgnoreProperty(x => x.InvType)
|
.IgnoreProperty(x => x.InvType)
|
||||||
.IgnoreProperty(x => x.CreatorIdAsUuid)
|
.IgnoreProperty(x => x.CreatorIdAsUuid)
|
||||||
.IgnoreProperty(x => x.Description)
|
.IgnoreProperty(x => x.Description)
|
||||||
.IgnoreProperty(x => x.CreatorId)
|
.IgnoreProperty(x => x.CreatorIdentification)
|
||||||
.IgnoreProperty(x => x.CreatorData));
|
.IgnoreProperty(x => x.CreatorData));
|
||||||
|
|
||||||
inventoryScrambler.Scramble(expected);
|
inventoryScrambler.Scramble(expected);
|
||||||
|
@ -334,7 +334,7 @@ namespace OpenSim.Data.Tests
|
||||||
.IgnoreProperty(x => x.InvType)
|
.IgnoreProperty(x => x.InvType)
|
||||||
.IgnoreProperty(x => x.CreatorIdAsUuid)
|
.IgnoreProperty(x => x.CreatorIdAsUuid)
|
||||||
.IgnoreProperty(x => x.Description)
|
.IgnoreProperty(x => x.Description)
|
||||||
.IgnoreProperty(x => x.CreatorId)
|
.IgnoreProperty(x => x.CreatorIdentification)
|
||||||
.IgnoreProperty(x => x.CreatorData));
|
.IgnoreProperty(x => x.CreatorData));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -302,9 +302,7 @@ namespace OpenSim.Framework
|
||||||
if (args["start_pos"] != null)
|
if (args["start_pos"] != null)
|
||||||
Vector3.TryParse(args["start_pos"].AsString(), out startpos);
|
Vector3.TryParse(args["start_pos"].AsString(), out startpos);
|
||||||
|
|
||||||
// DEBUG ON
|
m_log.InfoFormat("[AGENTCIRCUITDATA] agentid={0}, child={1}, startpos={2}",AgentID,child,startpos.ToString());
|
||||||
m_log.WarnFormat("[AGENTCIRCUITDATA] agentid={0}, child={1}, startpos={2}",AgentID,child,startpos.ToString());
|
|
||||||
// DEBUG OFF
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Unpack various appearance elements
|
// Unpack various appearance elements
|
||||||
|
@ -318,15 +316,12 @@ namespace OpenSim.Framework
|
||||||
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map))
|
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map))
|
||||||
{
|
{
|
||||||
Appearance.Unpack((OSDMap)args["packed_appearance"]);
|
Appearance.Unpack((OSDMap)args["packed_appearance"]);
|
||||||
// DEBUG ON
|
m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance");
|
||||||
m_log.WarnFormat("[AGENTCIRCUITDATA] unpacked appearance");
|
|
||||||
// DEBUG OFF
|
|
||||||
}
|
}
|
||||||
// DEBUG ON
|
|
||||||
else
|
else
|
||||||
m_log.Warn("[AGENTCIRCUITDATA] failed to find a valid packed_appearance");
|
m_log.Warn("[AGENTCIRCUITDATA] failed to find a valid packed_appearance");
|
||||||
// DEBUG OFF
|
}
|
||||||
} catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[AGENTCIRCUITDATA] failed to unpack appearance; {0}",e.Message);
|
m_log.ErrorFormat("[AGENTCIRCUITDATA] failed to unpack appearance; {0}",e.Message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,8 +51,16 @@ namespace OpenSim.Framework
|
||||||
string[] parts = temp.Split('\n');
|
string[] parts = temp.Split('\n');
|
||||||
int.TryParse(parts[0].Substring(17, 1), out Version);
|
int.TryParse(parts[0].Substring(17, 1), out Version);
|
||||||
UUID.TryParse(parts[1].Substring(10, 36), out RegionID);
|
UUID.TryParse(parts[1].Substring(10, 36), out RegionID);
|
||||||
// the vector is stored with spaces as separators, not with commas ("10.3 32.5 43" instead of "10.3, 32.5, 43")
|
// The position is a vector with spaces as separators ("10.3 32.5 43").
|
||||||
Vector3.TryParse(parts[2].Substring(10, parts[2].Length - 10).Replace(" ", ","), out Position);
|
// Parse each scalar separately to take into account the system's culture setting.
|
||||||
|
string[] scalars = parts[2].Substring(10, parts[2].Length - 10).Split(' ');
|
||||||
|
if (scalars.Length > 0)
|
||||||
|
System.Single.TryParse(scalars[0], out Position.X);
|
||||||
|
if (scalars.Length > 1)
|
||||||
|
System.Single.TryParse(scalars[1], out Position.Y);
|
||||||
|
if (scalars.Length > 2)
|
||||||
|
System.Single.TryParse(scalars[2], out Position.Z);
|
||||||
|
|
||||||
ulong.TryParse(parts[3].Substring(14, parts[3].Length - 14), out RegionHandle);
|
ulong.TryParse(parts[3].Substring(14, parts[3].Length - 14), out RegionHandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -331,9 +331,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public virtual OSDMap Pack()
|
public virtual OSDMap Pack()
|
||||||
{
|
{
|
||||||
// DEBUG ON
|
m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data");
|
||||||
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] Pack data");
|
|
||||||
// DEBUG OFF
|
|
||||||
|
|
||||||
OSDMap args = new OSDMap();
|
OSDMap args = new OSDMap();
|
||||||
args["message_type"] = OSD.FromString("AgentData");
|
args["message_type"] = OSD.FromString("AgentData");
|
||||||
|
@ -454,9 +452,7 @@ namespace OpenSim.Framework
|
||||||
/// <param name="hash"></param>
|
/// <param name="hash"></param>
|
||||||
public virtual void Unpack(OSDMap args)
|
public virtual void Unpack(OSDMap args)
|
||||||
{
|
{
|
||||||
// DEBUG ON
|
m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Unpack data");
|
||||||
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] Unpack data");
|
|
||||||
// DEBUG OFF
|
|
||||||
|
|
||||||
if (args.ContainsKey("region_id"))
|
if (args.ContainsKey("region_id"))
|
||||||
UUID.TryParse(args["region_id"].AsString(), out RegionID);
|
UUID.TryParse(args["region_id"].AsString(), out RegionID);
|
||||||
|
@ -613,10 +609,8 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map)
|
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map)
|
||||||
Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]);
|
Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]);
|
||||||
// DEBUG ON
|
|
||||||
else
|
else
|
||||||
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance");
|
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance");
|
||||||
// DEBUG OFF
|
|
||||||
|
|
||||||
if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array)
|
if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
// 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);
|
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
|
// Send the appearance to everyone in the scene
|
||||||
sp.SendAppearanceToAllOtherAgents();
|
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)
|
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);
|
// 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);
|
AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance, false);
|
||||||
|
|
||||||
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
|
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
|
||||||
|
@ -388,9 +368,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
SetAppearanceAssets(sp.UUID, ref avatAppearance);
|
SetAppearanceAssets(sp.UUID, ref avatAppearance);
|
||||||
|
|
||||||
// could get fancier with the locks here, but in the spirit of "last write wins"
|
// 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;
|
sp.Appearance = avatAppearance;
|
||||||
m_scene.AvatarService.SetAppearance(client.AgentId, sp.Appearance);
|
QueueAppearanceSave(client.AgentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
|
private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
|
||||||
|
|
|
@ -903,8 +903,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
}
|
}
|
||||||
|
|
||||||
agent.MakeChildAgent();
|
agent.MakeChildAgent();
|
||||||
|
|
||||||
// now we have a child agent in this region. Request all interesting data about other (root) agents
|
// 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);
|
CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true);
|
||||||
|
|
||||||
|
|
|
@ -2325,15 +2325,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 2);
|
newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject));
|
||||||
|
|
||||||
newObject.ResumeScripts();
|
newObject.ResumeScripts();
|
||||||
|
|
||||||
// Do this as late as possible so that listeners have full access to the incoming object
|
// Do this as late as possible so that listeners have full access to the incoming object
|
||||||
EventManager.TriggerOnIncomingSceneObject(newObject);
|
EventManager.TriggerOnIncomingSceneObject(newObject);
|
||||||
|
|
||||||
TriggerChangedTeleport(newObject);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2441,7 +2439,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TriggerChangedTeleport(SceneObjectGroup sog)
|
private int GetStateSource(SceneObjectGroup sog)
|
||||||
{
|
{
|
||||||
ScenePresence sp = GetScenePresence(sog.OwnerID);
|
ScenePresence sp = GetScenePresence(sog.OwnerID);
|
||||||
|
|
||||||
|
@ -2452,13 +2450,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (aCircuit != null && (aCircuit.teleportFlags != (uint)TeleportFlags.Default))
|
if (aCircuit != null && (aCircuit.teleportFlags != (uint)TeleportFlags.Default))
|
||||||
{
|
{
|
||||||
// This will get your attention
|
// This will get your attention
|
||||||
//m_log.Error("[XXX] Triggering ");
|
//m_log.Error("[XXX] Triggering CHANGED_TELEPORT");
|
||||||
|
|
||||||
// Trigger CHANGED_TELEPORT
|
return 5; // StateSource.Teleporting
|
||||||
sp.Scene.EventManager.TriggerOnScriptChangedEvent(sog.LocalId, (uint)Changed.TELEPORT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return 2; // StateSource.PrimCrossing
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -445,9 +445,37 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
PhysicsActor actor = m_physicsActor;
|
PhysicsActor actor = m_physicsActor;
|
||||||
if (actor != null)
|
if (actor != null)
|
||||||
m_pos = actor.Position;
|
m_pos = actor.Position;
|
||||||
|
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.
|
||||||
|
//
|
||||||
|
// 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)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID);
|
||||||
|
if (part != null)
|
||||||
|
{
|
||||||
|
return m_parentPosition + (m_pos * part.GetWorldRotation());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return m_parentPosition + m_pos;
|
return m_parentPosition + m_pos;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_pos;
|
||||||
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
PhysicsActor actor = m_physicsActor;
|
PhysicsActor actor = m_physicsActor;
|
||||||
|
@ -703,7 +731,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Note: This won't send data *to* other clients in that region (children don't send)
|
// Note: This won't send data *to* other clients in that region (children don't send)
|
||||||
|
|
||||||
// MIC: This gets called again in CompleteMovement
|
// MIC: This gets called again in CompleteMovement
|
||||||
SendInitialFullUpdateToAllClients();
|
// SendInitialFullUpdateToAllClients();
|
||||||
|
SendOtherAgentsAvatarDataToMe();
|
||||||
|
SendOtherAgentsAppearanceToMe();
|
||||||
|
|
||||||
RegisterToEvents();
|
RegisterToEvents();
|
||||||
SetDirectionVectors();
|
SetDirectionVectors();
|
||||||
|
@ -1613,7 +1643,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
AbsolutePosition = part.AbsolutePosition;
|
AbsolutePosition = part.AbsolutePosition;
|
||||||
Velocity = Vector3.Zero;
|
Velocity = Vector3.Zero;
|
||||||
SendFullUpdateToAllClients();
|
SendAvatarDataToAllAgents();
|
||||||
|
|
||||||
//HandleAgentSit(ControllingClient, m_requestedSitTargetUUID);
|
//HandleAgentSit(ControllingClient, m_requestedSitTargetUUID);
|
||||||
}
|
}
|
||||||
|
@ -1688,7 +1718,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_parentPosition = Vector3.Zero;
|
m_parentPosition = Vector3.Zero;
|
||||||
|
|
||||||
m_parentID = 0;
|
m_parentID = 0;
|
||||||
SendFullUpdateToAllClients();
|
SendAvatarDataToAllAgents();
|
||||||
m_requestedSitTargetID = 0;
|
m_requestedSitTargetID = 0;
|
||||||
if (m_physicsActor != null && m_appearance != null)
|
if (m_physicsActor != null && m_appearance != null)
|
||||||
{
|
{
|
||||||
|
@ -2154,7 +2184,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
RemoveFromPhysicalScene();
|
RemoveFromPhysicalScene();
|
||||||
|
|
||||||
Animator.TrySetMovementAnimation(sitAnimation);
|
Animator.TrySetMovementAnimation(sitAnimation);
|
||||||
SendFullUpdateToAllClients();
|
SendAvatarDataToAllAgents();
|
||||||
// This may seem stupid, but Our Full updates don't send avatar rotation :P
|
// 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)
|
// So we're also sending a terse update (which has avatar rotation)
|
||||||
// [Update] We do now.
|
// [Update] We do now.
|
||||||
|
@ -2379,165 +2409,169 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 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.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="remoteAvatar"></param>
|
private void SendInitialData()
|
||||||
public void SendFullUpdateToOtherClient(ScenePresence remoteAvatar)
|
|
||||||
{
|
|
||||||
// 2 stage check is needed.
|
|
||||||
if (remoteAvatar == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
IClientAPI cl = remoteAvatar.ControllingClient;
|
|
||||||
if (cl == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (m_appearance.Texture == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (IsChildAgent)
|
|
||||||
{
|
|
||||||
m_log.WarnFormat("[SCENEPRESENCE]: A child agent is attempting to send out avatar data; {0}", UUID);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
remoteAvatar.m_controllingClient.SendAvatarDataImmediate(this);
|
|
||||||
m_scene.StatsReporter.AddAgentUpdates(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tell *ALL* agents about this agent
|
|
||||||
/// </summary>
|
|
||||||
public void SendInitialFullUpdateToAllClients()
|
|
||||||
{
|
|
||||||
m_perfMonMS = Util.EnvironmentTickCount();
|
|
||||||
int avUpdates = 0;
|
|
||||||
m_scene.ForEachScenePresence(delegate(ScenePresence avatar)
|
|
||||||
{
|
|
||||||
++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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the other avatar is a root
|
|
||||||
if (!avatar.IsChildAgent)
|
|
||||||
{
|
|
||||||
avatar.SendFullUpdateToOtherClient(this);
|
|
||||||
avatar.SendAppearanceToOtherAgent(this);
|
|
||||||
avatar.Animator.SendAnimPackToClient(ControllingClient);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
m_scene.StatsReporter.AddAgentUpdates(avUpdates);
|
|
||||||
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
|
||||||
|
|
||||||
//Animator.SendAnimPack();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SendFullUpdateToAllClients()
|
|
||||||
{
|
|
||||||
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.StatsReporter.AddAgentUpdates(count);
|
|
||||||
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
|
||||||
|
|
||||||
Animator.SendAnimPack();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Do everything required once a client completes its movement into a region
|
|
||||||
/// </summary>
|
|
||||||
public void SendInitialData()
|
|
||||||
{
|
{
|
||||||
// Moved this into CompleteMovement to ensure that m_appearance is initialized before
|
// Moved this into CompleteMovement to ensure that m_appearance is initialized before
|
||||||
// the inventory arrives
|
// the inventory arrives
|
||||||
// m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance);
|
// m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance);
|
||||||
|
|
||||||
m_controllingClient.SendAvatarDataImmediate(this);
|
// 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();
|
||||||
|
|
||||||
|
// 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 != null)
|
||||||
{
|
{
|
||||||
if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient))
|
if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient))
|
||||||
{
|
{
|
||||||
// m_log.WarnFormat("[SCENEPRESENCE]: baked textures are in the cache for {0}", Name);
|
// m_log.WarnFormat("[SCENEPRESENCE]: baked textures are in the cache for {0}", Name);
|
||||||
m_controllingClient.SendAppearance(
|
SendAppearanceToAgent(this);
|
||||||
m_appearance.Owner,m_appearance.VisualParams,m_appearance.Texture.GetBytes());
|
|
||||||
|
// 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
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[SCENEPRESENCE]: AvatarFactory not set for {0}", Name);
|
m_log.WarnFormat("[SCENEPRESENCE]: AvatarFactory not set for {0}", Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendInitialFullUpdateToAllClients();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
/// 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.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SendAppearanceToAllOtherAgents()
|
public void SendAvatarDataToAllAgents()
|
||||||
{
|
{
|
||||||
// DEBUG ON
|
// only send update from root agents to other clients; children are only "listening posts"
|
||||||
// m_log.WarnFormat("[SCENEPRESENCE]: Send appearance from {0} to all other agents", m_uuid);
|
if (IsChildAgent)
|
||||||
// DEBUG OFF
|
{
|
||||||
|
m_log.Warn("[SCENEPRESENCE] attempt to send avatar data from a child agent");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_perfMonMS = Util.EnvironmentTickCount();
|
m_perfMonMS = Util.EnvironmentTickCount();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
|
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
|
||||||
{
|
{
|
||||||
if (scenePresence.UUID != UUID)
|
SendAvatarDataToAgent(scenePresence);
|
||||||
{
|
count++;
|
||||||
SendAppearanceToOtherAgent(scenePresence);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
m_scene.StatsReporter.AddAgentUpdates(count);
|
||||||
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send appearance data to an agent that isn't this one.
|
/// Send avatar data for all other root agents to this agent, this agent
|
||||||
|
/// can be either a child or root
|
||||||
|
/// </summary>
|
||||||
|
public void SendOtherAgentsAvatarDataToMe()
|
||||||
|
{
|
||||||
|
m_perfMonMS = Util.EnvironmentTickCount();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Send avatar data to an agent.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="avatar"></param>
|
/// <param name="avatar"></param>
|
||||||
public void SendAppearanceToOtherAgent(ScenePresence avatar)
|
private void SendAvatarDataToAgent(ScenePresence avatar)
|
||||||
{
|
{
|
||||||
if (LocalId == avatar.LocalId)
|
// m_log.WarnFormat("[SP] Send avatar data from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId);
|
||||||
|
|
||||||
|
avatar.ControllingClient.SendAvatarDataImmediate(this);
|
||||||
|
Animator.SendAnimPackToClient(avatar.ControllingClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Send this agent's appearance to all other root and child agents in the scene
|
||||||
|
/// This agent must be root.
|
||||||
|
/// </summary>
|
||||||
|
public void SendAppearanceToAllOtherAgents()
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[SCENE PRESENCE]: An agent is attempting to send appearance data to itself; {0}", UUID);
|
// only send update from root agents to other clients; children are only "listening posts"
|
||||||
|
if (IsChildAgent)
|
||||||
|
{
|
||||||
|
m_log.Warn("[SCENEPRESENCE] attempt to send avatar data from a child agent");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DEBUG ON
|
m_perfMonMS = Util.EnvironmentTickCount();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
|
||||||
|
{
|
||||||
|
if (scenePresence.UUID == UUID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SendAppearanceToAgent(scenePresence);
|
||||||
|
count++;
|
||||||
|
});
|
||||||
|
|
||||||
|
m_scene.StatsReporter.AddAgentUpdates(count);
|
||||||
|
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Send appearance from all other root agents to this agent. this agent
|
||||||
|
/// can be either root or child
|
||||||
|
/// </summary>
|
||||||
|
public void SendOtherAgentsAppearanceToMe()
|
||||||
|
{
|
||||||
|
m_perfMonMS = Util.EnvironmentTickCount();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
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.SendAppearanceToAgent(this);
|
||||||
|
count++;
|
||||||
|
});
|
||||||
|
|
||||||
|
m_scene.StatsReporter.AddAgentUpdates(count);
|
||||||
|
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Send appearance data to an agent.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="avatar"></param>
|
||||||
|
private void SendAppearanceToAgent(ScenePresence avatar)
|
||||||
|
{
|
||||||
// m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId);
|
// m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId);
|
||||||
// DEBUG OFF
|
|
||||||
|
|
||||||
avatar.ControllingClient.SendAppearance(
|
avatar.ControllingClient.SendAppearance(
|
||||||
m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
|
m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
|
||||||
|
@ -3050,9 +3084,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public void CopyFrom(AgentData cAgent)
|
public void CopyFrom(AgentData cAgent)
|
||||||
{
|
{
|
||||||
// DEBUG ON
|
|
||||||
m_log.ErrorFormat("[SCENEPRESENCE] CALLING COPYFROM");
|
|
||||||
// DEBUG OFF
|
|
||||||
m_originRegionID = cAgent.RegionID;
|
m_originRegionID = cAgent.RegionID;
|
||||||
|
|
||||||
m_callbackURI = cAgent.CallbackURI;
|
m_callbackURI = cAgent.CallbackURI;
|
||||||
|
|
|
@ -85,6 +85,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="assetType">The type of the asset for the uuid given</param>
|
/// <param name="assetType">The type of the asset for the uuid given</param>
|
||||||
/// <param name="assetUuids">The assets gathered</param>
|
/// <param name="assetUuids">The assets gathered</param>
|
||||||
public void GatherAssetUuids(UUID assetUuid, AssetType assetType, IDictionary<UUID, AssetType> assetUuids)
|
public void GatherAssetUuids(UUID assetUuid, AssetType assetType, IDictionary<UUID, AssetType> assetUuids)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
assetUuids[assetUuid] = assetType;
|
assetUuids[assetUuid] = assetType;
|
||||||
|
|
||||||
|
@ -105,6 +107,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
GetSceneObjectAssetUuids(assetUuid, assetUuids);
|
GetSceneObjectAssetUuids(assetUuid, assetUuids);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[UUID GATHERER]: Failed to gather uuids for asset id {0}, type {1}",
|
||||||
|
assetUuid, assetType);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gather all the asset uuids associated with a given object.
|
/// Gather all the asset uuids associated with a given object.
|
||||||
|
|
|
@ -132,7 +132,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
m_FreeswitchService = ServerUtils.LoadPlugin<IFreeswitchService>(serviceDll, args);
|
m_FreeswitchService = ServerUtils.LoadPlugin<IFreeswitchService>(serviceDll, args);
|
||||||
|
|
||||||
string jsonConfig = m_FreeswitchService.GetJsonConfig();
|
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);
|
OSDMap map = (OSDMap)OSDParser.DeserializeJson(jsonConfig);
|
||||||
|
|
||||||
m_freeSwitchAPIPrefix = map["APIPrefix"].AsString();
|
m_freeSwitchAPIPrefix = map["APIPrefix"].AsString();
|
||||||
|
@ -363,8 +363,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
|
|
||||||
try
|
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);
|
// request, path, param);
|
||||||
|
|
||||||
//XmlElement resp;
|
//XmlElement resp;
|
||||||
string agentname = "x" + Convert.ToBase64String(agentID.GetBytes());
|
string agentname = "x" + Convert.ToBase64String(agentID.GetBytes());
|
||||||
|
@ -445,8 +445,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
// voice channel
|
// voice channel
|
||||||
LandData land = scene.GetLandData(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
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);
|
// scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, request, path, param);
|
||||||
|
|
||||||
// TODO: EstateSettings don't seem to get propagated...
|
// TODO: EstateSettings don't seem to get propagated...
|
||||||
// if (!scene.RegionInfo.EstateSettings.AllowVoice)
|
// if (!scene.RegionInfo.EstateSettings.AllowVoice)
|
||||||
|
@ -592,7 +592,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
|
|
||||||
response["int_response_code"] = 200;
|
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;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -664,7 +664,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
response["str_response_string"] = resp.ToString();
|
response["str_response_string"] = resp.ToString();
|
||||||
Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline);
|
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;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -696,8 +696,8 @@ 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);
|
// requestbody);
|
||||||
Hashtable response = new Hashtable();
|
Hashtable response = new Hashtable();
|
||||||
response["str_response_string"] = string.Format(@"<response xsi:schemaLocation=""/xsd/signin.xsd"">
|
response["str_response_string"] = string.Format(@"<response xsi:schemaLocation=""/xsd/signin.xsd"">
|
||||||
<level0>
|
<level0>
|
||||||
|
|
|
@ -1172,11 +1172,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
{
|
{
|
||||||
presence = scene.GetScenePresence(AgentID);
|
presence = scene.GetScenePresence(AgentID);
|
||||||
if (presence != null)
|
if (presence != null)
|
||||||
|
{
|
||||||
|
if (presence.Grouptitle != Title)
|
||||||
{
|
{
|
||||||
presence.Grouptitle = Title;
|
presence.Grouptitle = Title;
|
||||||
|
|
||||||
// FixMe: Ter suggests a "Schedule" method that I can't find.
|
if (! presence.IsChildAgent)
|
||||||
presence.SendFullUpdateToAllClients();
|
presence.SendAvatarDataToAllAgents();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,8 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
|
||||||
NewRez = 1,
|
NewRez = 1,
|
||||||
PrimCrossing = 2,
|
PrimCrossing = 2,
|
||||||
ScriptedRez = 3,
|
ScriptedRez = 3,
|
||||||
AttachedRez = 4
|
AttachedRez = 4,
|
||||||
|
Teleporting = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IScriptWorkItem
|
public interface IScriptWorkItem
|
||||||
|
|
|
@ -7759,24 +7759,59 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
|
case (int)ScriptBaseClass.PRIM_BUMP_SHINY:
|
||||||
// TODO--------------
|
|
||||||
if (remain < 1)
|
if (remain < 1)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
face=(int)rules.GetLSLIntegerItem(idx++);
|
face=(int)rules.GetLSLIntegerItem(idx++);
|
||||||
|
|
||||||
res.Add(new LSL_Integer(0));
|
tex = part.Shape.Textures;
|
||||||
res.Add(new LSL_Integer(0));
|
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;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_FULLBRIGHT:
|
case (int)ScriptBaseClass.PRIM_FULLBRIGHT:
|
||||||
// TODO--------------
|
|
||||||
if (remain < 1)
|
if (remain < 1)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
face=(int)rules.GetLSLIntegerItem(idx++);
|
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;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_FLEXIBLE:
|
case (int)ScriptBaseClass.PRIM_FLEXIBLE:
|
||||||
|
@ -7797,14 +7832,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_TEXGEN:
|
case (int)ScriptBaseClass.PRIM_TEXGEN:
|
||||||
// TODO--------------
|
|
||||||
// (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR)
|
|
||||||
if (remain < 1)
|
if (remain < 1)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
face=(int)rules.GetLSLIntegerItem(idx++);
|
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;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_POINT_LIGHT:
|
case (int)ScriptBaseClass.PRIM_POINT_LIGHT:
|
||||||
|
@ -7823,14 +7873,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_GLOW:
|
case (int)ScriptBaseClass.PRIM_GLOW:
|
||||||
// TODO--------------
|
|
||||||
if (remain < 1)
|
if (remain < 1)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
face=(int)rules.GetLSLIntegerItem(idx++);
|
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;
|
break;
|
||||||
|
|
||||||
case (int)ScriptBaseClass.PRIM_TEXT:
|
case (int)ScriptBaseClass.PRIM_TEXT:
|
||||||
Color4 textColor = part.GetTextColor();
|
Color4 textColor = part.GetTextColor();
|
||||||
res.Add(part.Text);
|
res.Add(part.Text);
|
||||||
|
|
|
@ -392,15 +392,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
{
|
{
|
||||||
//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",
|
PostEvent(new EventParams("changed",
|
||||||
new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION_RESTART) },
|
new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION_RESTART) }, new DetectParams[0]));
|
||||||
new DetectParams[0]));
|
|
||||||
}
|
}
|
||||||
else if (m_stateSource == StateSource.PrimCrossing)
|
else if (m_stateSource == StateSource.PrimCrossing || m_stateSource == StateSource.Teleporting)
|
||||||
{
|
{
|
||||||
// CHANGED_REGION
|
// CHANGED_REGION
|
||||||
PostEvent(new EventParams("changed",
|
PostEvent(new EventParams("changed",
|
||||||
new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION) },
|
new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION) }, new DetectParams[0]));
|
||||||
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
|
else
|
||||||
|
|
|
@ -47,6 +47,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
||||||
{
|
{
|
||||||
|
|
||||||
private const double ANGLE_ACCURACY_IN_RADIANS = 1E-6;
|
private const double ANGLE_ACCURACY_IN_RADIANS = 1E-6;
|
||||||
|
private const double VECTOR_COMPONENT_ACCURACY = 0.0000005d;
|
||||||
private LSL_Api m_lslApi;
|
private LSL_Api m_lslApi;
|
||||||
|
|
||||||
[SetUp]
|
[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.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");
|
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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -333,7 +333,8 @@ namespace OpenSim.Services.HypergridService
|
||||||
|
|
||||||
string addressee = parts[0];
|
string addressee = parts[0];
|
||||||
m_log.DebugFormat("[GATEKEEPER SERVICE]: Verifying {0} against {1}", addressee, m_ExternalName);
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: Verifying {0} against {1}", addressee, m_ExternalName);
|
||||||
return (addressee == m_ExternalName);
|
|
||||||
|
return string.Equals(addressee, m_ExternalName, StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
Loading…
Reference in New Issue