Signed-off-by: Robert Adams <misterblue@misterblue.com>0.8.0.3
parent
3f76f72137
commit
bc969a6b46
|
@ -2472,35 +2472,44 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// Get terrain height for sub-region in a megaregion if necessary
|
// Get terrain height for sub-region in a megaregion if necessary
|
||||||
int X = (int)((m_scene.RegionInfo.WorldLocX) + pos.X);
|
|
||||||
int Y = (int)((m_scene.RegionInfo.WorldLocY) + pos.Y);
|
|
||||||
GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y);
|
|
||||||
// If X and Y is NaN, target_region will be null
|
|
||||||
if (target_region == null)
|
|
||||||
return;
|
|
||||||
UUID target_regionID = target_region.RegionID;
|
|
||||||
Scene targetScene = m_scene;
|
|
||||||
|
|
||||||
if (!SceneManager.Instance.TryGetScene(target_regionID, out targetScene))
|
//COMMENT: If its only nessesary in a megaregion, why do it on normal region's too?
|
||||||
targetScene = m_scene;
|
|
||||||
|
|
||||||
float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % regionSize.X), (int)(pos.Y % regionSize.Y)];
|
if (regionCombinerModule != null)
|
||||||
pos.Z = Math.Max(terrainHeight, pos.Z);
|
{
|
||||||
|
int X = (int)((m_scene.RegionInfo.WorldLocX) + pos.X);
|
||||||
|
int Y = (int)((m_scene.RegionInfo.WorldLocY) + pos.Y);
|
||||||
|
GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y);
|
||||||
|
// If X and Y is NaN, target_region will be null
|
||||||
|
if (target_region == null)
|
||||||
|
return;
|
||||||
|
UUID target_regionID = target_region.RegionID;
|
||||||
|
Scene targetScene = m_scene;
|
||||||
|
|
||||||
// Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is
|
if (!SceneManager.Instance.TryGetScene(target_regionID, out targetScene))
|
||||||
// always slightly higher than the actual terrain height.
|
targetScene = m_scene;
|
||||||
// FIXME: This constrains NPC movements as well, so should be somewhere else.
|
|
||||||
if (pos.Z - terrainHeight < 0.2)
|
float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % regionSize.X), (int)(pos.Y % regionSize.Y)];
|
||||||
pos.Z = terrainHeight;
|
pos.Z = Math.Max(terrainHeight, pos.Z);
|
||||||
|
|
||||||
|
// Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is
|
||||||
|
// always slightly higher than the actual terrain height.
|
||||||
|
// FIXME: This constrains NPC movements as well, so should be somewhere else.
|
||||||
|
if (pos.Z - terrainHeight < 0.2)
|
||||||
|
pos.Z = terrainHeight;
|
||||||
|
|
||||||
|
if (noFly)
|
||||||
|
Flying = false;
|
||||||
|
else if (pos.Z > terrainHeight)
|
||||||
|
Flying = true;
|
||||||
|
}
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}",
|
// "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}",
|
||||||
// Name, pos, terrainHeight, m_scene.RegionInfo.RegionName);
|
// Name, pos, terrainHeight, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
if (noFly)
|
if (noFly)
|
||||||
Flying = false;
|
Flying = false;
|
||||||
else if (pos.Z > terrainHeight)
|
|
||||||
Flying = true;
|
|
||||||
|
|
||||||
LandAtTarget = landAtTarget;
|
LandAtTarget = landAtTarget;
|
||||||
MovingToTarget = true;
|
MovingToTarget = true;
|
||||||
|
|
Loading…
Reference in New Issue