diff options
author | Dr Scofield | 2008-10-07 11:41:43 +0000 |
---|---|---|
committer | Dr Scofield | 2008-10-07 11:41:43 +0000 |
commit | e5a50b6a3b112bee131e6cfdfbfed5c203240bff (patch) | |
tree | 5c9b6e4b866c2377b981ca9d5fa09855eaedf31b /OpenSim/Region | |
parent | From: chris yeoh <yeohc@au1.ibm.com> (diff) | |
download | opensim-SC_OLD-e5a50b6a3b112bee131e6cfdfbfed5c203240bff.zip opensim-SC_OLD-e5a50b6a3b112bee131e6cfdfbfed5c203240bff.tar.gz opensim-SC_OLD-e5a50b6a3b112bee131e6cfdfbfed5c203240bff.tar.bz2 opensim-SC_OLD-e5a50b6a3b112bee131e6cfdfbfed5c203240bff.tar.xz |
From: chris yeoh <yeohc@au1.ibm.com>
The attached patch fixes mantis bug 2312 (llGetPos() returns incorrect
values for child prims where the root prim is rotated). Regression
tests still pass.
Incidentally AbsolutePosition which was used before looks a little
suspicious to me as its always going to return the wrong value if the
root prim is rotated. GetWorldPosition does take the rotation into
account, but AbsolutePosition is used in a lot of places. Though i
don't understand why there is both GetWorldPosition as well as
AbsolutePosition so I've left the latter alone.
[i also cleaned up some indent problems, --- dr scofield]
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index ccc483c..def8fbe 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -91,9 +91,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
91 | config.AddConfig("XEngine"); | 91 | config.AddConfig("XEngine"); |
92 | 92 | ||
93 | m_ScriptDelayFactor = config.Configs["XEngine"]. | 93 | m_ScriptDelayFactor = config.Configs["XEngine"]. |
94 | GetFloat("ScriptDelayFactor", 1.0f); | 94 | GetFloat("ScriptDelayFactor", 1.0f); |
95 | m_ScriptDistanceFactor = config.Configs["XEngine"]. | 95 | m_ScriptDistanceFactor = config.Configs["XEngine"]. |
96 | GetFloat("ScriptDistanceLimitFactor", 1.0f); | 96 | GetFloat("ScriptDistanceLimitFactor", 1.0f); |
97 | 97 | ||
98 | AsyncCommands = new AsyncCommandManager(ScriptEngine); | 98 | AsyncCommands = new AsyncCommandManager(ScriptEngine); |
99 | } | 99 | } |
@@ -937,7 +937,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
937 | public LSL_Float llGround(LSL_Vector offset) | 937 | public LSL_Float llGround(LSL_Vector offset) |
938 | { | 938 | { |
939 | m_host.AddScriptLPS(1); | 939 | m_host.AddScriptLPS(1); |
940 | Vector3 pos = m_host.GetWorldPosition(); | 940 | Vector3 pos = m_host.GetWorldPosition(); |
941 | int x = (int)(pos.X + offset.x); | 941 | int x = (int)(pos.X + offset.x); |
942 | int y = (int)(pos.Y + offset.y); | 942 | int y = (int)(pos.Y + offset.y); |
943 | return World.GetLandHeight(x, y); | 943 | return World.GetLandHeight(x, y); |
@@ -1719,9 +1719,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1719 | public LSL_Vector llGetPos() | 1719 | public LSL_Vector llGetPos() |
1720 | { | 1720 | { |
1721 | m_host.AddScriptLPS(1); | 1721 | m_host.AddScriptLPS(1); |
1722 | return new LSL_Vector(m_host.AbsolutePosition.X, | 1722 | Vector3 pos = m_host.GetWorldPosition(); |
1723 | m_host.AbsolutePosition.Y, | 1723 | return new LSL_Vector(pos.X, pos.Y, pos.Z); |
1724 | m_host.AbsolutePosition.Z); | ||
1725 | } | 1724 | } |
1726 | 1725 | ||
1727 | public LSL_Vector llGetLocalPos() | 1726 | public LSL_Vector llGetLocalPos() |
@@ -4845,21 +4844,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4845 | 4844 | ||
4846 | Vector3 p0 = new Vector3(pos.X, pos.Y, | 4845 | Vector3 p0 = new Vector3(pos.X, pos.Y, |
4847 | (float)llGround( | 4846 | (float)llGround( |
4848 | new LSL_Vector(pos.X, pos.Y, pos.Z) | 4847 | new LSL_Vector(pos.X, pos.Y, pos.Z) |
4849 | )); | 4848 | )); |
4850 | Vector3 p1 = new Vector3(pos.X + 1, pos.Y, | 4849 | Vector3 p1 = new Vector3(pos.X + 1, pos.Y, |
4851 | (float)llGround( | 4850 | (float)llGround( |
4852 | new LSL_Vector(pos.X + 1, pos.Y, pos.Z) | 4851 | new LSL_Vector(pos.X + 1, pos.Y, pos.Z) |
4853 | )); | 4852 | )); |
4854 | Vector3 p2 = new Vector3(pos.X, pos.Y + 1, | 4853 | Vector3 p2 = new Vector3(pos.X, pos.Y + 1, |
4855 | (float)llGround( | 4854 | (float)llGround( |
4856 | new LSL_Vector(pos.X, pos.Y + 1, pos.Z) | 4855 | new LSL_Vector(pos.X, pos.Y + 1, pos.Z) |
4857 | )); | 4856 | )); |
4858 | 4857 | ||
4859 | Vector3 v0 = new Vector3( | 4858 | Vector3 v0 = new Vector3(p1.X - p0.X, p1.Y - p0.Y, p1.Z - p0.Z); |
4860 | p1.X - p0.X, p1.Y - p0.Y, p1.Z - p0.Z); | 4859 | Vector3 v1 = new Vector3(p2.X - p1.X, p2.Y - p1.Y, p2.Z - p1.Z); |
4861 | Vector3 v1 = new Vector3( | ||
4862 | p2.X - p1.X, p2.Y - p1.Y, p2.Z - p1.Z); | ||
4863 | 4860 | ||
4864 | v0.Normalize(); | 4861 | v0.Normalize(); |
4865 | v1.Normalize(); | 4862 | v1.Normalize(); |