aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs')
-rw-r--r--OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs260
1 files changed, 133 insertions, 127 deletions
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
index 95db22b..b3750ca 100644
--- a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
+++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
@@ -229,22 +229,21 @@ namespace OpenSim.Region.RegionCombinerModule
229 westBorder.CrossDirection = Cardinals.W; 229 westBorder.CrossDirection = Cardinals.W;
230 scene.WestBorders[0] = westBorder; 230 scene.WestBorders[0] = westBorder;
231 231
232 RegionConnections regionConnections = new RegionConnections(); 232 RegionConnections newConn = new RegionConnections();
233 regionConnections.ConnectedRegions = new List<RegionData>(); 233 newConn.ConnectedRegions = new List<RegionData>();
234 regionConnections.RegionScene = scene; 234 newConn.RegionScene = scene;
235 regionConnections.RegionLandChannel = scene.LandChannel; 235 newConn.RegionLandChannel = scene.LandChannel;
236 regionConnections.RegionId = scene.RegionInfo.originRegionID; 236 newConn.RegionId = scene.RegionInfo.originRegionID;
237 regionConnections.X = scene.RegionInfo.RegionLocX; 237 newConn.X = scene.RegionInfo.RegionLocX;
238 regionConnections.Y = scene.RegionInfo.RegionLocY; 238 newConn.Y = scene.RegionInfo.RegionLocY;
239 regionConnections.XEnd = (int)Constants.RegionSize; 239 newConn.XEnd = (int)Constants.RegionSize;
240 regionConnections.YEnd = (int)Constants.RegionSize; 240 newConn.YEnd = (int)Constants.RegionSize;
241
242 241
243 lock (m_regions) 242 lock (m_regions)
244 { 243 {
245 bool connectedYN = false; 244 bool connectedYN = false;
246 245
247 foreach (RegionConnections conn in m_regions.Values) 246 foreach (RegionConnections rootConn in m_regions.Values)
248 { 247 {
249 #region commented 248 #region commented
250 /* 249 /*
@@ -410,12 +409,12 @@ namespace OpenSim.Region.RegionCombinerModule
410 //xxx 409 //xxx
411 410
412 411
413 if ((((int)conn.X * (int)Constants.RegionSize) + conn.XEnd 412 if ((((int)rootConn.X * (int)Constants.RegionSize) + rootConn.XEnd
414 >= (regionConnections.X * (int)Constants.RegionSize)) 413 >= (newConn.X * (int)Constants.RegionSize))
415 && (((int)conn.Y * (int)Constants.RegionSize) 414 && (((int)rootConn.Y * (int)Constants.RegionSize)
416 >= (regionConnections.Y * (int)Constants.RegionSize))) 415 >= (newConn.Y * (int)Constants.RegionSize)))
417 { 416 {
418 connectedYN = DoWorkForOneRegionOverPlusXY(conn, regionConnections, scene); 417 connectedYN = DoWorkForOneRegionOverPlusXY(rootConn, newConn, scene);
419 break; 418 break;
420 } 419 }
421 420
@@ -423,12 +422,12 @@ namespace OpenSim.Region.RegionCombinerModule
423 //xyx 422 //xyx
424 //xxx 423 //xxx
425 //xxx 424 //xxx
426 if ((((int)conn.X * (int)Constants.RegionSize) 425 if ((((int)rootConn.X * (int)Constants.RegionSize)
427 >= (regionConnections.X * (int)Constants.RegionSize)) 426 >= (newConn.X * (int)Constants.RegionSize))
428 && (((int)conn.Y * (int)Constants.RegionSize) + conn.YEnd 427 && (((int)rootConn.Y * (int)Constants.RegionSize) + rootConn.YEnd
429 >= (regionConnections.Y * (int)Constants.RegionSize))) 428 >= (newConn.Y * (int)Constants.RegionSize)))
430 { 429 {
431 connectedYN = DoWorkForOneRegionOverXPlusY(conn, regionConnections, scene); 430 connectedYN = DoWorkForOneRegionOverXPlusY(rootConn, newConn, scene);
432 break; 431 break;
433 } 432 }
434 433
@@ -436,12 +435,12 @@ namespace OpenSim.Region.RegionCombinerModule
436 //xxy 435 //xxy
437 //xxx 436 //xxx
438 //xxx 437 //xxx
439 if ((((int)conn.X * (int)Constants.RegionSize) + conn.XEnd 438 if ((((int)rootConn.X * (int)Constants.RegionSize) + rootConn.XEnd
440 >= (regionConnections.X * (int)Constants.RegionSize)) 439 >= (newConn.X * (int)Constants.RegionSize))
441 && (((int)conn.Y * (int)Constants.RegionSize) + conn.YEnd 440 && (((int)rootConn.Y * (int)Constants.RegionSize) + rootConn.YEnd
442 >= (regionConnections.Y * (int)Constants.RegionSize))) 441 >= (newConn.Y * (int)Constants.RegionSize)))
443 { 442 {
444 connectedYN = DoWorkForOneRegionOverPlusXPlusY(conn, regionConnections, scene); 443 connectedYN = DoWorkForOneRegionOverPlusXPlusY(rootConn, newConn, scene);
445 break; 444 break;
446 445
447 } 446 }
@@ -450,7 +449,7 @@ namespace OpenSim.Region.RegionCombinerModule
450 // If !connectYN means that this region is a root region 449 // If !connectYN means that this region is a root region
451 if (!connectedYN) 450 if (!connectedYN)
452 { 451 {
453 DoWorkForRootRegion(regionConnections, scene); 452 DoWorkForRootRegion(newConn, scene);
454 } 453 }
455 } 454 }
456 455
@@ -458,59 +457,57 @@ namespace OpenSim.Region.RegionCombinerModule
458 AdjustLargeRegionBounds(); 457 AdjustLargeRegionBounds();
459 } 458 }
460 459
461 private bool DoWorkForOneRegionOverPlusXY(RegionConnections conn, RegionConnections regionConnections, Scene scene) 460 private bool DoWorkForOneRegionOverPlusXY(RegionConnections rootConn, RegionConnections newConn, Scene scene)
462 { 461 {
463 Vector3 offset = Vector3.Zero; 462 Vector3 offset = Vector3.Zero;
464 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) - 463 offset.X = (((newConn.X * (int)Constants.RegionSize)) -
465 ((conn.X * (int)Constants.RegionSize))); 464 ((rootConn.X * (int)Constants.RegionSize)));
466 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) - 465 offset.Y = (((newConn.Y * (int)Constants.RegionSize)) -
467 ((conn.Y * (int)Constants.RegionSize))); 466 ((rootConn.Y * (int)Constants.RegionSize)));
468 467
469 Vector3 extents = Vector3.Zero; 468 Vector3 extents = Vector3.Zero;
470 extents.Y = conn.YEnd; 469 extents.Y = rootConn.YEnd;
471 extents.X = conn.XEnd + regionConnections.XEnd; 470 extents.X = rootConn.XEnd + newConn.XEnd;
472 471
473 conn.UpdateExtents(extents); 472 rootConn.UpdateExtents(extents);
474 473
475 m_log.DebugFormat( 474 m_log.DebugFormat(
476 "[REGION COMBINER MODULE]: Root region {0} is to the west of region {1}, Offset: {2}, Extents: {3}", 475 "[REGION COMBINER MODULE]: Root region {0} is to the west of region {1}, Offset: {2}, Extents: {3}",
477 conn.RegionScene.RegionInfo.RegionName, 476 rootConn.RegionScene.RegionInfo.RegionName,
478 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); 477 newConn.RegionScene.RegionInfo.RegionName, offset, extents);
479 478
480 scene.BordersLocked = true; 479 scene.BordersLocked = true;
481 conn.RegionScene.BordersLocked = true; 480 rootConn.RegionScene.BordersLocked = true;
482 481
483 RegionData ConnectedRegion = new RegionData(); 482 RegionData ConnectedRegion = new RegionData();
484 ConnectedRegion.Offset = offset; 483 ConnectedRegion.Offset = offset;
485 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID; 484 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID;
486 ConnectedRegion.RegionScene = scene; 485 ConnectedRegion.RegionScene = scene;
487 conn.ConnectedRegions.Add(ConnectedRegion); 486 rootConn.ConnectedRegions.Add(ConnectedRegion);
488 487
489 // Inform root region Physics about the extents of this region 488 // Inform root region Physics about the extents of this region
490 conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents); 489 rootConn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents);
491 490
492 // Inform Child region that it needs to forward it's terrain to the root region 491 // Inform Child region that it needs to forward it's terrain to the root region
493 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); 492 scene.PhysicsScene.Combine(rootConn.RegionScene.PhysicsScene, offset, Vector3.Zero);
494 493
495 // Extend the borders as appropriate 494 // Extend the borders as appropriate
496 lock (conn.RegionScene.EastBorders) 495 lock (rootConn.RegionScene.EastBorders)
497 conn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize; 496 rootConn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize;
498 497
499 lock (conn.RegionScene.NorthBorders) 498 lock (rootConn.RegionScene.NorthBorders)
500 conn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize; 499 rootConn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
501 500
502 lock (conn.RegionScene.SouthBorders) 501 lock (rootConn.RegionScene.SouthBorders)
503 conn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize; 502 rootConn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
504 503
505 lock (scene.WestBorders) 504 lock (scene.WestBorders)
506 { 505 {
507 506 scene.WestBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocX - rootConn.RegionScene.RegionInfo.RegionLocX) * (int)Constants.RegionSize); //auto teleport West
508
509 scene.WestBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocX - conn.RegionScene.RegionInfo.RegionLocX) * (int)Constants.RegionSize); //auto teleport West
510 507
511 // Trigger auto teleport to root region 508 // Trigger auto teleport to root region
512 scene.WestBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX; 509 scene.WestBorders[0].TriggerRegionX = rootConn.RegionScene.RegionInfo.RegionLocX;
513 scene.WestBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY; 510 scene.WestBorders[0].TriggerRegionY = rootConn.RegionScene.RegionInfo.RegionLocY;
514 } 511 }
515 512
516 // Reset Terrain.. since terrain loads before we get here, we need to load 513 // Reset Terrain.. since terrain loads before we get here, we need to load
@@ -519,57 +516,60 @@ namespace OpenSim.Region.RegionCombinerModule
519 scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); 516 scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised());
520 517
521 // Unlock borders 518 // Unlock borders
522 conn.RegionScene.BordersLocked = false; 519 rootConn.RegionScene.BordersLocked = false;
523 scene.BordersLocked = false; 520 scene.BordersLocked = false;
524 521
525 // Create a client event forwarder and add this region's events to the root region. 522 // Create a client event forwarder and add this region's events to the root region.
526 if (conn.ClientEventForwarder != null) 523 if (rootConn.ClientEventForwarder != null)
527 conn.ClientEventForwarder.AddSceneToEventForwarding(scene); 524 rootConn.ClientEventForwarder.AddSceneToEventForwarding(scene);
528 525
529 return true; 526 return true;
530 } 527 }
531 528
532 private bool DoWorkForOneRegionOverXPlusY(RegionConnections conn, RegionConnections regionConnections, Scene scene) 529 private bool DoWorkForOneRegionOverXPlusY(RegionConnections rootConn, RegionConnections newConn, Scene scene)
533 { 530 {
534 Vector3 offset = Vector3.Zero; 531 Vector3 offset = Vector3.Zero;
535 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) - 532 offset.X = (((newConn.X * (int)Constants.RegionSize)) -
536 ((conn.X * (int)Constants.RegionSize))); 533 ((rootConn.X * (int)Constants.RegionSize)));
537 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) - 534 offset.Y = (((newConn.Y * (int)Constants.RegionSize)) -
538 ((conn.Y * (int)Constants.RegionSize))); 535 ((rootConn.Y * (int)Constants.RegionSize)));
539 536
540 Vector3 extents = Vector3.Zero; 537 Vector3 extents = Vector3.Zero;
541 extents.Y = regionConnections.YEnd + conn.YEnd; 538 extents.Y = newConn.YEnd + rootConn.YEnd;
542 extents.X = conn.XEnd; 539 extents.X = rootConn.XEnd;
543 conn.UpdateExtents(extents); 540 rootConn.UpdateExtents(extents);
544 541
545 scene.BordersLocked = true; 542 scene.BordersLocked = true;
546 conn.RegionScene.BordersLocked = true; 543 rootConn.RegionScene.BordersLocked = true;
547 544
548 RegionData ConnectedRegion = new RegionData(); 545 RegionData ConnectedRegion = new RegionData();
549 ConnectedRegion.Offset = offset; 546 ConnectedRegion.Offset = offset;
550 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID; 547 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID;
551 ConnectedRegion.RegionScene = scene; 548 ConnectedRegion.RegionScene = scene;
552 conn.ConnectedRegions.Add(ConnectedRegion); 549 rootConn.ConnectedRegions.Add(ConnectedRegion);
553 550
554 m_log.DebugFormat( 551 m_log.DebugFormat(
555 "[REGION COMBINER MODULE]: Root region {0} is to the south of region {1}, Offset: {2}, Extents: {3}", 552 "[REGION COMBINER MODULE]: Root region {0} is to the south of region {1}, Offset: {2}, Extents: {3}",
556 conn.RegionScene.RegionInfo.RegionName, 553 rootConn.RegionScene.RegionInfo.RegionName,
557 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); 554 newConn.RegionScene.RegionInfo.RegionName, offset, extents);
558 555
559 conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents); 556 rootConn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents);
560 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); 557 scene.PhysicsScene.Combine(rootConn.RegionScene.PhysicsScene, offset, Vector3.Zero);
561 558
562 lock (conn.RegionScene.NorthBorders) 559 lock (rootConn.RegionScene.NorthBorders)
563 conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; 560 rootConn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize;
564 lock (conn.RegionScene.EastBorders) 561
565 conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize; 562 lock (rootConn.RegionScene.EastBorders)
566 lock (conn.RegionScene.WestBorders) 563 rootConn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize;
567 conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize; 564
565 lock (rootConn.RegionScene.WestBorders)
566 rootConn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize;
567
568 lock (scene.SouthBorders) 568 lock (scene.SouthBorders)
569 { 569 {
570 scene.SouthBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocY - conn.RegionScene.RegionInfo.RegionLocY) * (int)Constants.RegionSize); //auto teleport south 570 scene.SouthBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocY - rootConn.RegionScene.RegionInfo.RegionLocY) * (int)Constants.RegionSize); //auto teleport south
571 scene.SouthBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX; 571 scene.SouthBorders[0].TriggerRegionX = rootConn.RegionScene.RegionInfo.RegionLocX;
572 scene.SouthBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY; 572 scene.SouthBorders[0].TriggerRegionY = rootConn.RegionScene.RegionInfo.RegionLocY;
573 } 573 }
574 574
575 // Reset Terrain.. since terrain normally loads first. 575 // Reset Terrain.. since terrain normally loads first.
@@ -578,19 +578,21 @@ namespace OpenSim.Region.RegionCombinerModule
578 //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); 578 //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised());
579 579
580 scene.BordersLocked = false; 580 scene.BordersLocked = false;
581 conn.RegionScene.BordersLocked = false; 581 rootConn.RegionScene.BordersLocked = false;
582 if (conn.ClientEventForwarder != null) 582
583 conn.ClientEventForwarder.AddSceneToEventForwarding(scene); 583 if (rootConn.ClientEventForwarder != null)
584 rootConn.ClientEventForwarder.AddSceneToEventForwarding(scene);
585
584 return true; 586 return true;
585 } 587 }
586 588
587 private bool DoWorkForOneRegionOverPlusXPlusY(RegionConnections conn, RegionConnections regionConnections, Scene scene) 589 private bool DoWorkForOneRegionOverPlusXPlusY(RegionConnections rootConn, RegionConnections newConn, Scene scene)
588 { 590 {
589 Vector3 offset = Vector3.Zero; 591 Vector3 offset = Vector3.Zero;
590 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) - 592 offset.X = (((newConn.X * (int)Constants.RegionSize)) -
591 ((conn.X * (int)Constants.RegionSize))); 593 ((rootConn.X * (int)Constants.RegionSize)));
592 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) - 594 offset.Y = (((newConn.Y * (int)Constants.RegionSize)) -
593 ((conn.Y * (int)Constants.RegionSize))); 595 ((rootConn.Y * (int)Constants.RegionSize)));
594 596
595 Vector3 extents = Vector3.Zero; 597 Vector3 extents = Vector3.Zero;
596 598
@@ -600,68 +602,70 @@ namespace OpenSim.Region.RegionCombinerModule
600// extents.X = regionConnections.XEnd + conn.XEnd; 602// extents.X = regionConnections.XEnd + conn.XEnd;
601// conn.UpdateExtents(extents); 603// conn.UpdateExtents(extents);
602 604
603 extents.Y = conn.YEnd; 605 extents.Y = rootConn.YEnd;
604 extents.X = conn.XEnd; 606 extents.X = rootConn.XEnd;
605 607
606 scene.BordersLocked = true; 608 scene.BordersLocked = true;
607 conn.RegionScene.BordersLocked = true; 609 rootConn.RegionScene.BordersLocked = true;
608 610
609 RegionData ConnectedRegion = new RegionData(); 611 RegionData ConnectedRegion = new RegionData();
610 ConnectedRegion.Offset = offset; 612 ConnectedRegion.Offset = offset;
611 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID; 613 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID;
612 ConnectedRegion.RegionScene = scene; 614 ConnectedRegion.RegionScene = scene;
613 615
614 conn.ConnectedRegions.Add(ConnectedRegion); 616 rootConn.ConnectedRegions.Add(ConnectedRegion);
615 617
616 m_log.DebugFormat( 618 m_log.DebugFormat(
617 "[REGION COMBINER MODULE]: Region {0} is to the southwest of Scene {1}, Offset: {2}, Extents: {3}", 619 "[REGION COMBINER MODULE]: Region {0} is to the southwest of Scene {1}, Offset: {2}, Extents: {3}",
618 conn.RegionScene.RegionInfo.RegionName, 620 rootConn.RegionScene.RegionInfo.RegionName,
619 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); 621 newConn.RegionScene.RegionInfo.RegionName, offset, extents);
620 622
621 conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents); 623 rootConn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents);
622 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); 624 scene.PhysicsScene.Combine(rootConn.RegionScene.PhysicsScene, offset, Vector3.Zero);
623 lock (conn.RegionScene.NorthBorders) 625
626 lock (rootConn.RegionScene.NorthBorders)
624 { 627 {
625 if (conn.RegionScene.NorthBorders.Count == 1)// && 2) 628 if (rootConn.RegionScene.NorthBorders.Count == 1)// && 2)
626 { 629 {
627 //compound border 630 //compound border
628 // already locked above 631 // already locked above
629 conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; 632 rootConn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize;
633
634 lock (rootConn.RegionScene.EastBorders)
635 rootConn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize;
630 636
631 lock (conn.RegionScene.EastBorders) 637 lock (rootConn.RegionScene.WestBorders)
632 conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize; 638 rootConn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize;
633 lock (conn.RegionScene.WestBorders)
634 conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize;
635 } 639 }
636 } 640 }
637 641
638 lock (scene.SouthBorders) 642 lock (scene.SouthBorders)
639 { 643 {
640 scene.SouthBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocY - conn.RegionScene.RegionInfo.RegionLocY) * (int)Constants.RegionSize); //auto teleport south 644 scene.SouthBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocY - rootConn.RegionScene.RegionInfo.RegionLocY) * (int)Constants.RegionSize); //auto teleport south
641 scene.SouthBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX; 645 scene.SouthBorders[0].TriggerRegionX = rootConn.RegionScene.RegionInfo.RegionLocX;
642 scene.SouthBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY; 646 scene.SouthBorders[0].TriggerRegionY = rootConn.RegionScene.RegionInfo.RegionLocY;
643 } 647 }
644 648
645 lock (conn.RegionScene.EastBorders) 649 lock (rootConn.RegionScene.EastBorders)
646 { 650 {
647 if (conn.RegionScene.EastBorders.Count == 1)// && conn.RegionScene.EastBorders.Count == 2) 651 if (rootConn.RegionScene.EastBorders.Count == 1)// && conn.RegionScene.EastBorders.Count == 2)
648 { 652 {
649 653
650 conn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize; 654 rootConn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize;
651 lock (conn.RegionScene.NorthBorders)
652 conn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
653 lock (conn.RegionScene.SouthBorders)
654 conn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
655 655
656 lock (rootConn.RegionScene.NorthBorders)
657 rootConn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
656 658
659 lock (rootConn.RegionScene.SouthBorders)
660 rootConn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
657 } 661 }
658 } 662 }
659 663
660 lock (scene.WestBorders) 664 lock (scene.WestBorders)
661 { 665 {
662 scene.WestBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocX - conn.RegionScene.RegionInfo.RegionLocX) * (int)Constants.RegionSize); //auto teleport West 666 scene.WestBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocX - rootConn.RegionScene.RegionInfo.RegionLocX) * (int)Constants.RegionSize); //auto teleport West
663 scene.WestBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX; 667 scene.WestBorders[0].TriggerRegionX = rootConn.RegionScene.RegionInfo.RegionLocX;
664 scene.WestBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY; 668 scene.WestBorders[0].TriggerRegionY = rootConn.RegionScene.RegionInfo.RegionLocY;
665 } 669 }
666 670
667 /* 671 /*
@@ -680,18 +684,17 @@ namespace OpenSim.Region.RegionCombinerModule
680 scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); 684 scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised());
681 //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); 685 //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised());
682 scene.BordersLocked = false; 686 scene.BordersLocked = false;
683 conn.RegionScene.BordersLocked = false; 687 rootConn.RegionScene.BordersLocked = false;
684 688
685 if (conn.ClientEventForwarder != null) 689 if (rootConn.ClientEventForwarder != null)
686 conn.ClientEventForwarder.AddSceneToEventForwarding(scene); 690 rootConn.ClientEventForwarder.AddSceneToEventForwarding(scene);
687 691
688 return true; 692 return true;
689 693
690 //scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset,extents); 694 //scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset,extents);
691
692 } 695 }
693 696
694 private void DoWorkForRootRegion(RegionConnections regionConnections, Scene scene) 697 private void DoWorkForRootRegion(RegionConnections rootConn, Scene scene)
695 { 698 {
696 m_log.DebugFormat("[REGION COMBINER MODULE]: Adding root region {0}", scene.RegionInfo.RegionName); 699 m_log.DebugFormat("[REGION COMBINER MODULE]: Adding root region {0}", scene.RegionInfo.RegionName);
697 700
@@ -700,28 +703,31 @@ namespace OpenSim.Region.RegionCombinerModule
700 rdata.RegionId = scene.RegionInfo.originRegionID; 703 rdata.RegionId = scene.RegionInfo.originRegionID;
701 rdata.RegionScene = scene; 704 rdata.RegionScene = scene;
702 // save it's land channel 705 // save it's land channel
703 regionConnections.RegionLandChannel = scene.LandChannel; 706 rootConn.RegionLandChannel = scene.LandChannel;
704 707
705 // Substitue our landchannel 708 // Substitue our landchannel
706 RegionCombinerLargeLandChannel lnd = new RegionCombinerLargeLandChannel(rdata, scene.LandChannel, 709 RegionCombinerLargeLandChannel lnd = new RegionCombinerLargeLandChannel(rdata, scene.LandChannel,
707 regionConnections.ConnectedRegions); 710 rootConn.ConnectedRegions);
711
708 scene.LandChannel = lnd; 712 scene.LandChannel = lnd;
713
709 // Forward the permissions modules of each of the connected regions to the root region 714 // Forward the permissions modules of each of the connected regions to the root region
710 lock (m_regions) 715 lock (m_regions)
711 { 716 {
712 foreach (RegionData r in regionConnections.ConnectedRegions) 717 foreach (RegionData r in rootConn.ConnectedRegions)
713 { 718 {
714 ForwardPermissionRequests(regionConnections, r.RegionScene); 719 ForwardPermissionRequests(rootConn, r.RegionScene);
715 } 720 }
716 } 721 }
722
717 // Create the root region's Client Event Forwarder 723 // Create the root region's Client Event Forwarder
718 regionConnections.ClientEventForwarder = new RegionCombinerClientEventForwarder(regionConnections); 724 rootConn.ClientEventForwarder = new RegionCombinerClientEventForwarder(rootConn);
719 725
720 // Sets up the CoarseLocationUpdate forwarder for this root region 726 // Sets up the CoarseLocationUpdate forwarder for this root region
721 scene.EventManager.OnNewPresence += SetCourseLocationDelegate; 727 scene.EventManager.OnNewPresence += SetCourseLocationDelegate;
722 728
723 // Adds this root region to a dictionary of regions that are connectable 729 // Adds this root region to a dictionary of regions that are connectable
724 m_regions.Add(scene.RegionInfo.originRegionID, regionConnections); 730 m_regions.Add(scene.RegionInfo.originRegionID, rootConn);
725 } 731 }
726 732
727 private void SetCourseLocationDelegate(ScenePresence presence) 733 private void SetCourseLocationDelegate(ScenePresence presence)