From 13f7d5a4b221e72a830e55799e526453eaffaa03 Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Mon, 8 Sep 2008 02:05:56 +0000 Subject: I inadvertently edited out llGroundSlope, llGroundNormal and llGroundContour in the last checkin and this replaces them again in LSL_BuiltIn_Commands.cs. --- .../ScriptEngine/Common/LSL_BuiltIn_Commands.cs | 42 ++++++++++++++++++---- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index 3df94e8..b2334be 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs @@ -4655,22 +4655,52 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Vector3 llGroundSlope(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - NotImplemented("llGroundSlope"); - return new LSL_Types.Vector3(); + + Vector3 pos = m_host.AbsolutePosition + new Vector3((float)offset.x, + (float)offset.y, + (float)offset.z); + + Vector3 p0 = new Vector3(pos.X, pos.Y, + (float)llGround( + new LSL_Types.Vector3(pos.X, pos.Y, pos.Z) + )); + Vector3 p1 = new Vector3(pos.X + 1, pos.Y, + (float)llGround( + new LSL_Types.Vector3(pos.X + 1, pos.Y, pos.Z) + )); + Vector3 p2 = new Vector3(pos.X, pos.Y + 1, + (float)llGround( + new LSL_Types.Vector3(pos.X, pos.Y + 1, pos.Z) + )); + + Vector3 v0 = new Vector3( + p1.X - p0.X, p1.Y - p0.Y, p1.Z - p0.Z); + Vector3 v1 = new Vector3( + p2.X - p1.X, p2.Y - p1.Y, p2.Z - p1.Z); + + v0.Normalize(); + v1.Normalize(); + + Vector3 tv = new Vector3(); + tv.X = (v0.Y * v1.Z) - (v0.Z * v1.Y); + tv.Y = (v0.Z * v1.X) - (v0.X * v1.Z); + tv.Z = (v0.X * v1.Y) - (v0.Y * v1.X); + + return new LSL_Types.Vector3(tv.X, tv.Y, tv.Z); } public LSL_Types.Vector3 llGroundNormal(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - NotImplemented("llGroundNormal"); - return new LSL_Types.Vector3(); + LSL_Types.Vector3 x = llGroundSlope(offset); + return new LSL_Types.Vector3(x.x, x.y, 1.0); } public LSL_Types.Vector3 llGroundContour(LSL_Types.Vector3 offset) { m_host.AddScriptLPS(1); - NotImplemented("llGroundContour"); - return new LSL_Types.Vector3(); + LSL_Types.Vector3 x = llGroundSlope(offset); + return new LSL_Types.Vector3(-x.y, x.x, 0.0); } public LSL_Types.LSLInteger llGetAttached() -- cgit v1.1