diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Physics/POSPlugin/POSPlugin.cs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs index 8e74b5f..2e0f2e3 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs | |||
@@ -173,14 +173,14 @@ namespace OpenSim.Region.Physics.POSPlugin | |||
173 | character._target_velocity.Z += gravity * timeStep; | 173 | character._target_velocity.Z += gravity * timeStep; |
174 | } | 174 | } |
175 | 175 | ||
176 | bool forcedZ = false; | ||
176 | character.Position.X = character.Position.X + (character._target_velocity.X * timeStep); | 177 | character.Position.X = character.Position.X + (character._target_velocity.X * timeStep); |
177 | character.Position.Y = character.Position.Y + (character._target_velocity.Y * timeStep); | 178 | character.Position.Y = character.Position.Y + (character._target_velocity.Y * timeStep); |
178 | float terrainheight = _heightMap[(int)character.Position.Y * 256 + (int)character.Position.X]; | 179 | float terrainheight = _heightMap[(int)character.Position.Y * 256 + (int)character.Position.X]; |
179 | if (character.Position.Z + (character._target_velocity.Z * timeStep) < terrainheight + 2) | 180 | if (character.Position.Z + (character._target_velocity.Z * timeStep) < terrainheight + 2) |
180 | { | 181 | { |
181 | character.Position.Z = terrainheight + 1.0f; | 182 | character.Position.Z = terrainheight + 1.0f; |
182 | character._target_velocity.Z = 0; | 183 | forcedZ = true; |
183 | character._velocity.Z = 0; | ||
184 | } | 184 | } |
185 | else | 185 | else |
186 | { | 186 | { |
@@ -205,12 +205,12 @@ namespace OpenSim.Region.Physics.POSPlugin | |||
205 | } | 205 | } |
206 | else | 206 | else |
207 | { | 207 | { |
208 | character._target_velocity.Z = 0; | 208 | forcedZ = true; |
209 | } | 209 | } |
210 | } | 210 | } |
211 | else | 211 | else |
212 | { | 212 | { |
213 | character._target_velocity.Z = 0; | 213 | forcedZ = true; |
214 | } | 214 | } |
215 | } | 215 | } |
216 | 216 | ||
@@ -234,6 +234,17 @@ namespace OpenSim.Region.Physics.POSPlugin | |||
234 | 234 | ||
235 | character._velocity.X = (character.Position.X - oldposX) / timeStep; | 235 | character._velocity.X = (character.Position.X - oldposX) / timeStep; |
236 | character._velocity.Y = (character.Position.Y - oldposY) / timeStep; | 236 | character._velocity.Y = (character.Position.Y - oldposY) / timeStep; |
237 | |||
238 | if (forcedZ) | ||
239 | { | ||
240 | character._velocity.Z = 0; | ||
241 | character._target_velocity.Z = 0; | ||
242 | character.RequestPhysicsterseUpdate(); | ||
243 | } | ||
244 | else | ||
245 | { | ||
246 | character._velocity.Z = (character.Position.Z - oldposZ) / timeStep; | ||
247 | } | ||
237 | } | 248 | } |
238 | } | 249 | } |
239 | 250 | ||