diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | 144 |
1 files changed, 39 insertions, 105 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index c39f34f..68e405e 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | |||
@@ -58,20 +58,18 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
58 | { | 58 | { |
59 | get { return m_movementAnimation; } | 59 | get { return m_movementAnimation; } |
60 | } | 60 | } |
61 | // protected string m_movementAnimation = "DEFAULT"; //KF: 'DEFAULT' does not exist! | 61 | protected string m_movementAnimation = "CROUCH"; |
62 | protected string m_movementAnimation = "CROUCH"; //KF: CROUCH ensures reliable Av Anim. init. | ||
63 | private int m_animTickFall; | 62 | private int m_animTickFall; |
64 | // private int m_animTickJump; | ||
65 | public int m_animTickJump; // ScenePresence has to see this to control +Z force | 63 | public int m_animTickJump; // ScenePresence has to see this to control +Z force |
66 | public bool m_jumping = false; // Add for jumping | 64 | public bool m_jumping = false; |
67 | public float m_jumpVelocity = 0f; // Add for jumping | 65 | public float m_jumpVelocity = 0f; |
68 | private int m_landing = 0; // Add for jumping | 66 | private int m_landing = 0; |
69 | public bool Falling | 67 | public bool Falling |
70 | { | 68 | { |
71 | get { return m_falling; } | 69 | get { return m_falling; } |
72 | } | 70 | } |
73 | private bool m_falling = false; // Add for falling | 71 | private bool m_falling = false; |
74 | private float m_fallHeight; // Add for falling | 72 | private float m_fallHeight; |
75 | 73 | ||
76 | /// <value> | 74 | /// <value> |
77 | /// The scene presence that this animator applies to | 75 | /// The scene presence that this animator applies to |
@@ -133,9 +131,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
133 | 131 | ||
134 | public void ResetAnimations() | 132 | public void ResetAnimations() |
135 | { | 133 | { |
136 | Console.WriteLine("ResetA............."); | ||
137 | m_animations.Clear(); | 134 | m_animations.Clear(); |
138 | TrySetMovementAnimation("STAND"); | 135 | TrySetMovementAnimation("STAND"); |
139 | } | 136 | } |
140 | 137 | ||
141 | /// <summary> | 138 | /// <summary> |
@@ -165,16 +162,11 @@ TrySetMovementAnimation("STAND"); | |||
165 | /// </summary> | 162 | /// </summary> |
166 | public string GetMovementAnimation() | 163 | public string GetMovementAnimation() |
167 | { | 164 | { |
168 | //Console.WriteLine("GMA-------"); //## | 165 | const float FALL_DELAY = 800f; |
169 | //#@ const float FALL_DELAY = 0.33f; | 166 | const float PREJUMP_DELAY = 200f; |
170 | const float FALL_DELAY = 800f; //## mS | 167 | const float JUMP_PERIOD = 800f; |
171 | //rm for jumping const float PREJUMP_DELAY = 0.25f; | ||
172 | const float PREJUMP_DELAY = 200f; // mS add for jumping | ||
173 | const float JUMP_PERIOD = 800f; // mS add for jumping | ||
174 | #region Inputs | 168 | #region Inputs |
175 | |||
176 | AgentManager.ControlFlags controlFlags = (AgentManager.ControlFlags)m_scenePresence.AgentControlFlags; | 169 | AgentManager.ControlFlags controlFlags = (AgentManager.ControlFlags)m_scenePresence.AgentControlFlags; |
177 | // m_log.DebugFormat("[ANIM]: Control flags: {0}", controlFlags); | ||
178 | PhysicsActor actor = m_scenePresence.PhysicsActor; | 170 | PhysicsActor actor = m_scenePresence.PhysicsActor; |
179 | 171 | ||
180 | // Create forward and left vectors from the current avatar rotation | 172 | // Create forward and left vectors from the current avatar rotation |
@@ -196,16 +188,15 @@ TrySetMovementAnimation("STAND"); | |||
196 | 188 | ||
197 | // Direction in which the avatar is trying to move | 189 | // Direction in which the avatar is trying to move |
198 | Vector3 move = Vector3.Zero; | 190 | Vector3 move = Vector3.Zero; |
191 | if (heldForward) { move.X += fwd.X; move.Y += fwd.Y; } | ||
199 | if (heldBack) { move.X -= fwd.X; move.Y -= fwd.Y; } | 192 | if (heldBack) { move.X -= fwd.X; move.Y -= fwd.Y; } |
200 | if (heldLeft) { move.X += left.X; move.Y += left.Y; } | 193 | if (heldLeft) { move.X += left.X; move.Y += left.Y; } |
201 | if (heldRight) { move.X -= left.X; move.Y -= left.Y; } | 194 | if (heldRight) { move.X -= left.X; move.Y -= left.Y; } |
202 | if (heldUp) { move.Z += 1; } | 195 | if (heldUp) { move.Z += 1; } |
203 | if (heldDown) { move.Z -= 1; } | 196 | if (heldDown) { move.Z -= 1; } |
204 | if (heldForward) { move.X += fwd.X; move.Y += fwd.Y; } | ||
205 | 197 | ||
206 | // Is the avatar trying to move? | 198 | // Is the avatar trying to move? |
207 | // bool moving = (move != Vector3.Zero); | 199 | // bool moving = (move != Vector3.Zero); |
208 | // rm for jumping bool jumping = m_animTickJump != 0; | ||
209 | #endregion Inputs | 200 | #endregion Inputs |
210 | 201 | ||
211 | #region Flying | 202 | #region Flying |
@@ -214,10 +205,10 @@ TrySetMovementAnimation("STAND"); | |||
214 | { | 205 | { |
215 | m_animTickFall = 0; | 206 | m_animTickFall = 0; |
216 | m_animTickJump = 0; | 207 | m_animTickJump = 0; |
217 | m_jumping = false; //add for jumping | 208 | m_jumping = false; |
218 | m_falling = true; //add for falling | 209 | m_falling = true; |
219 | m_jumpVelocity = 0f; //add for jumping | 210 | m_jumpVelocity = 0f; |
220 | actor.Selected = false; //add for jumping flag | 211 | actor.Selected = false; |
221 | m_fallHeight = actor.Position.Z; // save latest flying height | 212 | m_fallHeight = actor.Position.Z; // save latest flying height |
222 | 213 | ||
223 | if (move.X != 0f || move.Y != 0f) | 214 | if (move.X != 0f || move.Y != 0f) |
@@ -231,10 +222,9 @@ TrySetMovementAnimation("STAND"); | |||
231 | else if (move.Z < 0f) | 222 | else if (move.Z < 0f) |
232 | { | 223 | { |
233 | if (actor != null && actor.IsColliding) | 224 | if (actor != null && actor.IsColliding) |
234 | { //## | 225 | { |
235 | //Console.WriteLine("LAND FLYING"); // ## | ||
236 | return "LAND"; | 226 | return "LAND"; |
237 | } //# | 227 | } |
238 | else | 228 | else |
239 | return "HOVER_DOWN"; | 229 | return "HOVER_DOWN"; |
240 | } | 230 | } |
@@ -248,28 +238,22 @@ TrySetMovementAnimation("STAND"); | |||
248 | 238 | ||
249 | #region Falling/Floating/Landing | 239 | #region Falling/Floating/Landing |
250 | 240 | ||
251 | // rm for jumping if (actor == null || !actor.IsColliding) | 241 | if ((actor == null || !actor.IsColliding) && !m_jumping) |
252 | if ((actor == null || !actor.IsColliding) && !m_jumping) // add for jumping | ||
253 | { | 242 | { |
254 | // rm float fallElapsed = (float)(Environment.TickCount - m_animTickFall) / 1000f; | 243 | float fallElapsed = (float)(Environment.TickCount - m_animTickFall); |
255 | float fallElapsed = (float)(Environment.TickCount - m_animTickFall); // add, in mS | ||
256 | float fallVelocity = (actor != null) ? actor.Velocity.Z : 0.0f; | 244 | float fallVelocity = (actor != null) ? actor.Velocity.Z : 0.0f; |
257 | //Console.WriteLine("falling t={0} v={1}", fallElapsed, fallVelocity); //## | ||
258 | 245 | ||
259 | // rm for fall if (m_animTickFall == 0 || (fallElapsed > FALL_DELAY && fallVelocity >= 0.0f)) | 246 | if (!m_jumping && (fallVelocity < -3.0f) ) m_falling = true; |
260 | if (!m_jumping && (fallVelocity < -3.0f) ) m_falling = true; // add for falling and jumping | ||
261 | 247 | ||
262 | if (m_animTickFall == 0 || (fallVelocity >= 0.0f)) // add for jumping | 248 | if (m_animTickFall == 0 || (fallVelocity >= 0.0f)) |
263 | // not falling yet or going up | ||
264 | { | 249 | { |
250 | // not falling yet, or going up | ||
265 | // reset start of fall time | 251 | // reset start of fall time |
266 | m_animTickFall = Environment.TickCount; | 252 | m_animTickFall = Environment.TickCount; |
267 | } | 253 | } |
268 | // else if (!jumping && fallElapsed > FALL_DELAY) | 254 | else if (!m_jumping && (fallElapsed > FALL_DELAY) && (fallVelocity < -3.0f) && (m_scenePresence.WasFlying)) |
269 | else if (!m_jumping && (fallElapsed > FALL_DELAY) && (fallVelocity < -3.0f) && (m_scenePresence.WasFlying)) // add for falling and jumping | ||
270 | { | 255 | { |
271 | // Falling long enough to trigger the animation | 256 | // Falling long enough to trigger the animation |
272 | //Console.WriteLine("FALLDOWN"); //## | ||
273 | return "FALLDOWN"; | 257 | return "FALLDOWN"; |
274 | } | 258 | } |
275 | 259 | ||
@@ -287,12 +271,11 @@ TrySetMovementAnimation("STAND"); | |||
287 | 271 | ||
288 | if ((move.Z > 0f) && (!m_jumping)) | 272 | if ((move.Z > 0f) && (!m_jumping)) |
289 | { | 273 | { |
290 | //Console.WriteLine("PJ {0}", jumptime); //## | ||
291 | // Start jumping, prejump | 274 | // Start jumping, prejump |
292 | m_animTickFall = 0; | 275 | m_animTickFall = 0; |
293 | m_jumping = true; | 276 | m_jumping = true; |
294 | m_falling = false; | 277 | m_falling = false; |
295 | actor.Selected = true; // borrowed for jmping flag | 278 | actor.Selected = true; // borrowed for jumping flag |
296 | m_animTickJump = Environment.TickCount; | 279 | m_animTickJump = Environment.TickCount; |
297 | m_jumpVelocity = 0.35f; | 280 | m_jumpVelocity = 0.35f; |
298 | return "PREJUMP"; | 281 | return "PREJUMP"; |
@@ -302,7 +285,6 @@ TrySetMovementAnimation("STAND"); | |||
302 | { | 285 | { |
303 | if ( (jumptime > (JUMP_PERIOD * 1.5f)) && actor.IsColliding) | 286 | if ( (jumptime > (JUMP_PERIOD * 1.5f)) && actor.IsColliding) |
304 | { | 287 | { |
305 | //Console.WriteLine("LA {0}", jumptime); //## | ||
306 | // end jumping | 288 | // end jumping |
307 | m_jumping = false; | 289 | m_jumping = false; |
308 | m_falling = false; | 290 | m_falling = false; |
@@ -313,14 +295,12 @@ TrySetMovementAnimation("STAND"); | |||
313 | } | 295 | } |
314 | else if (jumptime > JUMP_PERIOD) | 296 | else if (jumptime > JUMP_PERIOD) |
315 | { | 297 | { |
316 | //Console.WriteLine("JD {0}", jumptime); //## | ||
317 | // jump down | 298 | // jump down |
318 | m_jumpVelocity = 0f; | 299 | m_jumpVelocity = 0f; |
319 | return "JUMP"; | 300 | return "JUMP"; |
320 | } | 301 | } |
321 | else if (jumptime > PREJUMP_DELAY) | 302 | else if (jumptime > PREJUMP_DELAY) |
322 | { | 303 | { |
323 | //Console.WriteLine("JU {0}", jumptime); //## | ||
324 | // jump up | 304 | // jump up |
325 | m_jumping = true; | 305 | m_jumping = true; |
326 | m_jumpVelocity = 10f; | 306 | m_jumpVelocity = 10f; |
@@ -328,7 +308,7 @@ TrySetMovementAnimation("STAND"); | |||
328 | } | 308 | } |
329 | } | 309 | } |
330 | 310 | ||
331 | #endregion Jumping // end added section | 311 | #endregion Jumping |
332 | 312 | ||
333 | #region Ground Movement | 313 | #region Ground Movement |
334 | 314 | ||
@@ -338,72 +318,36 @@ TrySetMovementAnimation("STAND"); | |||
338 | m_animTickFall = Environment.TickCount; | 318 | m_animTickFall = Environment.TickCount; |
339 | // TODO: SOFT_LAND support | 319 | // TODO: SOFT_LAND support |
340 | float fallHeight = m_fallHeight - actor.Position.Z; | 320 | float fallHeight = m_fallHeight - actor.Position.Z; |
341 | //Console.WriteLine("Hit from {0}", fallHeight); //## | 321 | if (fallHeight > 15.0f) |
342 | if (fallHeight > 15.0f) // add for falling | ||
343 | return "STANDUP"; | 322 | return "STANDUP"; |
344 | else if (fallHeight > 8.0f) // add for falling | 323 | else if (fallHeight > 8.0f) |
345 | return "SOFT_LAND"; // add for falling | 324 | return "SOFT_LAND"; |
346 | else // add for falling | 325 | else |
347 | return "LAND"; // add for falling | 326 | return "LAND"; |
348 | } | 327 | } |
349 | // rm jumping float landElapsed = (float)(Environment.TickCount - m_animTickFall) / 1000f; | ||
350 | // rm jumping if ((m_animTickFall != 0) && (landElapsed <= FALL_DELAY)) | ||
351 | // rm for landing return "LAND"; | ||
352 | else if ((m_movementAnimation == "LAND") || (m_movementAnimation == "SOFT_LAND") || (m_movementAnimation == "STANDUP")) | 328 | else if ((m_movementAnimation == "LAND") || (m_movementAnimation == "SOFT_LAND") || (m_movementAnimation == "STANDUP")) |
353 | { | 329 | { |
354 | int landElapsed = Environment.TickCount - m_animTickFall; // add for jumping | 330 | int landElapsed = Environment.TickCount - m_animTickFall; |
355 | int limit = 1000; // add for jumping | 331 | int limit = 1000; |
356 | if(m_movementAnimation == "LAND") limit = 350; // add for jumping | 332 | if(m_movementAnimation == "LAND") limit = 350; |
357 | // NB if the above is set too long a weird anim reset from some place prevents STAND from being sent to client | 333 | // NB if the above is set too long a weird anim reset from some place prevents STAND from being sent to client |
358 | 334 | ||
359 | if ((m_animTickFall != 0) && (landElapsed <= limit)) // add for jumping | 335 | if ((m_animTickFall != 0) && (landElapsed <= limit)) |
360 | { | 336 | { |
361 | //Console.WriteLine("Lelapse {0}", m_movementAnimation); //## | ||
362 | return m_movementAnimation; | 337 | return m_movementAnimation; |
363 | } | 338 | } |
364 | else | 339 | else |
365 | { | 340 | { |
366 | //Console.WriteLine("end/STAND"); //## | ||
367 | m_fallHeight = actor.Position.Z; // save latest flying height | 341 | m_fallHeight = actor.Position.Z; // save latest flying height |
368 | return "STAND"; | 342 | return "STAND"; |
369 | } | 343 | } |
370 | } | 344 | } |
371 | /* This section removed, replaced by jumping section | ||
372 | m_animTickFall = 0; | ||
373 | |||
374 | if (move.Z > 0.2f) | ||
375 | { | ||
376 | // Jumping | ||
377 | if (!jumping) | ||
378 | { | ||
379 | // Begin prejump | ||
380 | m_animTickJump = Environment.TickCount; | ||
381 | return "PREJUMP"; | ||
382 | } | ||
383 | else if (Environment.TickCount - m_animTickJump > PREJUMP_DELAY * 800.0f) | ||
384 | { | ||
385 | // Start actual jump | ||
386 | if (m_animTickJump == -1) | ||
387 | { | ||
388 | // Already jumping! End the current jump | ||
389 | m_animTickJump = 0; | ||
390 | return "JUMP"; | ||
391 | } | ||
392 | 345 | ||
393 | m_animTickJump = -1; | ||
394 | return "JUMP"; | ||
395 | } | ||
396 | } | ||
397 | else | ||
398 | { | ||
399 | // Not jumping | ||
400 | m_animTickJump = 0; | ||
401 | */ | ||
402 | // next section moved outside paren. and realigned for jumping | 346 | // next section moved outside paren. and realigned for jumping |
403 | if (move.X != 0f || move.Y != 0f) | 347 | if (move.X != 0f || move.Y != 0f) |
404 | { | 348 | { |
405 | m_fallHeight = actor.Position.Z; // save latest flying height | 349 | m_fallHeight = actor.Position.Z; // save latest flying height |
406 | m_falling = false; // Add for falling | 350 | m_falling = false; |
407 | // Walking / crouchwalking / running | 351 | // Walking / crouchwalking / running |
408 | if (move.Z < 0f) | 352 | if (move.Z < 0f) |
409 | return "CROUCHWALK"; | 353 | return "CROUCHWALK"; |
@@ -412,10 +356,9 @@ TrySetMovementAnimation("STAND"); | |||
412 | else | 356 | else |
413 | return "WALK"; | 357 | return "WALK"; |
414 | } | 358 | } |
415 | // rm for jumping else | 359 | else if (!m_jumping) |
416 | else if (!m_jumping) // add for jumping | ||
417 | { | 360 | { |
418 | m_falling = false; // Add for falling | 361 | m_falling = false; |
419 | // Not walking | 362 | // Not walking |
420 | if (move.Z < 0) | 363 | if (move.Z < 0) |
421 | return "CROUCH"; | 364 | return "CROUCH"; |
@@ -426,10 +369,9 @@ TrySetMovementAnimation("STAND"); | |||
426 | else | 369 | else |
427 | return "STAND"; | 370 | return "STAND"; |
428 | } | 371 | } |
429 | // end section realign for jumping | ||
430 | #endregion Ground Movement | 372 | #endregion Ground Movement |
431 | 373 | ||
432 | m_falling = false; // Add for falling | 374 | m_falling = false; |
433 | return m_movementAnimation; | 375 | return m_movementAnimation; |
434 | } | 376 | } |
435 | 377 | ||
@@ -439,15 +381,7 @@ TrySetMovementAnimation("STAND"); | |||
439 | public void UpdateMovementAnimations() | 381 | public void UpdateMovementAnimations() |
440 | { | 382 | { |
441 | m_movementAnimation = GetMovementAnimation(); | 383 | m_movementAnimation = GetMovementAnimation(); |
442 | /* if (m_movementAnimation == "PREJUMP" && !m_scenePresence.Scene.m_usePreJump) | 384 | TrySetMovementAnimation(m_movementAnimation); |
443 | { | ||
444 | // This was the previous behavior before PREJUMP | ||
445 | TrySetMovementAnimation("JUMP"); | ||
446 | } | ||
447 | else | ||
448 | { removed for jumping */ | ||
449 | TrySetMovementAnimation(m_movementAnimation); | ||
450 | // rm for jumping } | ||
451 | } | 385 | } |
452 | 386 | ||
453 | public UUID[] GetAnimationArray() | 387 | public UUID[] GetAnimationArray() |