diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 59 | ||||
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 6 | ||||
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 26 |
3 files changed, 56 insertions, 35 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index beff239..6f5b6fe 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -285,16 +285,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
285 | 285 | ||
286 | #region Properties | 286 | #region Properties |
287 | 287 | ||
288 | protected PhysicsActor m_physicsActor; | ||
289 | |||
290 | /// <summary> | 288 | /// <summary> |
291 | /// Physical scene representation of this Avatar. | 289 | /// Physical scene representation of this Avatar. |
292 | /// </summary> | 290 | /// </summary> |
293 | public PhysicsActor PhysicsActor | 291 | public PhysicsActor PhysicsActor { get; private set; } |
294 | { | ||
295 | set { m_physicsActor = value; } | ||
296 | get { return m_physicsActor; } | ||
297 | } | ||
298 | 292 | ||
299 | private byte m_movementflag; | 293 | private byte m_movementflag; |
300 | 294 | ||
@@ -1032,18 +1026,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
1032 | { | 1026 | { |
1033 | if (PhysicsActor != null) | 1027 | if (PhysicsActor != null) |
1034 | { | 1028 | { |
1035 | try | 1029 | // PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; |
1036 | { | 1030 | PhysicsActor.OnOutOfBounds -= OutOfBoundsCall; |
1037 | PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; | 1031 | m_scene.PhysicsScene.RemoveAvatar(PhysicsActor); |
1038 | PhysicsActor.OnOutOfBounds -= OutOfBoundsCall; | 1032 | PhysicsActor.UnSubscribeEvents(); |
1039 | m_scene.PhysicsScene.RemoveAvatar(PhysicsActor); | 1033 | PhysicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; |
1040 | PhysicsActor.UnSubscribeEvents(); | 1034 | PhysicsActor = null; |
1041 | PhysicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; | ||
1042 | PhysicsActor = null; | ||
1043 | } | ||
1044 | catch | ||
1045 | { } | ||
1046 | } | 1035 | } |
1036 | // else | ||
1037 | // { | ||
1038 | // m_log.ErrorFormat( | ||
1039 | // "[SCENE PRESENCE]: Attempt to remove physics actor for {0} on {1} but this scene presence has no physics actor", | ||
1040 | // Name, Scene.RegionInfo.RegionName); | ||
1041 | // } | ||
1047 | } | 1042 | } |
1048 | 1043 | ||
1049 | /// <summary> | 1044 | /// <summary> |
@@ -1925,7 +1920,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1925 | // m_log.DebugFormat("[SCENE PRESENCE]: {0} {1}", SitTargetisSet, SitTargetUnOccupied); | 1920 | // m_log.DebugFormat("[SCENE PRESENCE]: {0} {1}", SitTargetisSet, SitTargetUnOccupied); |
1926 | 1921 | ||
1927 | if (PhysicsActor != null) | 1922 | if (PhysicsActor != null) |
1928 | m_sitAvatarHeight = m_physicsActor.Size.Z; | 1923 | m_sitAvatarHeight = PhysicsActor.Size.Z; |
1929 | 1924 | ||
1930 | bool canSit = false; | 1925 | bool canSit = false; |
1931 | pos = part.AbsolutePosition + offset; | 1926 | pos = part.AbsolutePosition + offset; |
@@ -2570,7 +2565,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2570 | // only send update from root agents to other clients; children are only "listening posts" | 2565 | // only send update from root agents to other clients; children are only "listening posts" |
2571 | if (IsChildAgent) | 2566 | if (IsChildAgent) |
2572 | { | 2567 | { |
2573 | m_log.Warn("[SCENE PRESENCE]: Attempt to send avatar data from a child agent"); | 2568 | m_log.WarnFormat( |
2569 | "[SCENE PRESENCE]: Attempt to send avatar data from a child agent for {0} in {1}", | ||
2570 | Name, Scene.RegionInfo.RegionName); | ||
2571 | |||
2574 | return; | 2572 | return; |
2575 | } | 2573 | } |
2576 | 2574 | ||
@@ -2628,7 +2626,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2628 | // only send update from root agents to other clients; children are only "listening posts" | 2626 | // only send update from root agents to other clients; children are only "listening posts" |
2629 | if (IsChildAgent) | 2627 | if (IsChildAgent) |
2630 | { | 2628 | { |
2631 | m_log.Warn("[SCENE PRESENCE]: Attempt to send avatar data from a child agent"); | 2629 | m_log.WarnFormat( |
2630 | "[SCENE PRESENCE]: Attempt to send avatar data from a child agent for {0} in {1}", | ||
2631 | Name, Scene.RegionInfo.RegionName); | ||
2632 | |||
2632 | return; | 2633 | return; |
2633 | } | 2634 | } |
2634 | 2635 | ||
@@ -3039,8 +3040,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3039 | 3040 | ||
3040 | CameraPosition = cAgentData.Center + offset; | 3041 | CameraPosition = cAgentData.Center + offset; |
3041 | 3042 | ||
3042 | //SetHeight(cAgentData.AVHeight); | ||
3043 | |||
3044 | if ((cAgentData.Throttles != null) && cAgentData.Throttles.Length > 0) | 3043 | if ((cAgentData.Throttles != null) && cAgentData.Throttles.Length > 0) |
3045 | ControllingClient.SetChildAgentThrottle(cAgentData.Throttles); | 3044 | ControllingClient.SetChildAgentThrottle(cAgentData.Throttles); |
3046 | 3045 | ||
@@ -3251,6 +3250,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
3251 | // "[SCENE PRESENCE]: Adding physics actor for {0}, ifFlying = {1} in {2}", | 3250 | // "[SCENE PRESENCE]: Adding physics actor for {0}, ifFlying = {1} in {2}", |
3252 | // Name, isFlying, Scene.RegionInfo.RegionName); | 3251 | // Name, isFlying, Scene.RegionInfo.RegionName); |
3253 | 3252 | ||
3253 | if (PhysicsActor != null) | ||
3254 | { | ||
3255 | m_log.ErrorFormat( | ||
3256 | "[SCENE PRESENCE]: Adding physics actor for {0} to {1} but this scene presence already has a physics actor", | ||
3257 | Name, Scene.RegionInfo.RegionName); | ||
3258 | } | ||
3259 | |||
3254 | if (Appearance.AvatarHeight == 0) | 3260 | if (Appearance.AvatarHeight == 0) |
3255 | Appearance.SetHeight(); | 3261 | Appearance.SetHeight(); |
3256 | 3262 | ||
@@ -3258,11 +3264,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3258 | 3264 | ||
3259 | Vector3 pVec = AbsolutePosition; | 3265 | Vector3 pVec = AbsolutePosition; |
3260 | 3266 | ||
3261 | // Old bug where the height was in centimeters instead of meters | 3267 | PhysicsActor = scene.AddAvatar( |
3262 | PhysicsActor = scene.AddAvatar(LocalId, Firstname + "." + Lastname, pVec, | 3268 | LocalId, Firstname + "." + Lastname, pVec, |
3263 | new Vector3(0f, 0f, Appearance.AvatarHeight), isFlying); | 3269 | new Vector3(0f, 0f, Appearance.AvatarHeight), isFlying); |
3264 | 3270 | ||
3265 | scene.AddPhysicsActorTaint(PhysicsActor); | ||
3266 | //PhysicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; | 3271 | //PhysicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; |
3267 | PhysicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; | 3272 | PhysicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; |
3268 | PhysicsActor.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong | 3273 | PhysicsActor.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 73c1c02..9c7e0ef 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; |
@@ -549,8 +549,8 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
549 | { | 549 | { |
550 | get | 550 | get |
551 | { | 551 | { |
552 | float AVvolume = (float) (Math.PI*Math.Pow(CAPSULE_RADIUS, 2)*CAPSULE_LENGTH); | 552 | float AVvolume = (float)(Math.PI * Math.Pow(CAPSULE_RADIUS, 2) * CAPSULE_LENGTH); |
553 | return m_density*AVvolume; | 553 | return m_density * AVvolume; |
554 | } | 554 | } |
555 | } | 555 | } |
556 | 556 | ||
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs index da540fa..afe646c 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs | |||
@@ -1703,7 +1703,6 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1703 | // "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2}", | 1703 | // "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2}", |
1704 | // actor.Name, actor.LocalID, Name); | 1704 | // actor.Name, actor.LocalID, Name); |
1705 | 1705 | ||
1706 | //m_log.Debug("[PHYSICS]:ODELOCK"); | ||
1707 | ((OdeCharacter) actor).Destroy(); | 1706 | ((OdeCharacter) actor).Destroy(); |
1708 | } | 1707 | } |
1709 | 1708 | ||
@@ -1711,11 +1710,12 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1711 | { | 1710 | { |
1712 | if (!_characters.Contains(chr)) | 1711 | if (!_characters.Contains(chr)) |
1713 | { | 1712 | { |
1714 | // m_log.DebugFormat( | ||
1715 | // "[ODE SCENE]: Adding physics character {0} {1} to physics scene {2}", chr.Name, chr.LocalID, Name); | ||
1716 | |||
1717 | _characters.Add(chr); | 1713 | _characters.Add(chr); |
1718 | 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 | |||
1719 | if (chr.bad) | 1719 | if (chr.bad) |
1720 | 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); |
1721 | } | 1721 | } |
@@ -1730,11 +1730,19 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1730 | internal void RemoveCharacter(OdeCharacter chr) | 1730 | internal void RemoveCharacter(OdeCharacter chr) |
1731 | { | 1731 | { |
1732 | if (_characters.Contains(chr)) | 1732 | if (_characters.Contains(chr)) |
1733 | { | ||
1733 | _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 | } | ||
1734 | else | 1740 | else |
1741 | { | ||
1735 | m_log.ErrorFormat( | 1742 | m_log.ErrorFormat( |
1736 | "[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!", |
1737 | chr.Name, chr.LocalID); | 1744 | chr.Name, chr.LocalID); |
1745 | } | ||
1738 | } | 1746 | } |
1739 | 1747 | ||
1740 | private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation, | 1748 | private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation, |
@@ -1772,7 +1780,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1772 | public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, | 1780 | public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, |
1773 | Vector3 size, Quaternion rotation, bool isPhysical, uint localid) | 1781 | Vector3 size, Quaternion rotation, bool isPhysical, uint localid) |
1774 | { | 1782 | { |
1775 | // m_log.DebugFormat("[ODE SCENE]: Adding physics prim {0} {1} to physics scene {2}", primName, localid, Name); | 1783 | m_log.DebugFormat("[ODE SCENE]: Adding physics prim {0} {1} to physics scene {2}", primName, localid, Name); |
1776 | 1784 | ||
1777 | return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid); | 1785 | return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid); |
1778 | } | 1786 | } |
@@ -2762,6 +2770,10 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2762 | { | 2770 | { |
2763 | foreach (OdeCharacter actor in defects) | 2771 | foreach (OdeCharacter actor in defects) |
2764 | { | 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 | |||
2765 | RemoveCharacter(actor); | 2777 | RemoveCharacter(actor); |
2766 | actor.DestroyOdeStructures(); | 2778 | actor.DestroyOdeStructures(); |
2767 | } | 2779 | } |
@@ -2832,6 +2844,10 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2832 | { | 2844 | { |
2833 | foreach (OdeCharacter actor in defects) | 2845 | foreach (OdeCharacter actor in defects) |
2834 | { | 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 | |||
2835 | RemoveCharacter(actor); | 2851 | RemoveCharacter(actor); |
2836 | actor.DestroyOdeStructures(); | 2852 | actor.DestroyOdeStructures(); |
2837 | } | 2853 | } |