refactor: simplify SOP.AttachedAvatar into SOG.AttachedAvatar

This does a tiny bit to reduce code complexity, memory requirement and the cpu time of pointlessly setting this field to the same value in every SOP
bulletsim
Justin Clark-Casey (justincc) 2011-08-26 23:06:41 +01:00
parent 5f3ffc195f
commit 15a514fcbc
7 changed files with 26 additions and 27 deletions

View File

@ -456,7 +456,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
if (so == null) if (so == null)
return; return;
if (so.RootPart.AttachedAvatar != remoteClient.AgentId) if (so.AttachedAvatar != remoteClient.AgentId)
return; return;
UUID inventoryID = so.GetFromItemID(); UUID inventoryID = so.GetFromItemID();
@ -498,7 +498,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
rootPart.FromItemID = UUID.Zero; rootPart.FromItemID = UUID.Zero;
so.AbsolutePosition = sp.AbsolutePosition; so.AbsolutePosition = sp.AbsolutePosition;
so.ForEachPart(part => part.AttachedAvatar = UUID.Zero); so.AttachedAvatar = UUID.Zero;
rootPart.SetParentLocalId(0); rootPart.SetParentLocalId(0);
so.ClearPartAttachmentData(); so.ClearPartAttachmentData();
rootPart.ApplyPhysics(rootPart.GetEffectiveObjectFlags(), rootPart.VolumeDetectActive, m_scene.m_physicalPrim); rootPart.ApplyPhysics(rootPart.GetEffectiveObjectFlags(), rootPart.VolumeDetectActive, m_scene.m_physicalPrim);
@ -534,11 +534,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
sp.RemoveAttachment(group); sp.RemoveAttachment(group);
// Prepare sog for storage // Prepare sog for storage
group.AttachedAvatar = UUID.Zero;
group.ForEachPart( group.ForEachPart(
delegate(SceneObjectPart part) delegate(SceneObjectPart part)
{ {
part.AttachedAvatar = UUID.Zero;
// If there are any scripts, // If there are any scripts,
// then always trigger a new object and state persistence in UpdateKnownItem() // then always trigger a new object and state persistence in UpdateKnownItem()
if (part.Inventory.ContainsScripts()) if (part.Inventory.ContainsScripts())
@ -656,12 +656,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
m_scene.DeleteFromStorage(so.UUID); m_scene.DeleteFromStorage(so.UUID);
m_scene.EventManager.TriggerParcelPrimCountTainted(); m_scene.EventManager.TriggerParcelPrimCountTainted();
so.RootPart.AttachedAvatar = avatar.UUID; so.AttachedAvatar = avatar.UUID;
//Anakin Lohner bug #3839
SceneObjectPart[] parts = so.Parts;
for (int i = 0; i < parts.Length; i++)
parts[i].AttachedAvatar = avatar.UUID;
if (so.RootPart.PhysActor != null) if (so.RootPart.PhysActor != null)
{ {

View File

@ -116,14 +116,13 @@ namespace OpenSim.Region.Framework.Scenes
return priority; return priority;
} }
private uint GetPriorityByTime(IClientAPI client, ISceneEntity entity) private uint GetPriorityByTime(IClientAPI client, ISceneEntity entity)
{ {
// And anything attached to this avatar gets top priority as well // And anything attached to this avatar gets top priority as well
if (entity is SceneObjectPart) if (entity is SceneObjectPart)
{ {
SceneObjectPart sop = (SceneObjectPart)entity; SceneObjectPart sop = (SceneObjectPart)entity;
if (sop.ParentGroup.RootPart.IsAttachment && client.AgentId == sop.ParentGroup.RootPart.AttachedAvatar) if (sop.ParentGroup.RootPart.IsAttachment && client.AgentId == sop.ParentGroup.AttachedAvatar)
return 1; return 1;
} }
@ -136,7 +135,7 @@ namespace OpenSim.Region.Framework.Scenes
if (entity is SceneObjectPart) if (entity is SceneObjectPart)
{ {
SceneObjectPart sop = (SceneObjectPart)entity; SceneObjectPart sop = (SceneObjectPart)entity;
if (sop.ParentGroup.RootPart.IsAttachment && client.AgentId == sop.ParentGroup.RootPart.AttachedAvatar) if (sop.ParentGroup.RootPart.IsAttachment && client.AgentId == sop.ParentGroup.AttachedAvatar)
return 1; return 1;
} }
@ -149,7 +148,7 @@ namespace OpenSim.Region.Framework.Scenes
if (entity is SceneObjectPart) if (entity is SceneObjectPart)
{ {
SceneObjectPart sop = (SceneObjectPart)entity; SceneObjectPart sop = (SceneObjectPart)entity;
if (sop.ParentGroup.RootPart.IsAttachment && client.AgentId == sop.ParentGroup.RootPart.AttachedAvatar) if (sop.ParentGroup.RootPart.IsAttachment && client.AgentId == sop.ParentGroup.AttachedAvatar)
return 1; return 1;
} }

View File

@ -168,6 +168,14 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
/// <summary>
/// The avatar to which this scene object is attached.
/// </summary>
/// <remarks>
/// If we're not attached to an avatar then this is UUID.Zero
/// </remarks>
public UUID AttachedAvatar { get; set; }
/// <summary> /// <summary>
/// Is this scene object phantom? /// Is this scene object phantom?
/// </summary> /// </summary>
@ -1540,7 +1548,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
if (IsAttachment) if (IsAttachment)
{ {
ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar); ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar);
if (avatar != null) if (avatar != null)
{ {
avatar.PushForce(impulse); avatar.PushForce(impulse);
@ -1622,7 +1630,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
if (IsAttachment) if (IsAttachment)
{ {
ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar); ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar);
if (avatar != null) if (avatar != null)
{ {
avatar.MoveToTarget(target, false); avatar.MoveToTarget(target, false);

View File

@ -221,9 +221,6 @@ namespace OpenSim.Region.Framework.Scenes
public scriptEvents AggregateScriptEvents; public scriptEvents AggregateScriptEvents;
public UUID AttachedAvatar;
public Vector3 AttachedPos; public Vector3 AttachedPos;
@ -728,7 +725,7 @@ namespace OpenSim.Region.Framework.Scenes
if (IsAttachment) if (IsAttachment)
{ {
ScenePresence sp = m_parentGroup.Scene.GetScenePresence(AttachedAvatar); ScenePresence sp = m_parentGroup.Scene.GetScenePresence(ParentGroup.AttachedAvatar);
if (sp != null) if (sp != null)
return sp.AbsolutePosition; return sp.AbsolutePosition;
} }

View File

@ -2099,7 +2099,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{ {
if (part.ParentGroup.RootPart.AttachmentPoint != 0) if (part.ParentGroup.RootPart.AttachmentPoint != 0)
{ {
ScenePresence avatar = World.GetScenePresence(part.AttachedAvatar); ScenePresence avatar = World.GetScenePresence(part.ParentGroup.AttachedAvatar);
if (avatar != null) if (avatar != null)
{ {
if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0)
@ -2243,7 +2243,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (m_host.IsAttachment) if (m_host.IsAttachment)
{ {
ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.AttachedAvatar); ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar);
vel = avatar.Velocity; vel = avatar.Velocity;
} }
else else
@ -3388,7 +3388,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
if (m_host.ParentGroup.IsAttachment && (UUID)agent == m_host.ParentGroup.RootPart.AttachedAvatar) if (m_host.ParentGroup.IsAttachment && (UUID)agent == m_host.ParentGroup.AttachedAvatar)
{ {
// When attached, certain permissions are implicit if requested from owner // When attached, certain permissions are implicit if requested from owner
int implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS | int implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS |
@ -7460,7 +7460,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
Quaternion q; Quaternion q;
if (m_host.ParentGroup.RootPart.AttachmentPoint != 0) if (m_host.ParentGroup.RootPart.AttachmentPoint != 0)
{ {
ScenePresence avatar = World.GetScenePresence(m_host.AttachedAvatar); ScenePresence avatar = World.GetScenePresence(m_host.ParentGroup.AttachedAvatar);
if (avatar != null) if (avatar != null)
if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0)
q = avatar.CameraRotation; // Mouselook q = avatar.CameraRotation; // Mouselook

View File

@ -308,7 +308,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
// In attachments, the sensor cone always orients with the // In attachments, the sensor cone always orients with the
// avatar rotation. This may include a nonzero elevation if // avatar rotation. This may include a nonzero elevation if
// in mouselook. // in mouselook.
ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.RootPart.AttachedAvatar); ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.AttachedAvatar);
q = avatar.Rotation; q = avatar.Rotation;
} }
LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W); LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
@ -428,7 +428,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
// In attachments, the sensor cone always orients with the // In attachments, the sensor cone always orients with the
// avatar rotation. This may include a nonzero elevation if // avatar rotation. This may include a nonzero elevation if
// in mouselook. // in mouselook.
ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.RootPart.AttachedAvatar); ScenePresence avatar = m_CmdManager.m_ScriptEngine.World.GetScenePresence(SensePoint.ParentGroup.AttachedAvatar);
q = avatar.Rotation; q = avatar.Rotation;
} }

View File

@ -233,7 +233,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
m_MaxScriptQueue = maxScriptQueue; m_MaxScriptQueue = maxScriptQueue;
m_stateSource = stateSource; m_stateSource = stateSource;
m_postOnRez = postOnRez; m_postOnRez = postOnRez;
m_AttachedAvatar = part.AttachedAvatar; m_AttachedAvatar = part.ParentGroup.AttachedAvatar;
m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID;
if (part != null) if (part != null)