aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs8
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSParam.cs3
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSScene.cs15
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BulletSimData.cs8
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
190public enum CollisionType 190public 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,