diff options
fixed the bug where changing the rotation of a selection of prims in a linkset, made each of those prims rotate around its own centre rather than around the geometric centre of the selection like they should do (and like the client expects).
This involved adding a new OnUpdatePrimSingleRotationPosition event to IClientAPI so that we can get the changed position from the client.
Btw adding new events to IClientAPI is really tedious where you have to copy the change across to at least 5 or 6 other files.
[Note this doesn't fix the bug where any rotation changes to the root prim (but not the whole linkset) cause rotation errors on the child prims.]
11 files changed, 109 insertions, 12 deletions
diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs index df1b4a3..d8980c1 100644 --- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs +++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs | |||
@@ -624,6 +624,7 @@ namespace OpenSim.Client.MXP.ClientStack | |||
624 | public event UpdateVector OnUpdatePrimGroupPosition; | 624 | public event UpdateVector OnUpdatePrimGroupPosition; |
625 | public event UpdateVector OnUpdatePrimSinglePosition; | 625 | public event UpdateVector OnUpdatePrimSinglePosition; |
626 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; | 626 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; |
627 | public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition; | ||
627 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; | 628 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; |
628 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; | 629 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; |
629 | public event UpdateVector OnUpdatePrimScale; | 630 | public event UpdateVector OnUpdatePrimScale; |
diff --git a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs index c0c7625..4570395 100644 --- a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs +++ b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs | |||
@@ -272,6 +272,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack | |||
272 | public event UpdateVector OnUpdatePrimSinglePosition = delegate { }; | 272 | public event UpdateVector OnUpdatePrimSinglePosition = delegate { }; |
273 | public event UpdatePrimRotation OnUpdatePrimGroupRotation = delegate { }; | 273 | public event UpdatePrimRotation OnUpdatePrimGroupRotation = delegate { }; |
274 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation = delegate { }; | 274 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation = delegate { }; |
275 | public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition = delegate { }; | ||
275 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation = delegate { }; | 276 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation = delegate { }; |
276 | public event UpdateVector OnUpdatePrimScale = delegate { }; | 277 | public event UpdateVector OnUpdatePrimScale = delegate { }; |
277 | public event UpdateVector OnUpdatePrimGroupScale = delegate { }; | 278 | public event UpdateVector OnUpdatePrimGroupScale = delegate { }; |
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index efde5ce..fea0cea 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -129,6 +129,8 @@ namespace OpenSim.Framework | |||
129 | 129 | ||
130 | public delegate void UpdatePrimSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient); | 130 | public delegate void UpdatePrimSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient); |
131 | 131 | ||
132 | public delegate void UpdatePrimSingleRotationPosition( uint localID, Quaternion rot, Vector3 pos, IClientAPI remoteClient); | ||
133 | |||
132 | public delegate void UpdatePrimGroupRotation(uint localID, Vector3 pos, Quaternion rot, IClientAPI remoteClient); | 134 | public delegate void UpdatePrimGroupRotation(uint localID, Vector3 pos, Quaternion rot, IClientAPI remoteClient); |
133 | 135 | ||
134 | public delegate void ObjectDuplicate(uint localID, Vector3 offset, uint dupeFlags, UUID AgentID, UUID GroupID); | 136 | public delegate void ObjectDuplicate(uint localID, Vector3 offset, uint dupeFlags, UUID AgentID, UUID GroupID); |
@@ -633,6 +635,7 @@ namespace OpenSim.Framework | |||
633 | event UpdateVector OnUpdatePrimSinglePosition; | 635 | event UpdateVector OnUpdatePrimSinglePosition; |
634 | event UpdatePrimRotation OnUpdatePrimGroupRotation; | 636 | event UpdatePrimRotation OnUpdatePrimGroupRotation; |
635 | event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; | 637 | event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; |
638 | event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition; | ||
636 | event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; | 639 | event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; |
637 | event UpdateVector OnUpdatePrimScale; | 640 | event UpdateVector OnUpdatePrimScale; |
638 | event UpdateVector OnUpdatePrimGroupScale; | 641 | event UpdateVector OnUpdatePrimGroupScale; |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 3fdb386..a13f6d4 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -267,6 +267,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
267 | 267 | ||
268 | private UpdateVector handlerUpdatePrimSinglePosition; //OnUpdatePrimSinglePosition; | 268 | private UpdateVector handlerUpdatePrimSinglePosition; //OnUpdatePrimSinglePosition; |
269 | private UpdatePrimSingleRotation handlerUpdatePrimSingleRotation; //OnUpdatePrimSingleRotation; | 269 | private UpdatePrimSingleRotation handlerUpdatePrimSingleRotation; //OnUpdatePrimSingleRotation; |
270 | private UpdatePrimSingleRotationPosition handlerUpdatePrimSingleRotationPosition; //OnUpdatePrimSingleRotation; | ||
270 | private UpdateVector handlerUpdatePrimScale; //OnUpdatePrimScale; | 271 | private UpdateVector handlerUpdatePrimScale; //OnUpdatePrimScale; |
271 | private UpdateVector handlerUpdatePrimGroupScale; //OnUpdateGroupScale; | 272 | private UpdateVector handlerUpdatePrimGroupScale; //OnUpdateGroupScale; |
272 | private UpdateVector handlerUpdateVector; //OnUpdatePrimGroupPosition; | 273 | private UpdateVector handlerUpdateVector; //OnUpdatePrimGroupPosition; |
@@ -1095,6 +1096,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1095 | public event UpdateVector OnUpdatePrimSinglePosition; | 1096 | public event UpdateVector OnUpdatePrimSinglePosition; |
1096 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; | 1097 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; |
1097 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; | 1098 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; |
1099 | public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition; | ||
1098 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; | 1100 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; |
1099 | public event UpdateVector OnUpdatePrimScale; | 1101 | public event UpdateVector OnUpdatePrimScale; |
1100 | public event UpdateVector OnUpdatePrimGroupScale; | 1102 | public event UpdateVector OnUpdatePrimGroupScale; |
@@ -4481,18 +4483,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4481 | handlerUpdatePrimSingleRotation = OnUpdatePrimSingleRotation; | 4483 | handlerUpdatePrimSingleRotation = OnUpdatePrimSingleRotation; |
4482 | if (handlerUpdatePrimSingleRotation != null) | 4484 | if (handlerUpdatePrimSingleRotation != null) |
4483 | { | 4485 | { |
4484 | //m_log.Debug("new tab rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); | 4486 | // m_log.Info("new tab rotation is " + rot1.X + " , " + rot1.Y + " , " + rot1.Z + " , " + rot1.W); |
4485 | handlerUpdatePrimSingleRotation(localId, rot1, this); | 4487 | handlerUpdatePrimSingleRotation(localId, rot1, this); |
4486 | } | 4488 | } |
4487 | break; | 4489 | break; |
4488 | case 3: | 4490 | case 3: |
4489 | 4491 | Vector3 rotPos = new Vector3(block.Data, 0); | |
4490 | Quaternion rot2 = new Quaternion(block.Data, 12, true); | 4492 | Quaternion rot2 = new Quaternion(block.Data, 12, true); |
4491 | handlerUpdatePrimSingleRotation = OnUpdatePrimSingleRotation; | 4493 | |
4492 | if (handlerUpdatePrimSingleRotation != null) | 4494 | handlerUpdatePrimSingleRotationPosition = OnUpdatePrimSingleRotationPosition; |
4495 | if (handlerUpdatePrimSingleRotationPosition != null) | ||
4493 | { | 4496 | { |
4494 | //m_log.Debug("new mouse rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); | 4497 | // m_log.Debug("new mouse rotation position is " + rotPos.X + " , " + rotPos.Y + " , " + rotPos.Z); |
4495 | handlerUpdatePrimSingleRotation(localId, rot2, this); | 4498 | // m_log.Info("new mouse rotation is " + rot2.X + " , " + rot2.Y + " , " + rot2.Z + " , " + rot2.W); |
4499 | handlerUpdatePrimSingleRotationPosition(localId, rot2, rotPos, this); | ||
4496 | } | 4500 | } |
4497 | break; | 4501 | break; |
4498 | case 4: | 4502 | case 4: |
@@ -4541,7 +4545,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4541 | handlerUpdatePrimRotation = OnUpdatePrimGroupRotation; | 4545 | handlerUpdatePrimRotation = OnUpdatePrimGroupRotation; |
4542 | if (handlerUpdatePrimRotation != null) | 4546 | if (handlerUpdatePrimRotation != null) |
4543 | { | 4547 | { |
4544 | // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); | 4548 | // Console.WriteLine("new rotation is " + rot3.X + " , " + rot3.Y + " , " + rot3.Z + " , " + rot3.W); |
4545 | handlerUpdatePrimRotation(localId, rot3, this); | 4549 | handlerUpdatePrimRotation(localId, rot3, this); |
4546 | } | 4550 | } |
4547 | break; | 4551 | break; |
@@ -4552,8 +4556,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4552 | handlerUpdatePrimGroupRotation = OnUpdatePrimGroupMouseRotation; | 4556 | handlerUpdatePrimGroupRotation = OnUpdatePrimGroupMouseRotation; |
4553 | if (handlerUpdatePrimGroupRotation != null) | 4557 | if (handlerUpdatePrimGroupRotation != null) |
4554 | { | 4558 | { |
4555 | //m_log.Debug("new rotation position is " + pos.X + " , " + pos.Y + " , " + pos.Z); | 4559 | // m_log.Debug("new rotation position is " + pos.X + " , " + pos.Y + " , " + pos.Z); |
4556 | // m_log.Debug("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); | 4560 | // m_log.Debug("new group mouse rotation is " + rot4.X + " , " + rot4.Y + " , " + rot4.Z + " , " + rot4.W); |
4557 | handlerUpdatePrimGroupRotation(localId, pos3, rot4, this); | 4561 | handlerUpdatePrimGroupRotation(localId, pos3, rot4, this); |
4558 | } | 4562 | } |
4559 | break; | 4563 | break; |
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 5e33729..ed38046 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | |||
@@ -117,6 +117,7 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
117 | public event UpdateVector OnUpdatePrimGroupPosition; | 117 | public event UpdateVector OnUpdatePrimGroupPosition; |
118 | public event UpdateVector OnUpdatePrimSinglePosition; | 118 | public event UpdateVector OnUpdatePrimSinglePosition; |
119 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; | 119 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; |
120 | public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition; | ||
120 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; | 121 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; |
121 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; | 122 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; |
122 | public event UpdateVector OnUpdatePrimScale; | 123 | public event UpdateVector OnUpdatePrimScale; |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 81d54e7..63cf9ce 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -1964,6 +1964,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1964 | client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation; | 1964 | client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation; |
1965 | client.OnUpdatePrimGroupMouseRotation += m_sceneGraph.UpdatePrimRotation; | 1965 | client.OnUpdatePrimGroupMouseRotation += m_sceneGraph.UpdatePrimRotation; |
1966 | client.OnUpdatePrimSingleRotation += m_sceneGraph.UpdatePrimSingleRotation; | 1966 | client.OnUpdatePrimSingleRotation += m_sceneGraph.UpdatePrimSingleRotation; |
1967 | client.OnUpdatePrimSingleRotationPosition += m_sceneGraph.UpdatePrimSingleRotationPosition; | ||
1967 | client.OnUpdatePrimScale += m_sceneGraph.UpdatePrimScale; | 1968 | client.OnUpdatePrimScale += m_sceneGraph.UpdatePrimScale; |
1968 | client.OnUpdatePrimGroupScale += m_sceneGraph.UpdatePrimGroupScale; | 1969 | client.OnUpdatePrimGroupScale += m_sceneGraph.UpdatePrimGroupScale; |
1969 | client.OnUpdateExtraParams += m_sceneGraph.UpdateExtraParam; | 1970 | client.OnUpdateExtraParams += m_sceneGraph.UpdateExtraParam; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 62870d5..3f63481 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -1207,6 +1207,25 @@ namespace OpenSim.Region.Framework.Scenes | |||
1207 | /// <param name="localID"></param> | 1207 | /// <param name="localID"></param> |
1208 | /// <param name="rot"></param> | 1208 | /// <param name="rot"></param> |
1209 | /// <param name="remoteClient"></param> | 1209 | /// <param name="remoteClient"></param> |
1210 | protected internal void UpdatePrimSingleRotationPosition(uint localID, Quaternion rot, Vector3 pos, IClientAPI remoteClient) | ||
1211 | { | ||
1212 | SceneObjectGroup group = GetGroupByPrim(localID); | ||
1213 | if (group != null) | ||
1214 | { | ||
1215 | if (m_parentScene.Permissions.CanMoveObject(group.UUID, remoteClient.AgentId)) | ||
1216 | { | ||
1217 | group.UpdateSingleRotation(rot,pos, localID); | ||
1218 | } | ||
1219 | } | ||
1220 | } | ||
1221 | |||
1222 | |||
1223 | /// <summary> | ||
1224 | /// | ||
1225 | /// </summary> | ||
1226 | /// <param name="localID"></param> | ||
1227 | /// <param name="rot"></param> | ||
1228 | /// <param name="remoteClient"></param> | ||
1210 | protected internal void UpdatePrimRotation(uint localID, Quaternion rot, IClientAPI remoteClient) | 1229 | protected internal void UpdatePrimRotation(uint localID, Quaternion rot, IClientAPI remoteClient) |
1211 | { | 1230 | { |
1212 | SceneObjectGroup group = GetGroupByPrim(localID); | 1231 | SceneObjectGroup group = GetGroupByPrim(localID); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index e987445..00ae504 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -625,6 +625,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
625 | Vector3 backBottomLeft; | 625 | Vector3 backBottomLeft; |
626 | Vector3 backBottomRight; | 626 | Vector3 backBottomRight; |
627 | 627 | ||
628 | // Vector3[] corners = new Vector3[8]; | ||
629 | |||
628 | Vector3 orig = Vector3.Zero; | 630 | Vector3 orig = Vector3.Zero; |
629 | 631 | ||
630 | frontTopLeft.X = orig.X - (part.Scale.X / 2); | 632 | frontTopLeft.X = orig.X - (part.Scale.X / 2); |
@@ -660,6 +662,36 @@ namespace OpenSim.Region.Framework.Scenes | |||
660 | backBottomRight.Y = orig.Y + (part.Scale.Y / 2); | 662 | backBottomRight.Y = orig.Y + (part.Scale.Y / 2); |
661 | backBottomRight.Z = orig.Z - (part.Scale.Z / 2); | 663 | backBottomRight.Z = orig.Z - (part.Scale.Z / 2); |
662 | 664 | ||
665 | //m_log.InfoFormat("pre corner 1 is {0} {1} {2}", frontTopLeft.X, frontTopLeft.Y, frontTopLeft.Z); | ||
666 | //m_log.InfoFormat("pre corner 2 is {0} {1} {2}", frontTopRight.X, frontTopRight.Y, frontTopRight.Z); | ||
667 | //m_log.InfoFormat("pre corner 3 is {0} {1} {2}", frontBottomRight.X, frontBottomRight.Y, frontBottomRight.Z); | ||
668 | //m_log.InfoFormat("pre corner 4 is {0} {1} {2}", frontBottomLeft.X, frontBottomLeft.Y, frontBottomLeft.Z); | ||
669 | //m_log.InfoFormat("pre corner 5 is {0} {1} {2}", backTopLeft.X, backTopLeft.Y, backTopLeft.Z); | ||
670 | //m_log.InfoFormat("pre corner 6 is {0} {1} {2}", backTopRight.X, backTopRight.Y, backTopRight.Z); | ||
671 | //m_log.InfoFormat("pre corner 7 is {0} {1} {2}", backBottomRight.X, backBottomRight.Y, backBottomRight.Z); | ||
672 | //m_log.InfoFormat("pre corner 8 is {0} {1} {2}", backBottomLeft.X, backBottomLeft.Y, backBottomLeft.Z); | ||
673 | |||
674 | //for (int i = 0; i < 8; i++) | ||
675 | //{ | ||
676 | // corners[i] = corners[i] * worldRot; | ||
677 | // corners[i] += offset; | ||
678 | |||
679 | // if (corners[i].X > maxX) | ||
680 | // maxX = corners[i].X; | ||
681 | // if (corners[i].X < minX) | ||
682 | // minX = corners[i].X; | ||
683 | |||
684 | // if (corners[i].Y > maxY) | ||
685 | // maxY = corners[i].Y; | ||
686 | // if (corners[i].Y < minY) | ||
687 | // minY = corners[i].Y; | ||
688 | |||
689 | // if (corners[i].Z > maxZ) | ||
690 | // maxZ = corners[i].Y; | ||
691 | // if (corners[i].Z < minZ) | ||
692 | // minZ = corners[i].Z; | ||
693 | //} | ||
694 | |||
663 | frontTopLeft = frontTopLeft * worldRot; | 695 | frontTopLeft = frontTopLeft * worldRot; |
664 | frontTopRight = frontTopRight * worldRot; | 696 | frontTopRight = frontTopRight * worldRot; |
665 | frontBottomLeft = frontBottomLeft * worldRot; | 697 | frontBottomLeft = frontBottomLeft * worldRot; |
@@ -681,6 +713,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
681 | backTopLeft += offset; | 713 | backTopLeft += offset; |
682 | backTopRight += offset; | 714 | backTopRight += offset; |
683 | 715 | ||
716 | //m_log.InfoFormat("corner 1 is {0} {1} {2}", frontTopLeft.X, frontTopLeft.Y, frontTopLeft.Z); | ||
717 | //m_log.InfoFormat("corner 2 is {0} {1} {2}", frontTopRight.X, frontTopRight.Y, frontTopRight.Z); | ||
718 | //m_log.InfoFormat("corner 3 is {0} {1} {2}", frontBottomRight.X, frontBottomRight.Y, frontBottomRight.Z); | ||
719 | //m_log.InfoFormat("corner 4 is {0} {1} {2}", frontBottomLeft.X, frontBottomLeft.Y, frontBottomLeft.Z); | ||
720 | //m_log.InfoFormat("corner 5 is {0} {1} {2}", backTopLeft.X, backTopLeft.Y, backTopLeft.Z); | ||
721 | //m_log.InfoFormat("corner 6 is {0} {1} {2}", backTopRight.X, backTopRight.Y, backTopRight.Z); | ||
722 | //m_log.InfoFormat("corner 7 is {0} {1} {2}", backBottomRight.X, backBottomRight.Y, backBottomRight.Z); | ||
723 | //m_log.InfoFormat("corner 8 is {0} {1} {2}", backBottomLeft.X, backBottomLeft.Y, backBottomLeft.Z); | ||
724 | |||
684 | if (frontTopRight.X > maxX) | 725 | if (frontTopRight.X > maxX) |
685 | maxX = frontTopRight.X; | 726 | maxX = frontTopRight.X; |
686 | if (frontTopLeft.X > maxX) | 727 | if (frontTopLeft.X > maxX) |
@@ -801,15 +842,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
801 | if (lower > maxZ) | 842 | if (lower > maxZ) |
802 | { | 843 | { |
803 | offsetHeight = lower - (boundingBox.Z / 2); | 844 | offsetHeight = lower - (boundingBox.Z / 2); |
804 | 845 | ||
805 | } | 846 | } |
806 | else if (maxZ > lower) | 847 | else if (maxZ > lower) |
807 | { | 848 | { |
808 | offsetHeight = maxZ - (boundingBox.Z / 2); | 849 | offsetHeight = maxZ - (boundingBox.Z / 2); |
809 | offsetHeight *= -1; | 850 | offsetHeight *= -1; |
810 | } | 851 | } |
811 | 852 | ||
812 | // m_log.InfoFormat("BoundingBox is {0} , {1} , {2} ", boundingBox.X, boundingBox.Y, boundingBox.Z); | 853 | // m_log.InfoFormat("BoundingBox is {0} , {1} , {2} ", boundingBox.X, boundingBox.Y, boundingBox.Z); |
813 | return boundingBox; | 854 | return boundingBox; |
814 | } | 855 | } |
815 | #endregion | 856 | #endregion |
@@ -3017,6 +3058,29 @@ namespace OpenSim.Region.Framework.Scenes | |||
3017 | /// | 3058 | /// |
3018 | /// </summary> | 3059 | /// </summary> |
3019 | /// <param name="rot"></param> | 3060 | /// <param name="rot"></param> |
3061 | /// <param name="localID"></param> | ||
3062 | public void UpdateSingleRotation(Quaternion rot, Vector3 pos, uint localID) | ||
3063 | { | ||
3064 | SceneObjectPart part = GetChildPart(localID); | ||
3065 | if (part != null) | ||
3066 | { | ||
3067 | if (part.UUID == m_rootPart.UUID) | ||
3068 | { | ||
3069 | UpdateRootRotation(rot); | ||
3070 | AbsolutePosition = pos; | ||
3071 | } | ||
3072 | else | ||
3073 | { | ||
3074 | part.UpdateRotation(rot); | ||
3075 | part.OffsetPosition = pos; | ||
3076 | } | ||
3077 | } | ||
3078 | } | ||
3079 | |||
3080 | /// <summary> | ||
3081 | /// | ||
3082 | /// </summary> | ||
3083 | /// <param name="rot"></param> | ||
3020 | private void UpdateRootRotation(Quaternion rot) | 3084 | private void UpdateRootRotation(Quaternion rot) |
3021 | { | 3085 | { |
3022 | Quaternion axRot = rot; | 3086 | Quaternion axRot = rot; |
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 8ec1780..776e972 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -699,6 +699,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
699 | public event UpdateVector OnUpdatePrimSinglePosition; | 699 | public event UpdateVector OnUpdatePrimSinglePosition; |
700 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; | 700 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; |
701 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; | 701 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; |
702 | public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition; | ||
702 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; | 703 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; |
703 | public event UpdateVector OnUpdatePrimScale; | 704 | public event UpdateVector OnUpdatePrimScale; |
704 | public event UpdateVector OnUpdatePrimGroupScale; | 705 | public event UpdateVector OnUpdatePrimGroupScale; |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 228683e..a1ed6ee 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -223,6 +223,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
223 | public event UpdateVector OnUpdatePrimGroupPosition; | 223 | public event UpdateVector OnUpdatePrimGroupPosition; |
224 | public event UpdateVector OnUpdatePrimSinglePosition; | 224 | public event UpdateVector OnUpdatePrimSinglePosition; |
225 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; | 225 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; |
226 | public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition; | ||
226 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; | 227 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; |
227 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; | 228 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; |
228 | public event UpdateVector OnUpdatePrimScale; | 229 | public event UpdateVector OnUpdatePrimScale; |
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index c76d180..21541e1 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs | |||
@@ -130,6 +130,7 @@ namespace OpenSim.Tests.Common.Mock | |||
130 | public event UpdateVector OnUpdatePrimSinglePosition; | 130 | public event UpdateVector OnUpdatePrimSinglePosition; |
131 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; | 131 | public event UpdatePrimRotation OnUpdatePrimGroupRotation; |
132 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; | 132 | public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; |
133 | public event UpdatePrimSingleRotationPosition OnUpdatePrimSingleRotationPosition; | ||
133 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; | 134 | public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation; |
134 | public event UpdateVector OnUpdatePrimScale; | 135 | public event UpdateVector OnUpdatePrimScale; |
135 | public event UpdateVector OnUpdatePrimGroupScale; | 136 | public event UpdateVector OnUpdatePrimGroupScale; |