diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs | 36 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 36 |
2 files changed, 72 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index 2b986be..2538246 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs | |||
@@ -831,7 +831,24 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
831 | if ((status & BuiltIn_Commands_BaseClass.STATUS_PHYSICS) == BuiltIn_Commands_BaseClass.STATUS_PHYSICS) | 831 | if ((status & BuiltIn_Commands_BaseClass.STATUS_PHYSICS) == BuiltIn_Commands_BaseClass.STATUS_PHYSICS) |
832 | { | 832 | { |
833 | if (value == 1) | 833 | if (value == 1) |
834 | { | ||
835 | SceneObjectGroup group = m_host.ParentGroup; | ||
836 | if(group == null) | ||
837 | return; | ||
838 | bool allow = true; | ||
839 | foreach(SceneObjectPart part in group.Children.Values) | ||
840 | { | ||
841 | if(part.Scale.X > 10.0 || part.Scale.Y > 10.0 || part.Scale.Z > 10.0) | ||
842 | { | ||
843 | allow = false; | ||
844 | break; | ||
845 | } | ||
846 | } | ||
847 | |||
848 | if(!allow) | ||
849 | return; | ||
834 | m_host.ScriptSetPhysicsStatus(true); | 850 | m_host.ScriptSetPhysicsStatus(true); |
851 | } | ||
835 | else | 852 | else |
836 | m_host.ScriptSetPhysicsStatus(false); | 853 | m_host.ScriptSetPhysicsStatus(false); |
837 | 854 | ||
@@ -948,6 +965,25 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
948 | private void SetScale(SceneObjectPart part, LSL_Types.Vector3 scale) | 965 | private void SetScale(SceneObjectPart part, LSL_Types.Vector3 scale) |
949 | { | 966 | { |
950 | // TODO: this needs to trigger a persistance save as well | 967 | // TODO: this needs to trigger a persistance save as well |
968 | |||
969 | if(part == null || part.ParentGroup == null || part.ParentGroup.RootPart == null) | ||
970 | return; | ||
971 | |||
972 | if(part.ParentGroup.RootPart.PhysActor != null && part.ParentGroup.RootPart.PhysActor.IsPhysical) | ||
973 | { | ||
974 | if(scale.x > 10.0) | ||
975 | scale.x = 10.0; | ||
976 | if(scale.y > 10.0) | ||
977 | scale.y = 10.0; | ||
978 | if(scale.z > 10.0) | ||
979 | scale.z = 10.0; | ||
980 | } | ||
981 | if(scale.x > 65536.0) | ||
982 | scale.x = 65536.0; | ||
983 | if(scale.y > 65536.0) | ||
984 | scale.y = 65536.0; | ||
985 | if(scale.z > 65536.0) | ||
986 | scale.z = 65536.0; | ||
951 | LLVector3 tmp = part.Scale; | 987 | LLVector3 tmp = part.Scale; |
952 | tmp.X = (float)scale.x; | 988 | tmp.X = (float)scale.x; |
953 | tmp.Y = (float)scale.y; | 989 | tmp.Y = (float)scale.y; |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 57f9141..4bf3e93 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -671,7 +671,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
671 | if ((status & ScriptBaseClass.STATUS_PHYSICS) == ScriptBaseClass.STATUS_PHYSICS) | 671 | if ((status & ScriptBaseClass.STATUS_PHYSICS) == ScriptBaseClass.STATUS_PHYSICS) |
672 | { | 672 | { |
673 | if (value == 1) | 673 | if (value == 1) |
674 | { | ||
675 | SceneObjectGroup group = m_host.ParentGroup; | ||
676 | if(group == null) | ||
677 | return; | ||
678 | bool allow = true; | ||
679 | foreach(SceneObjectPart part in group.Children.Values) | ||
680 | { | ||
681 | if(part.Scale.X > 10.0 || part.Scale.Y > 10.0 || part.Scale.Z > 10.0) | ||
682 | { | ||
683 | allow = false; | ||
684 | break; | ||
685 | } | ||
686 | } | ||
687 | |||
688 | if(!allow) | ||
689 | return; | ||
674 | m_host.ScriptSetPhysicsStatus(true); | 690 | m_host.ScriptSetPhysicsStatus(true); |
691 | } | ||
675 | else | 692 | else |
676 | m_host.ScriptSetPhysicsStatus(false); | 693 | m_host.ScriptSetPhysicsStatus(false); |
677 | } | 694 | } |
@@ -802,6 +819,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
802 | private void SetScale(SceneObjectPart part, LSL_Types.Vector3 scale) | 819 | private void SetScale(SceneObjectPart part, LSL_Types.Vector3 scale) |
803 | { | 820 | { |
804 | // TODO: this needs to trigger a persistance save as well | 821 | // TODO: this needs to trigger a persistance save as well |
822 | |||
823 | if(part == null || part.ParentGroup == null || part.ParentGroup.RootPart == null) | ||
824 | return; | ||
825 | |||
826 | if(part.ParentGroup.RootPart.PhysActor != null && part.ParentGroup.RootPart.PhysActor.IsPhysical) | ||
827 | { | ||
828 | if(scale.x > 10.0) | ||
829 | scale.x = 10.0; | ||
830 | if(scale.y > 10.0) | ||
831 | scale.y = 10.0; | ||
832 | if(scale.z > 10.0) | ||
833 | scale.z = 10.0; | ||
834 | } | ||
835 | if(scale.x > 65536.0) | ||
836 | scale.x = 65536.0; | ||
837 | if(scale.y > 65536.0) | ||
838 | scale.y = 65536.0; | ||
839 | if(scale.z > 65536.0) | ||
840 | scale.z = 65536.0; | ||
805 | LLVector3 tmp = part.Scale; | 841 | LLVector3 tmp = part.Scale; |
806 | tmp.X = (float)scale.x; | 842 | tmp.X = (float)scale.x; |
807 | tmp.Y = (float)scale.y; | 843 | tmp.Y = (float)scale.y; |