diff options
author | Jeff Ames | 2007-11-07 02:42:18 +0000 |
---|---|---|
committer | Jeff Ames | 2007-11-07 02:42:18 +0000 |
commit | f86a65f14be58d6458efb2384a72180a0af8306d (patch) | |
tree | b61d8123d4e3811688acc7900d19c7b044242897 /OpenSim/Region/Environment/Scenes/InnerScene.cs | |
parent | * Moved /branches/ruby to /trunk/share/ruby (diff) | |
download | opensim-SC_OLD-f86a65f14be58d6458efb2384a72180a0af8306d.zip opensim-SC_OLD-f86a65f14be58d6458efb2384a72180a0af8306d.tar.gz opensim-SC_OLD-f86a65f14be58d6458efb2384a72180a0af8306d.tar.bz2 opensim-SC_OLD-f86a65f14be58d6458efb2384a72180a0af8306d.tar.xz |
refactored some duplicate SceneObjectGroup searching code in Scene
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/InnerScene.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/InnerScene.cs | 264 |
1 files changed, 68 insertions, 196 deletions
diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index 8ed2352..90478c6 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs | |||
@@ -226,40 +226,50 @@ namespace OpenSim.Region.Environment.Scenes | |||
226 | return null; | 226 | return null; |
227 | } | 227 | } |
228 | 228 | ||
229 | public SceneObjectPart GetSceneObjectPart(uint localID) | 229 | private SceneObjectGroup GetGroupByPrim(uint localID) |
230 | { | 230 | { |
231 | bool hasPrim = false; | ||
232 | foreach (EntityBase ent in Entities.Values) | 231 | foreach (EntityBase ent in Entities.Values) |
233 | { | 232 | { |
234 | if (ent is SceneObjectGroup) | 233 | if (ent is SceneObjectGroup) |
235 | { | 234 | { |
236 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | 235 | if (((SceneObjectGroup)ent).HasChildPrim(localID)) |
237 | if (hasPrim != false) | 236 | return (SceneObjectGroup)ent; |
238 | { | ||
239 | return ((SceneObjectGroup)ent).GetChildPart(localID); | ||
240 | } | ||
241 | } | 237 | } |
242 | } | 238 | } |
243 | return null; | 239 | return null; |
244 | } | 240 | } |
245 | 241 | ||
246 | public SceneObjectPart GetSceneObjectPart(LLUUID fullID) | 242 | private SceneObjectGroup GetGroupByPrim(LLUUID fullID) |
247 | { | 243 | { |
248 | bool hasPrim = false; | ||
249 | foreach (EntityBase ent in Entities.Values) | 244 | foreach (EntityBase ent in Entities.Values) |
250 | { | 245 | { |
251 | if (ent is SceneObjectGroup) | 246 | if (ent is SceneObjectGroup) |
252 | { | 247 | { |
253 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(fullID); | 248 | if (((SceneObjectGroup)ent).HasChildPrim(fullID)) |
254 | if (hasPrim != false) | 249 | return (SceneObjectGroup)ent; |
255 | { | ||
256 | return ((SceneObjectGroup)ent).GetChildPart(fullID); | ||
257 | } | ||
258 | } | 250 | } |
259 | } | 251 | } |
260 | return null; | 252 | return null; |
261 | } | 253 | } |
262 | 254 | ||
255 | public SceneObjectPart GetSceneObjectPart(uint localID) | ||
256 | { | ||
257 | SceneObjectGroup group = GetGroupByPrim(localID); | ||
258 | if (group != null) | ||
259 | return group.GetChildPart(localID); | ||
260 | else | ||
261 | return null; | ||
262 | } | ||
263 | |||
264 | public SceneObjectPart GetSceneObjectPart(LLUUID fullID) | ||
265 | { | ||
266 | SceneObjectGroup group = GetGroupByPrim(fullID); | ||
267 | if (group != null) | ||
268 | return group.GetChildPart(fullID); | ||
269 | else | ||
270 | return null; | ||
271 | } | ||
272 | |||
263 | internal bool TryGetAvatar(LLUUID avatarId, out ScenePresence avatar) | 273 | internal bool TryGetAvatar(LLUUID avatarId, out ScenePresence avatar) |
264 | { | 274 | { |
265 | ScenePresence presence; | 275 | ScenePresence presence; |
@@ -302,19 +312,11 @@ namespace OpenSim.Region.Environment.Scenes | |||
302 | 312 | ||
303 | public LLUUID ConvertLocalIDToFullID(uint localID) | 313 | public LLUUID ConvertLocalIDToFullID(uint localID) |
304 | { | 314 | { |
305 | bool hasPrim = false; | 315 | SceneObjectGroup group = GetGroupByPrim(localID); |
306 | foreach (EntityBase ent in Entities.Values) | 316 | if (group != null) |
307 | { | 317 | return group.GetPartsFullID(localID); |
308 | if (ent is SceneObjectGroup) | 318 | else |
309 | { | 319 | return LLUUID.Zero; |
310 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
311 | if (hasPrim != false) | ||
312 | { | ||
313 | return ((SceneObjectGroup)ent).GetPartsFullID(localID); | ||
314 | } | ||
315 | } | ||
316 | } | ||
317 | return LLUUID.Zero; | ||
318 | } | 320 | } |
319 | 321 | ||
320 | public void SendAllSceneObjectsToClient(ScenePresence presence) | 322 | public void SendAllSceneObjectsToClient(ScenePresence presence) |
@@ -346,19 +348,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
346 | /// <param name="remoteClient"></param> | 348 | /// <param name="remoteClient"></param> |
347 | public void UpdatePrimScale(uint localID, LLVector3 scale, IClientAPI remoteClient) | 349 | public void UpdatePrimScale(uint localID, LLVector3 scale, IClientAPI remoteClient) |
348 | { | 350 | { |
349 | bool hasPrim = false; | 351 | SceneObjectGroup group = GetGroupByPrim(localID); |
350 | foreach (EntityBase ent in Entities.Values) | 352 | if (group != null) |
351 | { | 353 | group.Resize(scale, localID); |
352 | if (ent is SceneObjectGroup) | ||
353 | { | ||
354 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
355 | if (hasPrim != false) | ||
356 | { | ||
357 | ((SceneObjectGroup)ent).Resize(scale, localID); | ||
358 | break; | ||
359 | } | ||
360 | } | ||
361 | } | ||
362 | } | 354 | } |
363 | 355 | ||
364 | /// <summary> | 356 | /// <summary> |
@@ -369,19 +361,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
369 | /// <param name="remoteClient"></param> | 361 | /// <param name="remoteClient"></param> |
370 | public void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) | 362 | public void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) |
371 | { | 363 | { |
372 | bool hasPrim = false; | 364 | SceneObjectGroup group = GetGroupByPrim(localID); |
373 | foreach (EntityBase ent in Entities.Values) | 365 | if (group != null) |
374 | { | 366 | group.UpdateSingleRotation(rot, localID); |
375 | if (ent is SceneObjectGroup) | ||
376 | { | ||
377 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
378 | if (hasPrim != false) | ||
379 | { | ||
380 | ((SceneObjectGroup)ent).UpdateSingleRotation(rot, localID); | ||
381 | break; | ||
382 | } | ||
383 | } | ||
384 | } | ||
385 | } | 367 | } |
386 | 368 | ||
387 | /// <summary> | 369 | /// <summary> |
@@ -392,19 +374,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
392 | /// <param name="remoteClient"></param> | 374 | /// <param name="remoteClient"></param> |
393 | public void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) | 375 | public void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) |
394 | { | 376 | { |
395 | bool hasPrim = false; | 377 | SceneObjectGroup group = GetGroupByPrim(localID); |
396 | foreach (EntityBase ent in Entities.Values) | 378 | if (group != null) |
397 | { | 379 | group.UpdateGroupRotation(rot); |
398 | if (ent is SceneObjectGroup) | ||
399 | { | ||
400 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
401 | if (hasPrim != false) | ||
402 | { | ||
403 | ((SceneObjectGroup)ent).UpdateGroupRotation(rot); | ||
404 | break; | ||
405 | } | ||
406 | } | ||
407 | } | ||
408 | } | 380 | } |
409 | 381 | ||
410 | /// <summary> | 382 | /// <summary> |
@@ -416,36 +388,16 @@ namespace OpenSim.Region.Environment.Scenes | |||
416 | /// <param name="remoteClient"></param> | 388 | /// <param name="remoteClient"></param> |
417 | public void UpdatePrimRotation(uint localID, LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient) | 389 | public void UpdatePrimRotation(uint localID, LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient) |
418 | { | 390 | { |
419 | bool hasPrim = false; | 391 | SceneObjectGroup group = GetGroupByPrim(localID); |
420 | foreach (EntityBase ent in Entities.Values) | 392 | if (group != null) |
421 | { | 393 | group.UpdateGroupRotation(pos, rot); |
422 | if (ent is SceneObjectGroup) | ||
423 | { | ||
424 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
425 | if (hasPrim != false) | ||
426 | { | ||
427 | ((SceneObjectGroup)ent).UpdateGroupRotation(pos, rot); | ||
428 | break; | ||
429 | } | ||
430 | } | ||
431 | } | ||
432 | } | 394 | } |
433 | 395 | ||
434 | public void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient) | 396 | public void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient) |
435 | { | 397 | { |
436 | bool hasPrim = false; | 398 | SceneObjectGroup group = GetGroupByPrim(localID); |
437 | foreach (EntityBase ent in Entities.Values) | 399 | if (group != null) |
438 | { | 400 | group.UpdateSinglePosition(pos, localID); |
439 | if (ent is SceneObjectGroup) | ||
440 | { | ||
441 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
442 | if (hasPrim != false) | ||
443 | { | ||
444 | ((SceneObjectGroup)ent).UpdateSinglePosition(pos, localID); | ||
445 | break; | ||
446 | } | ||
447 | } | ||
448 | } | ||
449 | } | 401 | } |
450 | 402 | ||
451 | /// <summary> | 403 | /// <summary> |
@@ -456,19 +408,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
456 | /// <param name="remoteClient"></param> | 408 | /// <param name="remoteClient"></param> |
457 | public void UpdatePrimPosition(uint localID, LLVector3 pos, IClientAPI remoteClient) | 409 | public void UpdatePrimPosition(uint localID, LLVector3 pos, IClientAPI remoteClient) |
458 | { | 410 | { |
459 | bool hasPrim = false; | 411 | SceneObjectGroup group = GetGroupByPrim(localID); |
460 | foreach (EntityBase ent in Entities.Values) | 412 | if (group != null) |
461 | { | 413 | group.UpdateGroupPosition(pos); |
462 | if (ent is SceneObjectGroup) | ||
463 | { | ||
464 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
465 | if (hasPrim != false) | ||
466 | { | ||
467 | ((SceneObjectGroup)ent).UpdateGroupPosition(pos); | ||
468 | break; | ||
469 | } | ||
470 | } | ||
471 | } | ||
472 | } | 414 | } |
473 | 415 | ||
474 | /// <summary> | 416 | /// <summary> |
@@ -479,19 +421,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
479 | /// <param name="remoteClient"></param> | 421 | /// <param name="remoteClient"></param> |
480 | public void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) | 422 | public void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) |
481 | { | 423 | { |
482 | bool hasPrim = false; | 424 | SceneObjectGroup group = GetGroupByPrim(localID); |
483 | foreach (EntityBase ent in Entities.Values) | 425 | if (group != null) |
484 | { | 426 | group.UpdateTextureEntry(localID, texture); |
485 | if (ent is SceneObjectGroup) | ||
486 | { | ||
487 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
488 | if (hasPrim != false) | ||
489 | { | ||
490 | ((SceneObjectGroup)ent).UpdateTextureEntry(localID, texture); | ||
491 | break; | ||
492 | } | ||
493 | } | ||
494 | } | ||
495 | } | 427 | } |
496 | 428 | ||
497 | /// <summary> | 429 | /// <summary> |
@@ -502,19 +434,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
502 | /// <param name="remoteClient"></param> | 434 | /// <param name="remoteClient"></param> |
503 | public void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient) | 435 | public void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient) |
504 | { | 436 | { |
505 | bool hasprim = false; | 437 | SceneObjectGroup group = GetGroupByPrim(localID); |
506 | foreach (EntityBase ent in Entities.Values) | 438 | if (group != null) |
507 | { | 439 | group.UpdatePrimFlags(localID, (ushort)packet.Type, true, packet.ToBytes()); |
508 | if (ent is SceneObjectGroup) | ||
509 | { | ||
510 | hasprim = ((SceneObjectGroup)ent).HasChildPrim(localID); | ||
511 | if (hasprim != false) | ||
512 | { | ||
513 | ((SceneObjectGroup)ent).UpdatePrimFlags(localID, (ushort)packet.Type, true, packet.ToBytes()); | ||
514 | } | ||
515 | } | ||
516 | } | ||
517 | |||
518 | //System.Console.WriteLine("Got primupdate packet: " + packet.UsePhysics.ToString()); | 440 | //System.Console.WriteLine("Got primupdate packet: " + packet.UsePhysics.ToString()); |
519 | } | 441 | } |
520 | 442 | ||
@@ -522,19 +444,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
522 | { | 444 | { |
523 | if (PermissionsMngr.CanEditObject(remoteClient.AgentId, objectID)) | 445 | if (PermissionsMngr.CanEditObject(remoteClient.AgentId, objectID)) |
524 | { | 446 | { |
525 | bool hasPrim = false; | 447 | SceneObjectGroup group = GetGroupByPrim(objectID); |
526 | foreach (EntityBase ent in Entities.Values) | 448 | if (group != null) |
527 | { | 449 | group.GrabMovement(offset, pos, remoteClient); |
528 | if (ent is SceneObjectGroup) | ||
529 | { | ||
530 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(objectID); | ||
531 | if (hasPrim != false) | ||
532 | { | ||
533 | ((SceneObjectGroup)ent).GrabMovement(offset, pos, remoteClient); | ||
534 | break; | ||
535 | } | ||
536 | } | ||
537 | } | ||
538 | } | 450 | } |
539 | } | 451 | } |
540 | 452 | ||
@@ -545,19 +457,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
545 | /// <param name="description"></param> | 457 | /// <param name="description"></param> |
546 | public void PrimName(uint primLocalID, string name) | 458 | public void PrimName(uint primLocalID, string name) |
547 | { | 459 | { |
548 | bool hasPrim = false; | 460 | SceneObjectGroup group = GetGroupByPrim(primLocalID); |
549 | foreach (EntityBase ent in Entities.Values) | 461 | if (group != null) |
550 | { | 462 | group.SetPartName(name, primLocalID); |
551 | if (ent is SceneObjectGroup) | ||
552 | { | ||
553 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(primLocalID); | ||
554 | if (hasPrim != false) | ||
555 | { | ||
556 | ((SceneObjectGroup)ent).SetPartName(name, primLocalID); | ||
557 | break; | ||
558 | } | ||
559 | } | ||
560 | } | ||
561 | } | 463 | } |
562 | 464 | ||
563 | /// <summary> | 465 | /// <summary> |
@@ -567,36 +469,16 @@ namespace OpenSim.Region.Environment.Scenes | |||
567 | /// <param name="description"></param> | 469 | /// <param name="description"></param> |
568 | public void PrimDescription(uint primLocalID, string description) | 470 | public void PrimDescription(uint primLocalID, string description) |
569 | { | 471 | { |
570 | bool hasPrim = false; | 472 | SceneObjectGroup group = GetGroupByPrim(primLocalID); |
571 | foreach (EntityBase ent in Entities.Values) | 473 | if (group != null) |
572 | { | 474 | group.SetPartDescription(description, primLocalID); |
573 | if (ent is SceneObjectGroup) | ||
574 | { | ||
575 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(primLocalID); | ||
576 | if (hasPrim != false) | ||
577 | { | ||
578 | ((SceneObjectGroup)ent).SetPartDescription(description, primLocalID); | ||
579 | break; | ||
580 | } | ||
581 | } | ||
582 | } | ||
583 | } | 475 | } |
584 | 476 | ||
585 | public void UpdateExtraParam(uint primLocalID, ushort type, bool inUse, byte[] data) | 477 | public void UpdateExtraParam(uint primLocalID, ushort type, bool inUse, byte[] data) |
586 | { | 478 | { |
587 | bool hasPrim = false; | 479 | SceneObjectGroup group = GetGroupByPrim(primLocalID); |
588 | foreach (EntityBase ent in Entities.Values) | 480 | if (group != null) |
589 | { | 481 | group.UpdateExtraParam(primLocalID, type, inUse, data); |
590 | if (ent is SceneObjectGroup) | ||
591 | { | ||
592 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(primLocalID); | ||
593 | if (hasPrim != false) | ||
594 | { | ||
595 | ((SceneObjectGroup)ent).UpdateExtraParam(primLocalID, type, inUse, data); | ||
596 | break; | ||
597 | } | ||
598 | } | ||
599 | } | ||
600 | } | 482 | } |
601 | 483 | ||
602 | /// <summary> | 484 | /// <summary> |
@@ -606,19 +488,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
606 | /// <param name="shapeBlock"></param> | 488 | /// <param name="shapeBlock"></param> |
607 | public void UpdatePrimShape(uint primLocalID, ObjectShapePacket.ObjectDataBlock shapeBlock) | 489 | public void UpdatePrimShape(uint primLocalID, ObjectShapePacket.ObjectDataBlock shapeBlock) |
608 | { | 490 | { |
609 | bool hasPrim = false; | 491 | SceneObjectGroup group = GetGroupByPrim(primLocalID); |
610 | foreach (EntityBase ent in Entities.Values) | 492 | if (group != null) |
611 | { | 493 | group.UpdateShape(shapeBlock, primLocalID); |
612 | if (ent is SceneObjectGroup) | ||
613 | { | ||
614 | hasPrim = ((SceneObjectGroup)ent).HasChildPrim(primLocalID); | ||
615 | if (hasPrim != false) | ||
616 | { | ||
617 | ((SceneObjectGroup)ent).UpdateShape(shapeBlock, primLocalID); | ||
618 | break; | ||
619 | } | ||
620 | } | ||
621 | } | ||
622 | } | 494 | } |
623 | 495 | ||
624 | /// <summary> | 496 | /// <summary> |