aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs17
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs23
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs5
3 files changed, 35 insertions, 10 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index 05cdf61..4cf854e 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -180,12 +180,17 @@ namespace OpenSim.Region.Framework.Scenes.Animation
180 bool heldBack = ((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG || (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG); 180 bool heldBack = ((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG || (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG);
181 bool heldLeft = ((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS || (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS); 181 bool heldLeft = ((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS || (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS);
182 bool heldRight = ((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG || (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG); 182 bool heldRight = ((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG || (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG);
183 //bool heldTurnLeft = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT) == AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT; 183 bool heldTurnLeft = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT) == AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT;
184 //bool heldTurnRight = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT) == AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT; 184 bool heldTurnRight = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT) == AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT;
185 bool heldUp = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) == AgentManager.ControlFlags.AGENT_CONTROL_UP_POS; 185 bool heldUp = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) == AgentManager.ControlFlags.AGENT_CONTROL_UP_POS;
186 bool heldDown = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG; 186 bool heldDown = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG;
187 //bool flying = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) == AgentManager.ControlFlags.AGENT_CONTROL_FLY; 187 //bool flying = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) == AgentManager.ControlFlags.AGENT_CONTROL_FLY;
188 //bool mouselook = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) == AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK; 188 //bool mouselook = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) == AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK;
189 if (heldForward || heldBack || heldLeft || heldRight || heldUp || heldDown)
190 {
191 heldTurnLeft = false;
192 heldTurnRight = false;
193 }
189 194
190 // Direction in which the avatar is trying to move 195 // Direction in which the avatar is trying to move
191 Vector3 move = Vector3.Zero; 196 Vector3 move = Vector3.Zero;
@@ -363,10 +368,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation
363 // Not walking 368 // Not walking
364 if (move.Z < 0) 369 if (move.Z < 0)
365 return "CROUCH"; 370 return "CROUCH";
366// else if (heldTurnLeft) 371 else if (heldTurnLeft)
367// return "TURNLEFT"; 372 return "TURNLEFT";
368// else if (heldTurnRight) 373 else if (heldTurnRight)
369// return "TURNRIGHT"; 374 return "TURNRIGHT";
370 else 375 else
371 return "STAND"; 376 return "STAND";
372 } 377 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index b2e5dc3..743fd50 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -1661,6 +1661,13 @@ namespace OpenSim.Region.Framework.Scenes
1661 /// <param name="childPrims"></param> 1661 /// <param name="childPrims"></param>
1662 protected internal void LinkObjects(SceneObjectPart root, List<SceneObjectPart> children) 1662 protected internal void LinkObjects(SceneObjectPart root, List<SceneObjectPart> children)
1663 { 1663 {
1664 SceneObjectGroup parentGroup = root.ParentGroup;
1665 if (parentGroup == null) return;
1666
1667 // Cowardly refuse to link to a group owned root
1668 if (parentGroup.OwnerID == parentGroup.GroupID)
1669 return;
1670
1664 Monitor.Enter(m_updateLock); 1671 Monitor.Enter(m_updateLock);
1665 try 1672 try
1666 { 1673 {
@@ -1683,11 +1690,14 @@ namespace OpenSim.Region.Framework.Scenes
1683 1690
1684 foreach (SceneObjectGroup child in childGroups) 1691 foreach (SceneObjectGroup child in childGroups)
1685 { 1692 {
1686 parentGroup.LinkToGroup(child); 1693 if (parentGroup.OwnerID == child.OwnerID)
1694 {
1695 parentGroup.LinkToGroup(child);
1687 1696
1688 // this is here so physics gets updated! 1697 // this is here so physics gets updated!
1689 // Don't remove! Bad juju! Stay away! or fix physics! 1698 // Don't remove! Bad juju! Stay away! or fix physics!
1690 child.AbsolutePosition = child.AbsolutePosition; 1699 child.AbsolutePosition = child.AbsolutePosition;
1700 }
1691 } 1701 }
1692 1702
1693 // We need to explicitly resend the newly link prim's object properties since no other actions 1703 // We need to explicitly resend the newly link prim's object properties since no other actions
@@ -1725,9 +1735,14 @@ namespace OpenSim.Region.Framework.Scenes
1725 if (part.ParentGroup.PrimCount != 1) // Skip single 1735 if (part.ParentGroup.PrimCount != 1) // Skip single
1726 { 1736 {
1727 if (part.LinkNum < 2) // Root 1737 if (part.LinkNum < 2) // Root
1738 {
1728 rootParts.Add(part); 1739 rootParts.Add(part);
1740 }
1729 else 1741 else
1742 {
1743 part.LastOwnerID = part.ParentGroup.RootPart.LastOwnerID;
1730 childParts.Add(part); 1744 childParts.Add(part);
1745 }
1731 1746
1732 SceneObjectGroup group = part.ParentGroup; 1747 SceneObjectGroup group = part.ParentGroup;
1733 if (!affectedGroups.Contains(group)) 1748 if (!affectedGroups.Contains(group))
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index e662492..fdf944b 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1387,6 +1387,11 @@ namespace OpenSim.Region.Framework.Scenes
1387 if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0) 1387 if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0)
1388 m_updateCount = UPDATE_COUNT; 1388 m_updateCount = UPDATE_COUNT;
1389 1389
1390 // Make turning in place work
1391 if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0 ||
1392 (flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0)
1393 m_updateCount = UPDATE_COUNT;
1394
1390 if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0) 1395 if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0)
1391 { 1396 {
1392 StandUp(); 1397 StandUp();