diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 772b613..73fe1b7 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2460,6 +2460,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2460 | || pos.Z < 0) | 2460 | || pos.Z < 0) |
2461 | return; | 2461 | return; |
2462 | 2462 | ||
2463 | Scene targetScene = m_scene; | ||
2464 | |||
2463 | // Vector3 heightAdjust = new Vector3(0, 0, Appearance.AvatarHeight / 2); | 2465 | // Vector3 heightAdjust = new Vector3(0, 0, Appearance.AvatarHeight / 2); |
2464 | // pos += heightAdjust; | 2466 | // pos += heightAdjust; |
2465 | // | 2467 | // |
@@ -2474,34 +2476,32 @@ namespace OpenSim.Region.Framework.Scenes | |||
2474 | 2476 | ||
2475 | //COMMENT: If its only nessesary in a megaregion, why do it on normal region's too? | 2477 | //COMMENT: If its only nessesary in a megaregion, why do it on normal region's too? |
2476 | 2478 | ||
2477 | if (regionCombinerModule != null) | 2479 | if (regionCombinerModule != null) |
2478 | { | 2480 | { |
2479 | int X = (int)((m_scene.RegionInfo.WorldLocX) + pos.X); | 2481 | int x = (int)((m_scene.RegionInfo.WorldLocX) + pos.X); |
2480 | int Y = (int)((m_scene.RegionInfo.WorldLocY) + pos.Y); | 2482 | int y = (int)((m_scene.RegionInfo.WorldLocY) + pos.Y); |
2481 | GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y); | 2483 | GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, x, y); |
2482 | // If X and Y is NaN, target_region will be null | 2484 | |
2483 | if (target_region == null) | 2485 | // If X and Y is NaN, target_region will be null |
2484 | return; | 2486 | if (target_region == null) |
2485 | UUID target_regionID = target_region.RegionID; | 2487 | return; |
2486 | Scene targetScene = m_scene; | 2488 | |
2487 | 2489 | SceneManager.Instance.TryGetScene(target_region.RegionID, out targetScene); | |
2488 | if (!SceneManager.Instance.TryGetScene(target_regionID, out targetScene)) | 2490 | } |
2489 | targetScene = m_scene; | 2491 | |
2490 | 2492 | float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % regionSize.X), (int)(pos.Y % regionSize.Y)]; | |
2491 | float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % regionSize.X), (int)(pos.Y % regionSize.Y)]; | 2493 | pos.Z = Math.Max(terrainHeight, pos.Z); |
2492 | pos.Z = Math.Max(terrainHeight, pos.Z); | 2494 | |
2493 | 2495 | // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is | |
2494 | // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is | 2496 | // always slightly higher than the actual terrain height. |
2495 | // always slightly higher than the actual terrain height. | 2497 | // FIXME: This constrains NPC movements as well, so should be somewhere else. |
2496 | // FIXME: This constrains NPC movements as well, so should be somewhere else. | 2498 | if (pos.Z - terrainHeight < 0.2) |
2497 | if (pos.Z - terrainHeight < 0.2) | 2499 | pos.Z = terrainHeight; |
2498 | pos.Z = terrainHeight; | 2500 | |
2499 | 2501 | if (noFly) | |
2500 | if (noFly) | 2502 | Flying = false; |
2501 | Flying = false; | 2503 | else if (pos.Z > terrainHeight) |
2502 | else if (pos.Z > terrainHeight) | 2504 | Flying = true; |
2503 | Flying = true; | ||
2504 | } | ||
2505 | 2505 | ||
2506 | // m_log.DebugFormat( | 2506 | // m_log.DebugFormat( |
2507 | // "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", | 2507 | // "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", |