Index: src/common/bgloader/loader.cpp =================================================================== --- src/common/bgloader/loader.cpp (revision 5731) +++ src/common/bgloader/loader.cpp (working copy) @@ -206,7 +206,7 @@ if(!force) { // Check if we've moved. - if(csVector3(lastPos - pos).Norm() < loadRange/10) + if(csVector3(lastPos - pos).Norm() < loadRange/10 && lastSector->name == sectorName) { return; } @@ -581,19 +581,9 @@ csBox3 wwUnloadBox = unloadBox; if(sector->activePortals[i]->warp) { - csVector3& transform = sector->activePortals[i]->transform; - wwLoadBox.SetMin(0, wwLoadBox.MinX()-transform.x); - wwLoadBox.SetMin(1, wwLoadBox.MinY()-transform.y); - wwLoadBox.SetMin(2, wwLoadBox.MinZ()-transform.z); - wwLoadBox.SetMax(0, wwLoadBox.MaxX()-transform.x); - wwLoadBox.SetMax(1, wwLoadBox.MaxY()-transform.y); - wwLoadBox.SetMax(2, wwLoadBox.MaxZ()-transform.z); - wwUnloadBox.SetMin(0, wwUnloadBox.MinX()-transform.x); - wwUnloadBox.SetMin(1, wwUnloadBox.MinY()-transform.y); - wwUnloadBox.SetMin(2, wwUnloadBox.MinZ()-transform.z); - wwUnloadBox.SetMax(0, wwUnloadBox.MaxX()-transform.x); - wwUnloadBox.SetMax(1, wwUnloadBox.MaxY()-transform.y); - wwUnloadBox.SetMax(2, wwUnloadBox.MaxZ()-transform.z); + csTransform t(sector->activePortals[i]->matrix.GetInverse(), sector->activePortals[i]->transform); + wwLoadBox = t.Other2This(wwLoadBox); + wwUnloadBox = t.Other2This(wwUnloadBox); } LoadSector(wwLoadBox, wwUnloadBox, sector->activePortals[i]->targetSector, depth+1, false, loadMeshes); @@ -709,20 +699,11 @@ csBox3 wwUnloadBox = unloadBox; if(sector->portals[i]->warp) { - csVector3& transform = sector->portals[i]->transform; - wwLoadBox.SetMin(0, wwLoadBox.MinX()-transform.x); - wwLoadBox.SetMin(1, wwLoadBox.MinY()-transform.y); - wwLoadBox.SetMin(2, wwLoadBox.MinZ()-transform.z); - wwLoadBox.SetMax(0, wwLoadBox.MaxX()-transform.x); - wwLoadBox.SetMax(1, wwLoadBox.MaxY()-transform.y); - wwLoadBox.SetMax(2, wwLoadBox.MaxZ()-transform.z); - wwUnloadBox.SetMin(0, wwUnloadBox.MinX()-transform.x); - wwUnloadBox.SetMin(1, wwUnloadBox.MinY()-transform.y); - wwUnloadBox.SetMin(2, wwUnloadBox.MinZ()-transform.z); - wwUnloadBox.SetMax(0, wwUnloadBox.MaxX()-transform.x); - wwUnloadBox.SetMax(1, wwUnloadBox.MaxY()-transform.y); - wwUnloadBox.SetMax(2, wwUnloadBox.MaxZ()-transform.z); + csTransform t(sector->portals[i]->matrix.GetInverse(), sector->portals[i]->transform); + wwLoadBox = t.Other2This(wwLoadBox); + wwUnloadBox = t.Other2This(wwUnloadBox); } + LoadSector(wwLoadBox, wwUnloadBox, sector->portals[i]->targetSector, depth+1, false, loadMeshes); } @@ -761,20 +742,11 @@ csBox3 wwUnloadBox = unloadBox; if(sector->portals[i]->warp) { - csVector3& transform = sector->portals[i]->transform; - wwLoadBox.SetMin(0, wwLoadBox.MinX()-transform.x); - wwLoadBox.SetMin(1, wwLoadBox.MinY()-transform.y); - wwLoadBox.SetMin(2, wwLoadBox.MinZ()-transform.z); - wwLoadBox.SetMax(0, wwLoadBox.MaxX()-transform.x); - wwLoadBox.SetMax(1, wwLoadBox.MaxY()-transform.y); - wwLoadBox.SetMax(2, wwLoadBox.MaxZ()-transform.z); - wwUnloadBox.SetMin(0, wwUnloadBox.MinX()-transform.x); - wwUnloadBox.SetMin(1, wwUnloadBox.MinY()-transform.y); - wwUnloadBox.SetMin(2, wwUnloadBox.MinZ()-transform.z); - wwUnloadBox.SetMax(0, wwUnloadBox.MaxX()-transform.x); - wwUnloadBox.SetMax(1, wwUnloadBox.MaxY()-transform.y); - wwUnloadBox.SetMax(2, wwUnloadBox.MaxZ()-transform.z); + csTransform t(sector->portals[i]->matrix.GetInverse(), sector->portals[i]->transform); + wwLoadBox = t.Other2This(wwLoadBox); + wwUnloadBox = t.Other2This(wwUnloadBox); } + LoadSector(wwLoadBox, wwUnloadBox, sector->portals[i]->targetSector, depth+1, false, loadMeshes); }