aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs39
1 files changed, 9 insertions, 30 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index b5abdb5..c43aef5 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -1808,45 +1808,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1808 m_host.AddScriptLPS(1); 1808 m_host.AddScriptLPS(1);
1809 SceneObjectGroup group = m_host.ParentGroup; 1809 SceneObjectGroup group = m_host.ParentGroup;
1810 1810
1811 if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical) 1811 if(scaling_factor < 1e-6)
1812 return ScriptBaseClass.FALSE; 1812 return ScriptBaseClass.FALSE;
1813 1813 if(scaling_factor > 1e6)
1814 if (group.RootPart.KeyframeMotion != null)
1815 return ScriptBaseClass.FALSE; 1814 return ScriptBaseClass.FALSE;
1816 1815
1817 List<SceneObjectPart> prims = GetLinkParts(ScriptBaseClass.LINK_SET); 1816 if (group == null || group.IsDeleted || group.inTransit)
1818 if (prims.Count > 0) 1817 return ScriptBaseClass.FALSE;
1819 {
1820 foreach (SceneObjectPart prim in prims)
1821 {
1822 LSL_Vector size = new LSL_Vector(prim.Scale.X, prim.Scale.Y, prim.Scale.Z);
1823 LSL_Vector new_size = new LSL_Vector(scaling_factor * size);
1824
1825 new_size.x = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, new_size.x));
1826 new_size.y = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, new_size.y));
1827 new_size.z = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, new_size.z));
1828
1829 if (new_size.x != scaling_factor * size.x || new_size.y != scaling_factor * size.y || new_size.z != scaling_factor * size.z)
1830 return ScriptBaseClass.FALSE;
1831
1832 LSL_Vector position = new LSL_Vector(GetPartLocalPos(prim));
1833 1818
1834 if (!prim.IsRoot) 1819 if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical)
1835 { 1820 return ScriptBaseClass.FALSE;
1836 position = GetSetPosTarget(prim, scaling_factor * position, position, true);
1837 prim.OffsetPosition = position;
1838 prim.ScheduleTerseUpdate();
1839 }
1840 1821
1841 SetScale(prim, new_size); 1822 if (group.RootPart.KeyframeMotion != null)
1842 } 1823 return ScriptBaseClass.FALSE;
1843 1824
1825 if(group.GroupResize(scaling_factor))
1844 return ScriptBaseClass.TRUE; 1826 return ScriptBaseClass.TRUE;
1845 }
1846 else 1827 else
1847 {
1848 return ScriptBaseClass.FALSE; 1828 return ScriptBaseClass.FALSE;
1849 }
1850 } 1829 }
1851 1830
1852 public void llSetScale(LSL_Vector scale) 1831 public void llSetScale(LSL_Vector scale)