diff options
author | CasperW | 2009-11-30 21:52:55 +0100 |
---|---|---|
committer | CasperW | 2009-11-30 21:52:55 +0100 |
commit | 2e6dce434f1fd20664a60e464e589798287dcfe3 (patch) | |
tree | 278de1777e9b5686002af53ebe73bc3a15615f28 /OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |
parent | Convert multiple lock()s which directly hinder script performance in linksets... (diff) | |
download | opensim-SC-2e6dce434f1fd20664a60e464e589798287dcfe3.zip opensim-SC-2e6dce434f1fd20664a60e464e589798287dcfe3.tar.gz opensim-SC-2e6dce434f1fd20664a60e464e589798287dcfe3.tar.bz2 opensim-SC-2e6dce434f1fd20664a60e464e589798287dcfe3.tar.xz |
Enforce physical prim max size on single prims.
Also convert a lock() to ReaderWriterLockSlim that i missed in the last commit
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 119 |
1 files changed, 58 insertions, 61 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index fb34ddc..42481ff 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -2871,11 +2871,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2871 | scale.Y = m_scene.m_maxNonphys; | 2871 | scale.Y = m_scene.m_maxNonphys; |
2872 | if (scale.Z > m_scene.m_maxNonphys) | 2872 | if (scale.Z > m_scene.m_maxNonphys) |
2873 | scale.Z = m_scene.m_maxNonphys; | 2873 | scale.Z = m_scene.m_maxNonphys; |
2874 | |||
2875 | SceneObjectPart part = GetChildPart(localID); | 2874 | SceneObjectPart part = GetChildPart(localID); |
2876 | if (part != null) | 2875 | if (part != null) |
2877 | { | 2876 | { |
2878 | part.Resize(scale); | ||
2879 | if (part.PhysActor != null) | 2877 | if (part.PhysActor != null) |
2880 | { | 2878 | { |
2881 | if (part.PhysActor.IsPhysical) | 2879 | if (part.PhysActor.IsPhysical) |
@@ -2890,7 +2888,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2890 | part.PhysActor.Size = scale; | 2888 | part.PhysActor.Size = scale; |
2891 | m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor); | 2889 | m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor); |
2892 | } | 2890 | } |
2893 | //if (part.UUID != m_rootPart.UUID) | 2891 | part.Resize(scale); |
2894 | 2892 | ||
2895 | HasGroupChanged = true; | 2893 | HasGroupChanged = true; |
2896 | ScheduleGroupForFullUpdate(); | 2894 | ScheduleGroupForFullUpdate(); |
@@ -2931,77 +2929,76 @@ namespace OpenSim.Region.Framework.Scenes | |||
2931 | float y = (scale.Y / part.Scale.Y); | 2929 | float y = (scale.Y / part.Scale.Y); |
2932 | float z = (scale.Z / part.Scale.Z); | 2930 | float z = (scale.Z / part.Scale.Z); |
2933 | 2931 | ||
2934 | lock (m_parts) | 2932 | lockPartsForRead(true); |
2933 | if (x > 1.0f || y > 1.0f || z > 1.0f) | ||
2935 | { | 2934 | { |
2936 | if (x > 1.0f || y > 1.0f || z > 1.0f) | 2935 | foreach (SceneObjectPart obPart in m_parts.Values) |
2937 | { | 2936 | { |
2938 | foreach (SceneObjectPart obPart in m_parts.Values) | 2937 | if (obPart.UUID != m_rootPart.UUID) |
2939 | { | 2938 | { |
2940 | if (obPart.UUID != m_rootPart.UUID) | 2939 | Vector3 oldSize = new Vector3(obPart.Scale); |
2941 | { | ||
2942 | Vector3 oldSize = new Vector3(obPart.Scale); | ||
2943 | 2940 | ||
2944 | float f = 1.0f; | 2941 | float f = 1.0f; |
2945 | float a = 1.0f; | 2942 | float a = 1.0f; |
2946 | 2943 | ||
2947 | if (part.PhysActor != null && part.PhysActor.IsPhysical) | 2944 | if (part.PhysActor != null && part.PhysActor.IsPhysical) |
2945 | { | ||
2946 | if (oldSize.X*x > m_scene.m_maxPhys) | ||
2948 | { | 2947 | { |
2949 | if (oldSize.X*x > m_scene.m_maxPhys) | 2948 | f = m_scene.m_maxPhys / oldSize.X; |
2950 | { | 2949 | a = f / x; |
2951 | f = m_scene.m_maxPhys / oldSize.X; | 2950 | x *= a; |
2952 | a = f / x; | 2951 | y *= a; |
2953 | x *= a; | 2952 | z *= a; |
2954 | y *= a; | ||
2955 | z *= a; | ||
2956 | } | ||
2957 | if (oldSize.Y*y > m_scene.m_maxPhys) | ||
2958 | { | ||
2959 | f = m_scene.m_maxPhys / oldSize.Y; | ||
2960 | a = f / y; | ||
2961 | x *= a; | ||
2962 | y *= a; | ||
2963 | z *= a; | ||
2964 | } | ||
2965 | if (oldSize.Z*z > m_scene.m_maxPhys) | ||
2966 | { | ||
2967 | f = m_scene.m_maxPhys / oldSize.Z; | ||
2968 | a = f / z; | ||
2969 | x *= a; | ||
2970 | y *= a; | ||
2971 | z *= a; | ||
2972 | } | ||
2973 | } | 2953 | } |
2974 | else | 2954 | if (oldSize.Y*y > m_scene.m_maxPhys) |
2955 | { | ||
2956 | f = m_scene.m_maxPhys / oldSize.Y; | ||
2957 | a = f / y; | ||
2958 | x *= a; | ||
2959 | y *= a; | ||
2960 | z *= a; | ||
2961 | } | ||
2962 | if (oldSize.Z*z > m_scene.m_maxPhys) | ||
2963 | { | ||
2964 | f = m_scene.m_maxPhys / oldSize.Z; | ||
2965 | a = f / z; | ||
2966 | x *= a; | ||
2967 | y *= a; | ||
2968 | z *= a; | ||
2969 | } | ||
2970 | } | ||
2971 | else | ||
2972 | { | ||
2973 | if (oldSize.X*x > m_scene.m_maxNonphys) | ||
2975 | { | 2974 | { |
2976 | if (oldSize.X*x > m_scene.m_maxNonphys) | 2975 | f = m_scene.m_maxNonphys / oldSize.X; |
2977 | { | 2976 | a = f / x; |
2978 | f = m_scene.m_maxNonphys / oldSize.X; | 2977 | x *= a; |
2979 | a = f / x; | 2978 | y *= a; |
2980 | x *= a; | 2979 | z *= a; |
2981 | y *= a; | 2980 | } |
2982 | z *= a; | 2981 | if (oldSize.Y*y > m_scene.m_maxNonphys) |
2983 | } | 2982 | { |
2984 | if (oldSize.Y*y > m_scene.m_maxNonphys) | 2983 | f = m_scene.m_maxNonphys / oldSize.Y; |
2985 | { | 2984 | a = f / y; |
2986 | f = m_scene.m_maxNonphys / oldSize.Y; | 2985 | x *= a; |
2987 | a = f / y; | 2986 | y *= a; |
2988 | x *= a; | 2987 | z *= a; |
2989 | y *= a; | 2988 | } |
2990 | z *= a; | 2989 | if (oldSize.Z*z > m_scene.m_maxNonphys) |
2991 | } | 2990 | { |
2992 | if (oldSize.Z*z > m_scene.m_maxNonphys) | 2991 | f = m_scene.m_maxNonphys / oldSize.Z; |
2993 | { | 2992 | a = f / z; |
2994 | f = m_scene.m_maxNonphys / oldSize.Z; | 2993 | x *= a; |
2995 | a = f / z; | 2994 | y *= a; |
2996 | x *= a; | 2995 | z *= a; |
2997 | y *= a; | ||
2998 | z *= a; | ||
2999 | } | ||
3000 | } | 2996 | } |
3001 | } | 2997 | } |
3002 | } | 2998 | } |
3003 | } | 2999 | } |
3004 | } | 3000 | } |
3001 | lockPartsForRead(false); | ||
3005 | 3002 | ||
3006 | Vector3 prevScale = part.Scale; | 3003 | Vector3 prevScale = part.Scale; |
3007 | prevScale.X *= x; | 3004 | prevScale.X *= x; |