diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Helpers.cs | 76 |
1 files changed, 58 insertions, 18 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs index d30a1c4..9f34c98 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs | |||
@@ -213,24 +213,6 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
213 | if (presence.PresenceType == PresenceType.Npc) | 213 | if (presence.PresenceType == PresenceType.Npc) |
214 | Type = 0x20; | 214 | Type = 0x20; |
215 | 215 | ||
216 | // Cope Impl. We don't use OS_NPC. | ||
217 | //if (presence.PresenceType != PresenceType.Npc) | ||
218 | //{ | ||
219 | // Type = AGENT; | ||
220 | //} | ||
221 | //else | ||
222 | //{ | ||
223 | // Type = OS_NPC; | ||
224 | |||
225 | // INPCModule npcModule = scene.RequestModuleInterface<INPCModule>(); | ||
226 | // INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene); | ||
227 | |||
228 | // if (npcData.SenseAsAgent) | ||
229 | // { | ||
230 | // Type |= AGENT; | ||
231 | // } | ||
232 | //} | ||
233 | |||
234 | if (presence.Velocity != Vector3.Zero) | 216 | if (presence.Velocity != Vector3.Zero) |
235 | Type |= ACTIVE; | 217 | Type |= ACTIVE; |
236 | 218 | ||
@@ -267,6 +249,64 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
267 | 249 | ||
268 | Velocity = new LSL_Types.Vector3(part.Velocity); | 250 | Velocity = new LSL_Types.Vector3(part.Velocity); |
269 | } | 251 | } |
252 | |||
253 | public void Populate(Scene scene, DetectedObject obj) | ||
254 | { | ||
255 | if(obj.keyUUID == UUID.Zero) // land | ||
256 | { | ||
257 | Position = new LSL_Types.Vector3(obj.posVector); | ||
258 | Rotation.s = 1.0; | ||
259 | return; | ||
260 | } | ||
261 | |||
262 | if((obj.colliderType & 0x21) != 0) // avatar or npc | ||
263 | { | ||
264 | ScenePresence presence = scene.GetScenePresence(obj.keyUUID); | ||
265 | if (presence == null) | ||
266 | return; | ||
267 | |||
268 | Name = obj.nameStr; | ||
269 | Owner = obj.keyUUID; | ||
270 | Group = obj.groupUUID; | ||
271 | Position = new LSL_Types.Vector3(obj.posVector); | ||
272 | Rotation = new LSL_Types.Quaternion(obj.rotQuat); | ||
273 | Velocity = new LSL_Types.Vector3(obj.velVector); | ||
274 | LinkNum = obj.linkNumber; | ||
275 | Type = obj.colliderType; | ||
276 | return; | ||
277 | } | ||
278 | |||
279 | SceneObjectPart part = scene.GetSceneObjectPart(obj.keyUUID); | ||
280 | if(part == null) | ||
281 | return; | ||
282 | |||
283 | Name = obj.nameStr; | ||
284 | Owner = obj.keyUUID; | ||
285 | Group = obj.groupUUID; | ||
286 | Position = new LSL_Types.Vector3(obj.posVector); | ||
287 | Rotation = new LSL_Types.Quaternion(obj.rotQuat); | ||
288 | Velocity = new LSL_Types.Vector3(obj.velVector); | ||
289 | LinkNum = obj.linkNumber; | ||
290 | if(obj.velVector == Vector3.Zero) | ||
291 | Type = 4; | ||
292 | else | ||
293 | Type = 2; | ||
294 | |||
295 | part = part.ParentGroup.RootPart; | ||
296 | foreach (SceneObjectPart p in part.ParentGroup.Parts) | ||
297 | { | ||
298 | if (p.Inventory.ContainsScripts()) | ||
299 | { | ||
300 | // at sl a physical prim is active also if has active scripts | ||
301 | // assuming all scripts are in run state to save time | ||
302 | if((part.Flags & PrimFlags.Physics) != 0 ) | ||
303 | Type = 10; // script + active | ||
304 | else | ||
305 | Type |= SCRIPTED; // Scripted | ||
306 | break; | ||
307 | } | ||
308 | } | ||
309 | } | ||
270 | } | 310 | } |
271 | 311 | ||
272 | /// <summary> | 312 | /// <summary> |