diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 1363cfd..68999fc 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | |||
@@ -137,7 +137,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
137 | internal IntPtr Body = IntPtr.Zero; | 137 | internal IntPtr Body = IntPtr.Zero; |
138 | private OdeScene _parent_scene; | 138 | private OdeScene _parent_scene; |
139 | internal IntPtr Shell = IntPtr.Zero; | 139 | internal IntPtr Shell = IntPtr.Zero; |
140 | internal IntPtr Amotor = IntPtr.Zero; | 140 | private IntPtr Amotor = IntPtr.Zero; |
141 | private d.Mass ShellMass; | 141 | private d.Mass ShellMass; |
142 | 142 | ||
143 | private int m_eventsubscription = 0; | 143 | private int m_eventsubscription = 0; |
@@ -195,13 +195,10 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
195 | // new d.Matrix3(0.5f, 0.7071068f, 0.5f, -0.7071068f, 0f, 0.7071068f, 0.5f, -0.7071068f, | 195 | // new d.Matrix3(0.5f, 0.7071068f, 0.5f, -0.7071068f, 0f, 0.7071068f, 0.5f, -0.7071068f, |
196 | // 0.5f); | 196 | // 0.5f); |
197 | 197 | ||
198 | for (int i = 0; i < 11; i++) | 198 | // We can set taint and actual to be the same here, since the entire character will be set up when the |
199 | { | 199 | // m_tainted_isPhysical is processed. |
200 | m_colliderarr[i] = false; | 200 | SetTaintedCapsuleLength(size); |
201 | } | 201 | CAPSULE_LENGTH = m_tainted_CAPSULE_LENGTH; |
202 | CAPSULE_LENGTH = (size.Z * 1.15f) - CAPSULE_RADIUS * 2.0f; | ||
203 | //m_log.Info("[ODE CHARACTER]: " + CAPSULE_LENGTH.ToString()); | ||
204 | m_tainted_CAPSULE_LENGTH = CAPSULE_LENGTH; | ||
205 | 202 | ||
206 | m_isPhysical = false; // current status: no ODE information exists | 203 | m_isPhysical = false; // current status: no ODE information exists |
207 | m_tainted_isPhysical = true; // new tainted status: need to create ODE information | 204 | m_tainted_isPhysical = true; // new tainted status: need to create ODE information |
@@ -457,24 +454,28 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
457 | get { return new Vector3(CAPSULE_RADIUS * 2, CAPSULE_RADIUS * 2, CAPSULE_LENGTH); } | 454 | get { return new Vector3(CAPSULE_RADIUS * 2, CAPSULE_RADIUS * 2, CAPSULE_LENGTH); } |
458 | set | 455 | set |
459 | { | 456 | { |
460 | if (value.IsFinite()) | 457 | SetTaintedCapsuleLength(value); |
461 | { | ||
462 | m_pidControllerActive = true; | ||
463 | |||
464 | Vector3 SetSize = value; | ||
465 | m_tainted_CAPSULE_LENGTH = (SetSize.Z * 1.15f) - CAPSULE_RADIUS * 2.0f; | ||
466 | // m_log.Info("[ODE CHARACTER]: " + CAPSULE_LENGTH); | ||
467 | 458 | ||
468 | // If we reset velocity here, then an avatar stalls when it crosses a border for the first time | 459 | // If we reset velocity here, then an avatar stalls when it crosses a border for the first time |
469 | // (as the height of the new root agent is set). | 460 | // (as the height of the new root agent is set). |
470 | // Velocity = Vector3.Zero; | 461 | // Velocity = Vector3.Zero; |
471 | 462 | ||
472 | _parent_scene.AddPhysicsActorTaint(this); | 463 | _parent_scene.AddPhysicsActorTaint(this); |
473 | } | 464 | } |
474 | else | 465 | } |
475 | { | 466 | |
476 | m_log.WarnFormat("[ODE CHARACTER]: Got a NaN Size from Scene on {0}", Name); | 467 | private void SetTaintedCapsuleLength(Vector3 size) |
477 | } | 468 | { |
469 | if (size.IsFinite()) | ||
470 | { | ||
471 | m_pidControllerActive = true; | ||
472 | |||
473 | m_tainted_CAPSULE_LENGTH = (size.Z * 1.15f) - CAPSULE_RADIUS * 2.0f; | ||
474 | // m_log.Info("[ODE CHARACTER]: " + CAPSULE_LENGTH); | ||
475 | } | ||
476 | else | ||
477 | { | ||
478 | m_log.WarnFormat("[ODE CHARACTER]: Got a NaN Size for {0} in {1}", Name, _parent_scene.Name); | ||
478 | } | 479 | } |
479 | } | 480 | } |
480 | 481 | ||
@@ -549,8 +550,8 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
549 | { | 550 | { |
550 | get | 551 | get |
551 | { | 552 | { |
552 | float AVvolume = (float) (Math.PI*Math.Pow(CAPSULE_RADIUS, 2)*CAPSULE_LENGTH); | 553 | float AVvolume = (float)(Math.PI * Math.Pow(CAPSULE_RADIUS, 2) * CAPSULE_LENGTH); |
553 | return m_density*AVvolume; | 554 | return m_density * AVvolume; |
554 | } | 555 | } |
555 | } | 556 | } |
556 | 557 | ||