diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin')
4 files changed, 28 insertions, 6 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs index a303972..4c54f9f 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | |||
@@ -174,15 +174,19 @@ public sealed class BSCharacter : BSPhysObject | |||
174 | PhysScene.PE.UpdateSingleAabb(PhysScene.World, PhysBody); | 174 | PhysScene.PE.UpdateSingleAabb(PhysScene.World, PhysBody); |
175 | 175 | ||
176 | // Do this after the object has been added to the world | 176 | // Do this after the object has been added to the world |
177 | PhysBody.collisionType = CollisionType.Avatar; | 177 | if (BSParam.AvatarToAvatarCollisionsByDefault) |
178 | PhysBody.collisionType = CollisionType.Avatar; | ||
179 | else | ||
180 | PhysBody.collisionType = CollisionType.PhantomToOthersAvatar; | ||
181 | |||
178 | PhysBody.ApplyCollisionMask(PhysScene); | 182 | PhysBody.ApplyCollisionMask(PhysScene); |
179 | } | 183 | } |
180 | 184 | ||
181 | |||
182 | public override void RequestPhysicsterseUpdate() | 185 | public override void RequestPhysicsterseUpdate() |
183 | { | 186 | { |
184 | base.RequestPhysicsterseUpdate(); | 187 | base.RequestPhysicsterseUpdate(); |
185 | } | 188 | } |
189 | |||
186 | // No one calls this method so I don't know what it could possibly mean | 190 | // No one calls this method so I don't know what it could possibly mean |
187 | public override bool Stopped { get { return false; } } | 191 | public override bool Stopped { get { return false; } } |
188 | 192 | ||
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs index 867d6ff..e7f4def 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs | |||
@@ -132,6 +132,7 @@ public static class BSParam | |||
132 | public static float PhysicsUnmanLoggingFrames { get; private set; } | 132 | public static float PhysicsUnmanLoggingFrames { get; private set; } |
133 | 133 | ||
134 | // Avatar parameters | 134 | // Avatar parameters |
135 | public static bool AvatarToAvatarCollisionsByDefault { get; private set; } | ||
135 | public static float AvatarFriction { get; private set; } | 136 | public static float AvatarFriction { get; private set; } |
136 | public static float AvatarStandingFriction { get; private set; } | 137 | public static float AvatarStandingFriction { get; private set; } |
137 | public static float AvatarAlwaysRunFactor { get; private set; } | 138 | public static float AvatarAlwaysRunFactor { get; private set; } |
@@ -571,6 +572,8 @@ public static class BSParam | |||
571 | new ParameterDefn<float>("TerrainCollisionMargin", "Margin where collision checking starts" , | 572 | new ParameterDefn<float>("TerrainCollisionMargin", "Margin where collision checking starts" , |
572 | 0.04f ), | 573 | 0.04f ), |
573 | 574 | ||
575 | new ParameterDefn<bool>("AvatarToAvatarCollisionsByDefault", "Should avatars collide with other avatars by default?", | ||
576 | true), | ||
574 | new ParameterDefn<float>("AvatarFriction", "Factor to reduce movement against an avatar. Changed on avatar recreation.", | 577 | new ParameterDefn<float>("AvatarFriction", "Factor to reduce movement against an avatar. Changed on avatar recreation.", |
575 | 0.2f ), | 578 | 0.2f ), |
576 | new ParameterDefn<float>("AvatarStandingFriction", "Avatar friction when standing. Changed on avatar recreation.", | 579 | new ParameterDefn<float>("AvatarStandingFriction", "Avatar friction when standing. Changed on avatar recreation.", |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index a46c241..0f79a10 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -130,6 +130,11 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
130 | internal int m_maxUpdatesPerFrame; | 130 | internal int m_maxUpdatesPerFrame; |
131 | internal EntityProperties[] m_updateArray; | 131 | internal EntityProperties[] m_updateArray; |
132 | 132 | ||
133 | /// <summary> | ||
134 | /// Used to control physics simulation timing if Bullet is running on its own thread. | ||
135 | /// </summary> | ||
136 | private ManualResetEvent m_updateWaitEvent; | ||
137 | |||
133 | public const uint TERRAIN_ID = 0; // OpenSim senses terrain with a localID of zero | 138 | public const uint TERRAIN_ID = 0; // OpenSim senses terrain with a localID of zero |
134 | public const uint GROUNDPLANE_ID = 1; | 139 | public const uint GROUNDPLANE_ID = 1; |
135 | public const uint CHILDTERRAIN_ID = 2; // Terrain allocated based on our mega-prim childre start here | 140 | public const uint CHILDTERRAIN_ID = 2; // Terrain allocated based on our mega-prim childre start here |
@@ -288,7 +293,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
288 | { | 293 | { |
289 | // The physics simulation should happen independently of the heartbeat loop | 294 | // The physics simulation should happen independently of the heartbeat loop |
290 | m_physicsThread | 295 | m_physicsThread |
291 | = Watchdog.StartThread( | 296 | = WorkManager.StartThread( |
292 | BulletSPluginPhysicsThread, | 297 | BulletSPluginPhysicsThread, |
293 | string.Format("{0} ({1})", BulletEngineName, RegionName), | 298 | string.Format("{0} ({1})", BulletEngineName, RegionName), |
294 | ThreadPriority.Normal, | 299 | ThreadPriority.Normal, |
@@ -838,6 +843,9 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
838 | 843 | ||
839 | public void BulletSPluginPhysicsThread() | 844 | public void BulletSPluginPhysicsThread() |
840 | { | 845 | { |
846 | Thread.CurrentThread.Priority = ThreadPriority.Highest; | ||
847 | m_updateWaitEvent = new ManualResetEvent(false); | ||
848 | |||
841 | while (m_initialized) | 849 | while (m_initialized) |
842 | { | 850 | { |
843 | int beginSimulationRealtimeMS = Util.EnvironmentTickCount(); | 851 | int beginSimulationRealtimeMS = Util.EnvironmentTickCount(); |
@@ -851,8 +859,9 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
851 | if (simulationTimeVsRealtimeDifferenceMS > 0) | 859 | if (simulationTimeVsRealtimeDifferenceMS > 0) |
852 | { | 860 | { |
853 | // The simulation of the time interval took less than realtime. | 861 | // The simulation of the time interval took less than realtime. |
854 | // Do a sleep for the rest of realtime. | 862 | // Do a wait for the rest of realtime. |
855 | Thread.Sleep(simulationTimeVsRealtimeDifferenceMS); | 863 | m_updateWaitEvent.WaitOne(simulationTimeVsRealtimeDifferenceMS); |
864 | //Thread.Sleep(simulationTimeVsRealtimeDifferenceMS); | ||
856 | } | 865 | } |
857 | else | 866 | else |
858 | { | 867 | { |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs b/OpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs index 3425d9e..5932461 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs | |||
@@ -190,6 +190,7 @@ public class BulletHMapInfo | |||
190 | public enum CollisionType | 190 | public enum CollisionType |
191 | { | 191 | { |
192 | Avatar, | 192 | Avatar, |
193 | PhantomToOthersAvatar, // An avatar that it phantom to other avatars but not to anything else | ||
193 | Groundplane, | 194 | Groundplane, |
194 | Terrain, | 195 | Terrain, |
195 | Static, | 196 | Static, |
@@ -231,7 +232,12 @@ public static Dictionary<CollisionType, CollisionTypeFilterGroup> CollisionTypeM | |||
231 | { CollisionType.Avatar, | 232 | { CollisionType.Avatar, |
232 | new CollisionTypeFilterGroup(CollisionType.Avatar, | 233 | new CollisionTypeFilterGroup(CollisionType.Avatar, |
233 | (uint)CollisionFilterGroups.BCharacterGroup, | 234 | (uint)CollisionFilterGroups.BCharacterGroup, |
234 | (uint)CollisionFilterGroups.BAllGroup) | 235 | (uint)(CollisionFilterGroups.BAllGroup)) |
236 | }, | ||
237 | { CollisionType.PhantomToOthersAvatar, | ||
238 | new CollisionTypeFilterGroup(CollisionType.PhantomToOthersAvatar, | ||
239 | (uint)CollisionFilterGroups.BCharacterGroup, | ||
240 | (uint)(CollisionFilterGroups.BAllGroup & ~CollisionFilterGroups.BCharacterGroup)) | ||
235 | }, | 241 | }, |
236 | { CollisionType.Groundplane, | 242 | { CollisionType.Groundplane, |
237 | new CollisionTypeFilterGroup(CollisionType.Groundplane, | 243 | new CollisionTypeFilterGroup(CollisionType.Groundplane, |