aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-08-11 23:28:14 +0100
committerJustin Clark-Casey (justincc)2011-08-11 23:28:14 +0100
commita21e98ae1a3e2f570cc119e020d4d4ea111e0ad2 (patch)
treea74d900e3d6ebc4b6fea7b2d4450505b960c4739 /OpenSim/Region/ScriptEngine/Shared/Api/Implementation
parentImplement osAgentSaveAppearance() to save the appearance of an avatar in the ... (diff)
downloadopensim-SC-a21e98ae1a3e2f570cc119e020d4d4ea111e0ad2.zip
opensim-SC-a21e98ae1a3e2f570cc119e020d4d4ea111e0ad2.tar.gz
opensim-SC-a21e98ae1a3e2f570cc119e020d4d4ea111e0ad2.tar.bz2
opensim-SC-a21e98ae1a3e2f570cc119e020d4d4ea111e0ad2.tar.xz
implement osNpcGetRot() and osNpcSetRot()
Rotation works if done around the z axis. Anything else leads to random results.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs3
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs57
2 files changed, 55 insertions, 5 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 86ee28a..8a281d4 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -369,7 +369,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
369 } 369 }
370 370
371 // convert a LSL_Rotation to a Quaternion 371 // convert a LSL_Rotation to a Quaternion
372 protected Quaternion Rot2Quaternion(LSL_Rotation r) 372 public static Quaternion Rot2Quaternion(LSL_Rotation r)
373 { 373 {
374 Quaternion q = new Quaternion((float)r.x, (float)r.y, (float)r.z, (float)r.s); 374 Quaternion q = new Quaternion((float)r.x, (float)r.y, (float)r.z, (float)r.s);
375 q.Normalize(); 375 q.Normalize();
@@ -2061,6 +2061,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2061 { 2061 {
2062 return llGetRootRotation(); 2062 return llGetRootRotation();
2063 } 2063 }
2064
2064 m_host.AddScriptLPS(1); 2065 m_host.AddScriptLPS(1);
2065 Quaternion q = m_host.GetWorldRotation(); 2066 Quaternion q = m_host.GetWorldRotation();
2066 return new LSL_Rotation(q.X, q.Y, q.Z, q.W); 2067 return new LSL_Rotation(q.X, q.Y, q.Z, q.W);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 939602a..1874826 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2186,9 +2186,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2186 2186
2187 if (npcModule != null) 2187 if (npcModule != null)
2188 { 2188 {
2189 UUID npcId = new UUID(npc.m_string); 2189 UUID npcId;
2190 2190 if (!UUID.TryParse(npc.m_string, out npcId))
2191 if (!npcModule.IsNPC(npcId, m_host.ParentGroup.Scene))
2192 return; 2191 return;
2193 2192
2194 string appearanceSerialized = LoadNotecard(notecardNameOrUuid); 2193 string appearanceSerialized = LoadNotecard(notecardNameOrUuid);
@@ -2210,8 +2209,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2210 INPCModule module = World.RequestModuleInterface<INPCModule>(); 2209 INPCModule module = World.RequestModuleInterface<INPCModule>();
2211 if (module != null) 2210 if (module != null)
2212 { 2211 {
2212 UUID npcId;
2213 if (!UUID.TryParse(npc.m_string, out npcId))
2214 return;
2215
2213 Vector3 pos = new Vector3((float) position.x, (float) position.y, (float) position.z); 2216 Vector3 pos = new Vector3((float) position.x, (float) position.y, (float) position.z);
2214 module.MoveToTarget(new UUID(npc.m_string), World, pos, false, true); 2217 module.MoveToTarget(npcId, World, pos, false, true);
2215 } 2218 }
2216 } 2219 }
2217 2220
@@ -2222,6 +2225,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2222 INPCModule module = World.RequestModuleInterface<INPCModule>(); 2225 INPCModule module = World.RequestModuleInterface<INPCModule>();
2223 if (module != null) 2226 if (module != null)
2224 { 2227 {
2228 UUID npcId;
2229 if (!UUID.TryParse(npc.m_string, out npcId))
2230 return;
2231
2225 Vector3 pos = new Vector3((float)position.x, (float)position.y, (float)position.z); 2232 Vector3 pos = new Vector3((float)position.x, (float)position.y, (float)position.z);
2226 module.MoveToTarget( 2233 module.MoveToTarget(
2227 new UUID(npc.m_string), 2234 new UUID(npc.m_string),
@@ -2232,6 +2239,48 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2232 } 2239 }
2233 } 2240 }
2234 2241
2242 public LSL_Rotation osNpcGetRot(LSL_Key npc)
2243 {
2244 CheckThreatLevel(ThreatLevel.High, "osNpcGetRot");
2245
2246 INPCModule npcModule = World.RequestModuleInterface<INPCModule>();
2247 if (npcModule != null)
2248 {
2249 UUID npcId;
2250 if (!UUID.TryParse(npc.m_string, out npcId))
2251 return new LSL_Rotation(Quaternion.Identity.X, Quaternion.Identity.Y, Quaternion.Identity.Z, Quaternion.Identity.W);
2252
2253 if (!npcModule.IsNPC(npcId, m_host.ParentGroup.Scene))
2254 return new LSL_Rotation(Quaternion.Identity.X, Quaternion.Identity.Y, Quaternion.Identity.Z, Quaternion.Identity.W);
2255
2256 ScenePresence sp = World.GetScenePresence(npcId);
2257 Quaternion rot = sp.Rotation;
2258
2259 return new LSL_Rotation(rot.X, rot.Y, rot.Z, rot.W);
2260 }
2261
2262 return new LSL_Rotation(Quaternion.Identity.X, Quaternion.Identity.Y, Quaternion.Identity.Z, Quaternion.Identity.W);
2263 }
2264
2265 public void osNpcSetRot(LSL_Key npc, LSL_Rotation rotation)
2266 {
2267 CheckThreatLevel(ThreatLevel.High, "osNpcSetRot");
2268
2269 INPCModule npcModule = World.RequestModuleInterface<INPCModule>();
2270 if (npcModule != null)
2271 {
2272 UUID npcId;
2273 if (!UUID.TryParse(npc.m_string, out npcId))
2274 return;
2275
2276 if (!npcModule.IsNPC(npcId, m_host.ParentGroup.Scene))
2277 return;
2278
2279 ScenePresence sp = World.GetScenePresence(npcId);
2280 sp.Rotation = LSL_Api.Rot2Quaternion(rotation);
2281 }
2282 }
2283
2235 public void osNpcStopMoveTo(LSL_Key npc) 2284 public void osNpcStopMoveTo(LSL_Key npc)
2236 { 2285 {
2237 CheckThreatLevel(ThreatLevel.VeryLow, "osNpcStopMoveTo"); 2286 CheckThreatLevel(ThreatLevel.VeryLow, "osNpcStopMoveTo");