aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSScene.cs')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSScene.cs60
1 files changed, 57 insertions, 3 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 150326e..c4b4332 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -29,12 +29,13 @@ using System.Collections.Generic;
29using System.Runtime.InteropServices; 29using System.Runtime.InteropServices;
30using System.Text; 30using System.Text;
31using System.Threading; 31using System.Threading;
32using Nini.Config;
33using log4net;
34using OpenSim.Framework; 32using OpenSim.Framework;
33using OpenSim.Region.CoreModules.Framework.Statistics.Logging;
34using OpenSim.Region.Framework;
35using OpenSim.Region.Physics.Manager; 35using OpenSim.Region.Physics.Manager;
36using Nini.Config;
37using log4net;
36using OpenMetaverse; 38using OpenMetaverse;
37using OpenSim.Region.Framework;
38 39
39// TODOs for BulletSim (for BSScene, BSPrim, BSCharacter and BulletSim) 40// TODOs for BulletSim (for BSScene, BSPrim, BSCharacter and BulletSim)
40// Debug linkset 41// Debug linkset
@@ -158,6 +159,19 @@ public class BSScene : PhysicsScene, IPhysicsParameters
158 159
159 private BulletSimAPI.DebugLogCallback m_DebugLogCallbackHandle; 160 private BulletSimAPI.DebugLogCallback m_DebugLogCallbackHandle;
160 161
162 // Sometimes you just have to log everything.
163 public LogWriter PhysicsLogging;
164 private bool m_physicsLoggingEnabled;
165 private string m_physicsLoggingDir;
166 private string m_physicsLoggingPrefix;
167 private int m_physicsLoggingFileMinutes;
168
169 public LogWriter VehicleLogging;
170 private bool m_vehicleLoggingEnabled;
171 private string m_vehicleLoggingDir;
172 private string m_vehicleLoggingPrefix;
173 private int m_vehicleLoggingFileMinutes;
174
161 public BSScene(string identifier) 175 public BSScene(string identifier)
162 { 176 {
163 m_initialized = false; 177 m_initialized = false;
@@ -178,6 +192,26 @@ public class BSScene : PhysicsScene, IPhysicsParameters
178 m_updateArray = new EntityProperties[m_maxUpdatesPerFrame]; 192 m_updateArray = new EntityProperties[m_maxUpdatesPerFrame];
179 m_updateArrayPinnedHandle = GCHandle.Alloc(m_updateArray, GCHandleType.Pinned); 193 m_updateArrayPinnedHandle = GCHandle.Alloc(m_updateArray, GCHandleType.Pinned);
180 194
195 // Enable very detailed logging.
196 // By creating an empty logger when not logging, the log message invocation code
197 // can be left in and every call doesn't have to check for null.
198 if (m_physicsLoggingEnabled)
199 {
200 PhysicsLogging = new LogWriter(m_physicsLoggingDir, m_physicsLoggingPrefix, m_physicsLoggingFileMinutes);
201 }
202 else
203 {
204 PhysicsLogging = new LogWriter();
205 }
206 if (m_vehicleLoggingEnabled)
207 {
208 VehicleLogging = new LogWriter(m_vehicleLoggingDir, m_vehicleLoggingPrefix, m_vehicleLoggingFileMinutes);
209 }
210 else
211 {
212 VehicleLogging = new LogWriter();
213 }
214
181 // Get the version of the DLL 215 // Get the version of the DLL
182 // TODO: this doesn't work yet. Something wrong with marshaling the returned string. 216 // TODO: this doesn't work yet. Something wrong with marshaling the returned string.
183 // BulletSimVersion = BulletSimAPI.GetVersion(); 217 // BulletSimVersion = BulletSimAPI.GetVersion();
@@ -321,6 +355,17 @@ public class BSScene : PhysicsScene, IPhysicsParameters
321 parms.shouldSplitSimulationIslands = ParamBoolean(pConfig, "ShouldSplitSimulationIslands", parms.shouldSplitSimulationIslands); 355 parms.shouldSplitSimulationIslands = ParamBoolean(pConfig, "ShouldSplitSimulationIslands", parms.shouldSplitSimulationIslands);
322 parms.shouldEnableFrictionCaching = ParamBoolean(pConfig, "ShouldEnableFrictionCaching", parms.shouldEnableFrictionCaching); 356 parms.shouldEnableFrictionCaching = ParamBoolean(pConfig, "ShouldEnableFrictionCaching", parms.shouldEnableFrictionCaching);
323 parms.numberOfSolverIterations = pConfig.GetFloat("NumberOfSolverIterations", parms.numberOfSolverIterations); 357 parms.numberOfSolverIterations = pConfig.GetFloat("NumberOfSolverIterations", parms.numberOfSolverIterations);
358
359 // Very detailed logging for physics debugging
360 m_physicsLoggingEnabled = pConfig.GetBoolean("PhysicsLoggingEnabled", false);
361 m_physicsLoggingDir = pConfig.GetString("PhysicsLoggingDir", ".");
362 m_physicsLoggingPrefix = pConfig.GetString("PhysicsLoggingPrefix", "physics-");
363 m_physicsLoggingFileMinutes = pConfig.GetInt("PhysicsLoggingFileMinutes", 5);
364 // Very detailed logging for vehicle debugging
365 m_vehicleLoggingEnabled = pConfig.GetBoolean("VehicleLoggingEnabled", false);
366 m_vehicleLoggingDir = pConfig.GetString("VehicleLoggingDir", ".");
367 m_vehicleLoggingPrefix = pConfig.GetString("VehicleLoggingPrefix", "vehicle-");
368 m_vehicleLoggingFileMinutes = pConfig.GetInt("VehicleLoggingFileMinutes", 5);
324 } 369 }
325 } 370 }
326 m_params[0] = parms; 371 m_params[0] = parms;
@@ -560,8 +605,17 @@ public class BSScene : PhysicsScene, IPhysicsParameters
560 }); 605 });
561 } 606 }
562 607
608 // Someday we will have complex terrain with caves and tunnels
609 // For the moment, it's flat and convex
610 public float GetTerrainHeightAtXYZ(Vector3 loc)
611 {
612 return GetTerrainHeightAtXY(loc.X, loc.Y);
613 }
614
563 public float GetTerrainHeightAtXY(float tX, float tY) 615 public float GetTerrainHeightAtXY(float tX, float tY)
564 { 616 {
617 if (tX < 0 || tX >= Constants.RegionSize || tY < 0 || tY >= Constants.RegionSize)
618 return 30;
565 return m_heightMap[((int)tX) * Constants.RegionSize + ((int)tY)]; 619 return m_heightMap[((int)tX) * Constants.RegionSize + ((int)tY)];
566 } 620 }
567 621