diff options
Diffstat (limited to '')
4 files changed, 52 insertions, 27 deletions
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs index 5e2eeeb..1e1d5e3 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs | |||
@@ -44,8 +44,9 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin | |||
44 | private bool flying; | 44 | private bool flying; |
45 | private bool iscolliding; | 45 | private bool iscolliding; |
46 | 46 | ||
47 | public BasicActor() | 47 | public BasicActor(Vector3 size) |
48 | { | 48 | { |
49 | Size = size; | ||
49 | } | 50 | } |
50 | 51 | ||
51 | public override int PhysicsActorType | 52 | public override int PhysicsActorType |
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsScene.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsScene.cs index 1ceed1a..2e14216 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsScene.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsScene.cs | |||
@@ -56,7 +56,7 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin | |||
56 | } | 56 | } |
57 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | 57 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) |
58 | { | 58 | { |
59 | BasicActor act = new BasicActor(); | 59 | BasicActor act = new BasicActor(size); |
60 | act.Position = position; | 60 | act.Position = position; |
61 | act.Flying = isFlying; | 61 | act.Flying = isFlying; |
62 | _actors.Add(act); | 62 | _actors.Add(act); |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 73c1c02..f2bb4bf 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 | ||
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs index a6c2eca..f716687 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs | |||
@@ -1699,7 +1699,10 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1699 | 1699 | ||
1700 | public override void RemoveAvatar(PhysicsActor actor) | 1700 | public override void RemoveAvatar(PhysicsActor actor) |
1701 | { | 1701 | { |
1702 | //m_log.Debug("[PHYSICS]:ODELOCK"); | 1702 | // m_log.DebugFormat( |
1703 | // "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2}", | ||
1704 | // actor.Name, actor.LocalID, Name); | ||
1705 | |||
1703 | ((OdeCharacter) actor).Destroy(); | 1706 | ((OdeCharacter) actor).Destroy(); |
1704 | } | 1707 | } |
1705 | 1708 | ||
@@ -1709,6 +1712,10 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1709 | { | 1712 | { |
1710 | _characters.Add(chr); | 1713 | _characters.Add(chr); |
1711 | 1714 | ||
1715 | // m_log.DebugFormat( | ||
1716 | // "[ODE SCENE]: Adding physics character {0} {1} to physics scene {2}. Count now {3}", | ||
1717 | // chr.Name, chr.LocalID, Name, _characters.Count); | ||
1718 | |||
1712 | if (chr.bad) | 1719 | if (chr.bad) |
1713 | m_log.ErrorFormat("[ODE SCENE]: Added BAD actor {0} to characters list", chr.m_uuid); | 1720 | m_log.ErrorFormat("[ODE SCENE]: Added BAD actor {0} to characters list", chr.m_uuid); |
1714 | } | 1721 | } |
@@ -1723,11 +1730,19 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1723 | internal void RemoveCharacter(OdeCharacter chr) | 1730 | internal void RemoveCharacter(OdeCharacter chr) |
1724 | { | 1731 | { |
1725 | if (_characters.Contains(chr)) | 1732 | if (_characters.Contains(chr)) |
1733 | { | ||
1726 | _characters.Remove(chr); | 1734 | _characters.Remove(chr); |
1735 | |||
1736 | // m_log.DebugFormat( | ||
1737 | // "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2}. Count now {3}", | ||
1738 | // chr.Name, chr.LocalID, Name, _characters.Count); | ||
1739 | } | ||
1727 | else | 1740 | else |
1741 | { | ||
1728 | m_log.ErrorFormat( | 1742 | m_log.ErrorFormat( |
1729 | "[ODE SCENE]: Tried to remove character {0} {1} but they are not in the list!", | 1743 | "[ODE SCENE]: Tried to remove character {0} {1} but they are not in the list!", |
1730 | chr.Name, chr.LocalID); | 1744 | chr.Name, chr.LocalID); |
1745 | } | ||
1731 | } | 1746 | } |
1732 | 1747 | ||
1733 | private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation, | 1748 | private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation, |
@@ -1765,7 +1780,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1765 | public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, | 1780 | public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, |
1766 | Vector3 size, Quaternion rotation, bool isPhysical, uint localid) | 1781 | Vector3 size, Quaternion rotation, bool isPhysical, uint localid) |
1767 | { | 1782 | { |
1768 | // m_log.DebugFormat("[ODE SCENE]: Adding physics actor to {0} {1}", primName, localid); | 1783 | // m_log.DebugFormat("[ODE SCENE]: Adding physics prim {0} {1} to physics scene {2}", primName, localid, Name); |
1769 | 1784 | ||
1770 | return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid); | 1785 | return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid); |
1771 | } | 1786 | } |
@@ -2755,6 +2770,10 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2755 | { | 2770 | { |
2756 | foreach (OdeCharacter actor in defects) | 2771 | foreach (OdeCharacter actor in defects) |
2757 | { | 2772 | { |
2773 | m_log.ErrorFormat( | ||
2774 | "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2} due to defect found when moving", | ||
2775 | actor.Name, actor.LocalID, Name); | ||
2776 | |||
2758 | RemoveCharacter(actor); | 2777 | RemoveCharacter(actor); |
2759 | actor.DestroyOdeStructures(); | 2778 | actor.DestroyOdeStructures(); |
2760 | } | 2779 | } |
@@ -2825,6 +2844,10 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2825 | { | 2844 | { |
2826 | foreach (OdeCharacter actor in defects) | 2845 | foreach (OdeCharacter actor in defects) |
2827 | { | 2846 | { |
2847 | m_log.ErrorFormat( | ||
2848 | "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2} due to defect found when updating position and velocity", | ||
2849 | actor.Name, actor.LocalID, Name); | ||
2850 | |||
2828 | RemoveCharacter(actor); | 2851 | RemoveCharacter(actor); |
2829 | actor.DestroyOdeStructures(); | 2852 | actor.DestroyOdeStructures(); |
2830 | } | 2853 | } |