diff options
author | Justin Clark-Casey (justincc) | 2010-02-16 19:08:06 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2010-02-16 19:08:06 +0000 |
commit | 4c90ee29432539efbf5942010dd574822235ed57 (patch) | |
tree | d159f72df97dfef5719221301009e90f375f2ef2 /OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |
parent | minor: Make SOG.DelinkFromGroup() return the newly delinked scene object inst... (diff) | |
parent | Formatting cleanup. (diff) | |
download | opensim-SC-4c90ee29432539efbf5942010dd574822235ed57.zip opensim-SC-4c90ee29432539efbf5942010dd574822235ed57.tar.gz opensim-SC-4c90ee29432539efbf5942010dd574822235ed57.tar.bz2 opensim-SC-4c90ee29432539efbf5942010dd574822235ed57.tar.xz |
Merge branch 'master' of ssh://justincc@opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 139 |
1 files changed, 104 insertions, 35 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 94e64e4..6357192 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -298,7 +298,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
298 | { | 298 | { |
299 | m_scene.CrossPrimGroupIntoNewRegion(val, this, true); | 299 | m_scene.CrossPrimGroupIntoNewRegion(val, this, true); |
300 | } | 300 | } |
301 | 301 | if (RootPart.GetStatusSandbox()) | |
302 | { | ||
303 | if (Util.GetDistanceTo(RootPart.StatusSandboxPos, value) > 10) | ||
304 | { | ||
305 | RootPart.ScriptSetPhysicsStatus(false); | ||
306 | Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), | ||
307 | ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false); | ||
308 | return; | ||
309 | } | ||
310 | } | ||
302 | lock (m_parts) | 311 | lock (m_parts) |
303 | { | 312 | { |
304 | foreach (SceneObjectPart part in m_parts.Values) | 313 | foreach (SceneObjectPart part in m_parts.Values) |
@@ -398,6 +407,34 @@ namespace OpenSim.Region.Framework.Scenes | |||
398 | } | 407 | } |
399 | } | 408 | } |
400 | 409 | ||
410 | private SceneObjectPart m_PlaySoundMasterPrim = null; | ||
411 | public SceneObjectPart PlaySoundMasterPrim | ||
412 | { | ||
413 | get { return m_PlaySoundMasterPrim; } | ||
414 | set { m_PlaySoundMasterPrim = value; } | ||
415 | } | ||
416 | |||
417 | private List<SceneObjectPart> m_PlaySoundSlavePrims = new List<SceneObjectPart>(); | ||
418 | public List<SceneObjectPart> PlaySoundSlavePrims | ||
419 | { | ||
420 | get { return m_LoopSoundSlavePrims; } | ||
421 | set { m_LoopSoundSlavePrims = value; } | ||
422 | } | ||
423 | |||
424 | private SceneObjectPart m_LoopSoundMasterPrim = null; | ||
425 | public SceneObjectPart LoopSoundMasterPrim | ||
426 | { | ||
427 | get { return m_LoopSoundMasterPrim; } | ||
428 | set { m_LoopSoundMasterPrim = value; } | ||
429 | } | ||
430 | |||
431 | private List<SceneObjectPart> m_LoopSoundSlavePrims = new List<SceneObjectPart>(); | ||
432 | public List<SceneObjectPart> LoopSoundSlavePrims | ||
433 | { | ||
434 | get { return m_LoopSoundSlavePrims; } | ||
435 | set { m_LoopSoundSlavePrims = value; } | ||
436 | } | ||
437 | |||
401 | // The UUID for the Region this Object is in. | 438 | // The UUID for the Region this Object is in. |
402 | public UUID RegionUUID | 439 | public UUID RegionUUID |
403 | { | 440 | { |
@@ -1782,32 +1819,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1782 | } | 1819 | } |
1783 | } | 1820 | } |
1784 | 1821 | ||
1785 | public void rotLookAt(Quaternion target, float strength, float damping) | ||
1786 | { | ||
1787 | SceneObjectPart rootpart = m_rootPart; | ||
1788 | if (rootpart != null) | ||
1789 | { | ||
1790 | if (IsAttachment) | ||
1791 | { | ||
1792 | /* | ||
1793 | ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar); | ||
1794 | if (avatar != null) | ||
1795 | { | ||
1796 | Rotate the Av? | ||
1797 | } */ | ||
1798 | } | ||
1799 | else | ||
1800 | { | ||
1801 | if (rootpart.PhysActor != null) | ||
1802 | { | ||
1803 | rootpart.PhysActor.APIDTarget = new Quaternion(target.X, target.Y, target.Z, target.W); | ||
1804 | rootpart.PhysActor.APIDStrength = strength; | ||
1805 | rootpart.PhysActor.APIDDamping = damping; | ||
1806 | rootpart.PhysActor.APIDActive = true; | ||
1807 | } | ||
1808 | } | ||
1809 | } | ||
1810 | } | ||
1811 | public void stopLookAt() | 1822 | public void stopLookAt() |
1812 | { | 1823 | { |
1813 | SceneObjectPart rootpart = m_rootPart; | 1824 | SceneObjectPart rootpart = m_rootPart; |
@@ -1966,6 +1977,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1966 | 1977 | ||
1967 | foreach (SceneObjectPart part in m_parts.Values) | 1978 | foreach (SceneObjectPart part in m_parts.Values) |
1968 | { | 1979 | { |
1980 | if (!IsSelected) | ||
1981 | part.UpdateLookAt(); | ||
1969 | part.SendScheduledUpdates(); | 1982 | part.SendScheduledUpdates(); |
1970 | } | 1983 | } |
1971 | } | 1984 | } |
@@ -2467,11 +2480,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
2467 | { | 2480 | { |
2468 | if (m_rootPart.PhysActor.IsPhysical) | 2481 | if (m_rootPart.PhysActor.IsPhysical) |
2469 | { | 2482 | { |
2470 | Vector3 llmoveforce = pos - AbsolutePosition; | 2483 | if (!m_rootPart.BlockGrab) |
2471 | Vector3 grabforce = llmoveforce; | 2484 | { |
2472 | grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass; | 2485 | Vector3 llmoveforce = pos - AbsolutePosition; |
2473 | m_rootPart.PhysActor.AddForce(grabforce,true); | 2486 | Vector3 grabforce = llmoveforce; |
2474 | m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); | 2487 | grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass; |
2488 | m_rootPart.PhysActor.AddForce(grabforce, true); | ||
2489 | m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); | ||
2490 | } | ||
2475 | } | 2491 | } |
2476 | else | 2492 | else |
2477 | { | 2493 | { |
@@ -2827,6 +2843,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2827 | SceneObjectPart part = GetChildPart(localID); | 2843 | SceneObjectPart part = GetChildPart(localID); |
2828 | if (part != null) | 2844 | if (part != null) |
2829 | { | 2845 | { |
2846 | part.IgnoreUndoUpdate = true; | ||
2830 | if (scale.X > m_scene.m_maxNonphys) | 2847 | if (scale.X > m_scene.m_maxNonphys) |
2831 | scale.X = m_scene.m_maxNonphys; | 2848 | scale.X = m_scene.m_maxNonphys; |
2832 | if (scale.Y > m_scene.m_maxNonphys) | 2849 | if (scale.Y > m_scene.m_maxNonphys) |
@@ -2854,6 +2871,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2854 | { | 2871 | { |
2855 | if (obPart.UUID != m_rootPart.UUID) | 2872 | if (obPart.UUID != m_rootPart.UUID) |
2856 | { | 2873 | { |
2874 | obPart.IgnoreUndoUpdate = true; | ||
2857 | Vector3 oldSize = new Vector3(obPart.Scale); | 2875 | Vector3 oldSize = new Vector3(obPart.Scale); |
2858 | 2876 | ||
2859 | float f = 1.0f; | 2877 | float f = 1.0f; |
@@ -2913,6 +2931,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2913 | z *= a; | 2931 | z *= a; |
2914 | } | 2932 | } |
2915 | } | 2933 | } |
2934 | obPart.IgnoreUndoUpdate = false; | ||
2935 | obPart.StoreUndoState(); | ||
2916 | } | 2936 | } |
2917 | } | 2937 | } |
2918 | } | 2938 | } |
@@ -2928,6 +2948,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2928 | { | 2948 | { |
2929 | foreach (SceneObjectPart obPart in m_parts.Values) | 2949 | foreach (SceneObjectPart obPart in m_parts.Values) |
2930 | { | 2950 | { |
2951 | obPart.IgnoreUndoUpdate = true; | ||
2931 | if (obPart.UUID != m_rootPart.UUID) | 2952 | if (obPart.UUID != m_rootPart.UUID) |
2932 | { | 2953 | { |
2933 | Vector3 currentpos = new Vector3(obPart.OffsetPosition); | 2954 | Vector3 currentpos = new Vector3(obPart.OffsetPosition); |
@@ -2941,6 +2962,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2941 | obPart.Resize(newSize); | 2962 | obPart.Resize(newSize); |
2942 | obPart.UpdateOffSet(currentpos); | 2963 | obPart.UpdateOffSet(currentpos); |
2943 | } | 2964 | } |
2965 | obPart.IgnoreUndoUpdate = false; | ||
2966 | obPart.StoreUndoState(); | ||
2944 | } | 2967 | } |
2945 | } | 2968 | } |
2946 | 2969 | ||
@@ -2950,6 +2973,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2950 | m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor); | 2973 | m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor); |
2951 | } | 2974 | } |
2952 | 2975 | ||
2976 | part.IgnoreUndoUpdate = false; | ||
2977 | part.StoreUndoState(); | ||
2953 | HasGroupChanged = true; | 2978 | HasGroupChanged = true; |
2954 | ScheduleGroupForTerseUpdate(); | 2979 | ScheduleGroupForTerseUpdate(); |
2955 | } | 2980 | } |
@@ -2965,13 +2990,26 @@ namespace OpenSim.Region.Framework.Scenes | |||
2965 | /// <param name="pos"></param> | 2990 | /// <param name="pos"></param> |
2966 | public void UpdateGroupPosition(Vector3 pos) | 2991 | public void UpdateGroupPosition(Vector3 pos) |
2967 | { | 2992 | { |
2993 | foreach (SceneObjectPart part in Children.Values) | ||
2994 | { | ||
2995 | part.StoreUndoState(); | ||
2996 | } | ||
2968 | if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) | 2997 | if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) |
2969 | { | 2998 | { |
2970 | if (IsAttachment) | 2999 | if (IsAttachment) |
2971 | { | 3000 | { |
2972 | m_rootPart.AttachedPos = pos; | 3001 | m_rootPart.AttachedPos = pos; |
2973 | } | 3002 | } |
2974 | 3003 | if (RootPart.GetStatusSandbox()) | |
3004 | { | ||
3005 | if (Util.GetDistanceTo(RootPart.StatusSandboxPos, pos) > 10) | ||
3006 | { | ||
3007 | RootPart.ScriptSetPhysicsStatus(false); | ||
3008 | pos = AbsolutePosition; | ||
3009 | Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"), | ||
3010 | ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false); | ||
3011 | } | ||
3012 | } | ||
2975 | AbsolutePosition = pos; | 3013 | AbsolutePosition = pos; |
2976 | 3014 | ||
2977 | HasGroupChanged = true; | 3015 | HasGroupChanged = true; |
@@ -2990,7 +3028,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2990 | public void UpdateSinglePosition(Vector3 pos, uint localID) | 3028 | public void UpdateSinglePosition(Vector3 pos, uint localID) |
2991 | { | 3029 | { |
2992 | SceneObjectPart part = GetChildPart(localID); | 3030 | SceneObjectPart part = GetChildPart(localID); |
2993 | 3031 | foreach (SceneObjectPart parts in Children.Values) | |
3032 | { | ||
3033 | parts.StoreUndoState(); | ||
3034 | } | ||
2994 | if (part != null) | 3035 | if (part != null) |
2995 | { | 3036 | { |
2996 | if (part.UUID == m_rootPart.UUID) | 3037 | if (part.UUID == m_rootPart.UUID) |
@@ -3012,6 +3053,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3012 | /// <param name="pos"></param> | 3053 | /// <param name="pos"></param> |
3013 | private void UpdateRootPosition(Vector3 pos) | 3054 | private void UpdateRootPosition(Vector3 pos) |
3014 | { | 3055 | { |
3056 | foreach (SceneObjectPart part in Children.Values) | ||
3057 | { | ||
3058 | part.StoreUndoState(); | ||
3059 | } | ||
3015 | Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); | 3060 | Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); |
3016 | Vector3 oldPos = | 3061 | Vector3 oldPos = |
3017 | new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, | 3062 | new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, |
@@ -3055,6 +3100,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3055 | /// <param name="rot"></param> | 3100 | /// <param name="rot"></param> |
3056 | public void UpdateGroupRotationR(Quaternion rot) | 3101 | public void UpdateGroupRotationR(Quaternion rot) |
3057 | { | 3102 | { |
3103 | foreach (SceneObjectPart parts in Children.Values) | ||
3104 | { | ||
3105 | parts.StoreUndoState(); | ||
3106 | } | ||
3058 | m_rootPart.UpdateRotation(rot); | 3107 | m_rootPart.UpdateRotation(rot); |
3059 | 3108 | ||
3060 | PhysicsActor actor = m_rootPart.PhysActor; | 3109 | PhysicsActor actor = m_rootPart.PhysActor; |
@@ -3075,6 +3124,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3075 | /// <param name="rot"></param> | 3124 | /// <param name="rot"></param> |
3076 | public void UpdateGroupRotationPR(Vector3 pos, Quaternion rot) | 3125 | public void UpdateGroupRotationPR(Vector3 pos, Quaternion rot) |
3077 | { | 3126 | { |
3127 | foreach (SceneObjectPart parts in Children.Values) | ||
3128 | { | ||
3129 | parts.StoreUndoState(); | ||
3130 | } | ||
3078 | m_rootPart.UpdateRotation(rot); | 3131 | m_rootPart.UpdateRotation(rot); |
3079 | 3132 | ||
3080 | PhysicsActor actor = m_rootPart.PhysActor; | 3133 | PhysicsActor actor = m_rootPart.PhysActor; |
@@ -3098,6 +3151,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3098 | public void UpdateSingleRotation(Quaternion rot, uint localID) | 3151 | public void UpdateSingleRotation(Quaternion rot, uint localID) |
3099 | { | 3152 | { |
3100 | SceneObjectPart part = GetChildPart(localID); | 3153 | SceneObjectPart part = GetChildPart(localID); |
3154 | foreach (SceneObjectPart parts in Children.Values) | ||
3155 | { | ||
3156 | parts.StoreUndoState(); | ||
3157 | } | ||
3101 | if (part != null) | 3158 | if (part != null) |
3102 | { | 3159 | { |
3103 | if (part.UUID == m_rootPart.UUID) | 3160 | if (part.UUID == m_rootPart.UUID) |
@@ -3128,8 +3185,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3128 | } | 3185 | } |
3129 | else | 3186 | else |
3130 | { | 3187 | { |
3188 | part.IgnoreUndoUpdate = true; | ||
3131 | part.UpdateRotation(rot); | 3189 | part.UpdateRotation(rot); |
3132 | part.OffsetPosition = pos; | 3190 | part.OffsetPosition = pos; |
3191 | part.IgnoreUndoUpdate = false; | ||
3192 | part.StoreUndoState(); | ||
3133 | } | 3193 | } |
3134 | } | 3194 | } |
3135 | } | 3195 | } |
@@ -3143,6 +3203,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3143 | Quaternion axRot = rot; | 3203 | Quaternion axRot = rot; |
3144 | Quaternion oldParentRot = m_rootPart.RotationOffset; | 3204 | Quaternion oldParentRot = m_rootPart.RotationOffset; |
3145 | 3205 | ||
3206 | m_rootPart.StoreUndoState(); | ||
3146 | m_rootPart.UpdateRotation(rot); | 3207 | m_rootPart.UpdateRotation(rot); |
3147 | if (m_rootPart.PhysActor != null) | 3208 | if (m_rootPart.PhysActor != null) |
3148 | { | 3209 | { |
@@ -3156,6 +3217,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3156 | { | 3217 | { |
3157 | if (prim.UUID != m_rootPart.UUID) | 3218 | if (prim.UUID != m_rootPart.UUID) |
3158 | { | 3219 | { |
3220 | prim.IgnoreUndoUpdate = true; | ||
3159 | Vector3 axPos = prim.OffsetPosition; | 3221 | Vector3 axPos = prim.OffsetPosition; |
3160 | axPos *= oldParentRot; | 3222 | axPos *= oldParentRot; |
3161 | axPos *= Quaternion.Inverse(axRot); | 3223 | axPos *= Quaternion.Inverse(axRot); |
@@ -3168,7 +3230,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3168 | } | 3230 | } |
3169 | } | 3231 | } |
3170 | } | 3232 | } |
3171 | 3233 | foreach (SceneObjectPart childpart in Children.Values) | |
3234 | { | ||
3235 | if (childpart != m_rootPart) | ||
3236 | { | ||
3237 | childpart.IgnoreUndoUpdate = false; | ||
3238 | childpart.StoreUndoState(); | ||
3239 | } | ||
3240 | } | ||
3172 | m_rootPart.ScheduleTerseUpdate(); | 3241 | m_rootPart.ScheduleTerseUpdate(); |
3173 | } | 3242 | } |
3174 | 3243 | ||