diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Physics/POSPlugin/POSPlugin.cs | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs index 15b3415..802b7b2 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs | |||
@@ -181,8 +181,9 @@ namespace OpenSim.Region.Physics.POSPlugin | |||
181 | } | 181 | } |
182 | 182 | ||
183 | bool forcedZ = false; | 183 | bool forcedZ = false; |
184 | 184 | character.Position.X = character.Position.X + (character._target_velocity.X * timeStep); | |
185 | float terrainheight = _heightMap[(int)(character.Position.Y + (character._target_velocity.Y * timeStep)) * 256 + (int)(character.Position.X + (character._target_velocity.X * timeStep))]; | 185 | character.Position.Y = character.Position.Y + (character._target_velocity.Y * timeStep); |
186 | float terrainheight = _heightMap[(int)character.Position.Y * 256 + (int)character.Position.X]; | ||
186 | if (character.Position.Z + (character._target_velocity.Z * timeStep) < terrainheight + 2) | 187 | if (character.Position.Z + (character._target_velocity.Z * timeStep) < terrainheight + 2) |
187 | { | 188 | { |
188 | character.Position.Z = terrainheight + 1.0f; | 189 | character.Position.Z = terrainheight + 1.0f; |
@@ -202,24 +203,23 @@ namespace OpenSim.Region.Physics.POSPlugin | |||
202 | character.Position.Z = oldposZ; // first try Z axis | 203 | character.Position.Z = oldposZ; // first try Z axis |
203 | if (check_all_prims(character)) | 204 | if (check_all_prims(character)) |
204 | { | 205 | { |
205 | character.Position.Z = oldposZ + 0.5f; // try harder | 206 | character.Position.Z = oldposZ + 0.4f; // try harder |
207 | if (check_all_prims(character)) | ||
208 | { | ||
209 | character.Position.X = oldposX; | ||
210 | character.Position.Y = oldposY; | ||
211 | character.Position.Z = oldposZ; | ||
212 | } | ||
213 | else | ||
214 | { | ||
215 | forcedZ = true; | ||
216 | } | ||
206 | } | 217 | } |
207 | else | 218 | else |
208 | { | 219 | { |
209 | forcedZ = true; | 220 | forcedZ = true; |
210 | } | 221 | } |
211 | } | 222 | } |
212 | character.Position.X = character.Position.X + (character._target_velocity.X * timeStep); | ||
213 | if (check_all_prims(character)) | ||
214 | { | ||
215 | character.Position.X = oldposX; | ||
216 | } | ||
217 | character.Position.Y = character.Position.Y + (character._target_velocity.Y * timeStep); | ||
218 | if (check_all_prims(character)) | ||
219 | { | ||
220 | character.Position.Y = oldposY; | ||
221 | } | ||
222 | |||
223 | 223 | ||
224 | if (character.Position.Y < 0) | 224 | if (character.Position.Y < 0) |
225 | { | 225 | { |