From eafc3d6c47b736ca6e4d777c8bcaf059d116ed4c Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 16 Mar 2012 08:59:41 -0700
Subject: BulletSim: Update list of TODO tasks
---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index e9a849c..b1e551c 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -52,6 +52,19 @@ using OpenSim.Region.Framework;
// Implement LockAngularMotion
// Decide if clearing forces is the right thing to do when setting position (BulletSim::SetObjectTranslation)
// Does NeedsMeshing() really need to exclude all the different shapes?
+// Remove mesh and Hull stuff. Use mesh passed to bullet and use convexdecom from bullet.
+// Add PID movement operations
+// Debug linkset
+// Ccd threshold to defaults (0.0)
+// Command line get and set is broken
+// Check terrain size. 128 or 127?
+// Test with multiple regions in one simulator
+// Multiple contact points on collision?
+// See code in ode::near... calls to collision_accounting_events()
+// Use collision masks for collision with terrain and phantom objects
+// Check out llVolumeDetect. Must do something for that.
+// Physical phantom objects and related typing (collision options )
+// Raycast
//
namespace OpenSim.Region.Physics.BulletSPlugin
{
--
cgit v1.1
From 3e7e1661243447986edb8658379f6604f4ee92de Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 16 Mar 2012 14:05:01 -0700
Subject: BulletSim: update BulletSim.dll to Bullet 2.80 and add
libBulletSim.so to the new lib32 and lib64 binary directories
---
bin/lib32/BulletSim.dll | Bin 562176 -> 566784 bytes
bin/lib32/libBulletSim.so | Bin 0 -> 618542 bytes
bin/lib64/BulletSim.dll | Bin 768000 -> 773632 bytes
bin/lib64/libBulletSim.so | Bin 0 -> 684103 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100755 bin/lib32/libBulletSim.so
create mode 100755 bin/lib64/libBulletSim.so
diff --git a/bin/lib32/BulletSim.dll b/bin/lib32/BulletSim.dll
index d1571cf..82d9737 100755
Binary files a/bin/lib32/BulletSim.dll and b/bin/lib32/BulletSim.dll differ
diff --git a/bin/lib32/libBulletSim.so b/bin/lib32/libBulletSim.so
new file mode 100755
index 0000000..f93f7d7
Binary files /dev/null and b/bin/lib32/libBulletSim.so differ
diff --git a/bin/lib64/BulletSim.dll b/bin/lib64/BulletSim.dll
index ec21dfe..f922ccc 100755
Binary files a/bin/lib64/BulletSim.dll and b/bin/lib64/BulletSim.dll differ
diff --git a/bin/lib64/libBulletSim.so b/bin/lib64/libBulletSim.so
new file mode 100755
index 0000000..c0c859f
Binary files /dev/null and b/bin/lib64/libBulletSim.so differ
--
cgit v1.1
From 898a16802bceab9cc43ad15be6f4354335b471fb Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 16 Mar 2012 16:37:21 -0700
Subject: BulletSim: add some new runtime setable parameters to match the dll.
---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 13 ++++++++++---
OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs | 10 ++++++----
bin/OpenSimDefaults.ini | 2 +-
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index b1e551c..977dcbe 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -177,6 +177,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
if (m_log.IsDebugEnabled)
{
m_log.DebugFormat("{0}: Initialize: Setting debug callback for unmanaged code", LogHeader);
+ // the handle is saved to it doesn't get freed after this call
m_DebugLogCallbackHandle = new BulletSimAPI.DebugLogCallback(BulletLogger);
BulletSimAPI.SetDebugLogCallback(m_DebugLogCallbackHandle);
}
@@ -185,7 +186,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
mesher = meshmerizer;
// The bounding box for the simulated world
- Vector3 worldExtent = new Vector3(Constants.RegionSize, Constants.RegionSize, 4096f);
+ Vector3 worldExtent = new Vector3(Constants.RegionSize, Constants.RegionSize, 8192f);
// m_log.DebugFormat("{0}: Initialize: Calling BulletSimAPI.Initialize.", LogHeader);
m_worldID = BulletSimAPI.Initialize(worldExtent, m_paramsHandle.AddrOfPinnedObject(),
@@ -233,7 +234,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.terrainFriction = 0.5f;
parms.terrainHitFraction = 0.8f;
parms.terrainRestitution = 0f;
- parms.avatarFriction = 0.0f;
+ parms.avatarFriction = 0.5f;
parms.avatarDensity = 60f;
parms.avatarCapsuleRadius = 0.37f;
parms.avatarCapsuleHeight = 1.5f; // 2.140599f
@@ -716,6 +717,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
// new PhysParameterEntry("CcdSweptSphereRadius", "" ),
new PhysParameterEntry("ContactProcessingThreshold", "Distance between contacts before doing collision check" ),
+ new PhysParameterEntry("Friction", "Set friction parameter for a specific object" ),
+ new PhysParameterEntry("Restitution", "Set restitution parameter for a specific object" ),
+
new PhysParameterEntry("TerrainFriction", "Factor to reduce movement against terrain surface" ),
new PhysParameterEntry("TerrainHitFraction", "Distance to measure hit collisions" ),
new PhysParameterEntry("TerrainRestitution", "Bouncyness" ),
@@ -756,7 +760,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "defaultdensity": m_params[0].defaultDensity = val; break;
case "defaultrestitution": m_params[0].defaultRestitution = val; break;
case "collisionmargin": m_params[0].collisionMargin = val; break;
- case "gravity": m_params[0].gravity = val; TaintedUpdateParameter(lparm, PhysParameterEntry.APPLY_TO_NONE, val); break;
+ case "gravity": m_params[0].gravity = val; TaintedUpdateParameter(lparm, localID, val); break;
case "lineardamping": UpdateParameterPrims(ref m_params[0].linearDamping, lparm, localID, val); break;
case "angulardamping": UpdateParameterPrims(ref m_params[0].angularDamping, lparm, localID, val); break;
@@ -767,6 +771,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "ccdsweptsphereradius": UpdateParameterPrims(ref m_params[0].ccdSweptSphereRadius, lparm, localID, val); break;
case "contactprocessingthreshold": UpdateParameterPrims(ref m_params[0].contactProcessingThreshold, lparm, localID, val); break;
+ case "friction": TaintedUpdateParameter(lparm, localID, val); break;
+ case "restitution": TaintedUpdateParameter(lparm, localID, val); break;
+
// set a terrain physical feature and cause terrain to be recalculated
case "terrainfriction": m_params[0].terrainFriction = val; TaintedUpdateParameter("terrain", 0, val); break;
case "terrainhitfraction": m_params[0].terrainHitFraction = val; TaintedUpdateParameter("terrain", 0, val); break;
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
index d12bd7d..aab0994 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
@@ -149,16 +149,16 @@ public static extern uint Initialize(Vector3 maxPosition, IntPtr parms,
int maxUpdates, IntPtr updateArray);
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
-public static extern bool UpdateParameter(uint worldID, uint localID,
- [MarshalAs(UnmanagedType.LPStr)]string paramCode, float value);
-
-[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern void SetHeightmap(uint worldID, [MarshalAs(UnmanagedType.LPArray)] float[] heightMap);
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern void Shutdown(uint worldID);
+[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
+public static extern bool UpdateParameter(uint worldID, uint localID,
+ [MarshalAs(UnmanagedType.LPStr)]string paramCode, float value);
+// ===============================================================================
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern int PhysicsStep(uint worldID, float timeStep, int maxSubSteps, float fixedTimeStep,
out int updatedEntityCount,
@@ -240,6 +240,7 @@ public static extern bool HasObject(uint worldID, uint id);
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern bool DestroyObject(uint worldID, uint id);
+// ===============================================================================
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern SweepHit ConvexSweepTest(uint worldID, uint id, Vector3 to, float extraMargin);
@@ -249,6 +250,7 @@ public static extern RaycastHit RayTest(uint worldID, uint id, Vector3 from, Vec
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern Vector3 RecoverFromPenetration(uint worldID, uint id);
+// ===============================================================================
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern void DumpBulletStatistics();
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index fd31131..d291cfb 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -833,7 +833,7 @@
TerrainFriction = 0.50
TerrainHitFriction = 0.8
TerrainRestitution = 0
- AvatarFriction = 0
+ AvatarFriction = 0.5
AvatarDensity = 60.0
AvatarCapsuleRadius = 0.37
AvatarCapsuleHeight = 1.5
--
cgit v1.1
From 6c55fd93a300cd077bd04c1b8c3bedc7a03074e7 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 16 Mar 2012 17:13:06 -0700
Subject: BulletSim: set buoyancy in only one place
---
OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index 0cab5d1..e816b61 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -260,11 +260,8 @@ public class BSCharacter : PhysicsActor
get { return _flying; }
set {
_flying = value;
- _scene.TaintedObject(delegate()
- {
- // simulate flying by changing the effect of gravity
- BulletSimAPI.SetObjectBuoyancy(_scene.WorldID, LocalID, _flying ? 1f : 0f);
- });
+ // simulate flying by changing the effect of gravity
+ this.Buoyancy(_flying ? 1f : 0f);
}
}
public override bool
@@ -299,6 +296,7 @@ public class BSCharacter : PhysicsActor
get { return _kinematic; }
set { _kinematic = value; }
}
+ // neg=fall quickly, 0=1g, 1=0g, pos=float up
public override float Buoyancy {
get { return _buoyancy; }
set { _buoyancy = value;
--
cgit v1.1
From cb2727cf6e7b40473d10cfbea61155f5bcf6646f Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Sun, 18 Mar 2012 11:53:53 -0700
Subject: BulletSim: Add AvatarRestitution parameter. Centralize computation of
buoyancy for flying. Tweek avatar default friction and resititution
---
OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | 9 ++++++---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 3 +++
bin/OpenSimDefaults.ini | 3 ++-
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index e816b61..1a61431 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -94,7 +94,7 @@ public class BSCharacter : PhysicsActor
_flying = isFlying;
_orientation = Quaternion.Identity;
_velocity = Vector3.Zero;
- _buoyancy = isFlying ? 1f : 0f;
+ _buoyancy = ComputeBuoyancyFromFlying(isFlying);
_scale = new Vector3(1f, 1f, 1f);
_density = _scene.Params.avatarDensity;
ComputeAvatarVolumeAndMass(); // set _avatarVolume and _mass based on capsule size, _density and _scale
@@ -110,7 +110,7 @@ public class BSCharacter : PhysicsActor
shapeData.Buoyancy = _buoyancy;
shapeData.Static = ShapeData.numericFalse;
shapeData.Friction = _scene.Params.avatarFriction;
- shapeData.Restitution = _scene.Params.defaultRestitution;
+ shapeData.Restitution = _scene.Params.avatarRestitution;
// do actual create at taint time
_scene.TaintedObject(delegate()
@@ -261,9 +261,12 @@ public class BSCharacter : PhysicsActor
set {
_flying = value;
// simulate flying by changing the effect of gravity
- this.Buoyancy(_flying ? 1f : 0f);
+ this.Buoyancy(ComputeBuoyancyFromFlying(_flying));
}
}
+ private float ComputeBuoyancyFromFlying(bool ifFlying) {
+ return ifFlying ? 1f : 0f;
+ }
public override bool
SetAlwaysRun {
get { return _setAlwaysRun; }
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 977dcbe..9b12b4f 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -235,6 +235,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.terrainHitFraction = 0.8f;
parms.terrainRestitution = 0f;
parms.avatarFriction = 0.5f;
+ parms.avatarRestitution = 0.0f;
parms.avatarDensity = 60f;
parms.avatarCapsuleRadius = 0.37f;
parms.avatarCapsuleHeight = 1.5f; // 2.140599f
@@ -279,7 +280,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.terrainHitFraction = pConfig.GetFloat("TerrainHitFraction", parms.terrainHitFraction);
parms.terrainRestitution = pConfig.GetFloat("TerrainRestitution", parms.terrainRestitution);
parms.avatarFriction = pConfig.GetFloat("AvatarFriction", parms.avatarFriction);
+ parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution);
parms.avatarDensity = pConfig.GetFloat("AvatarDensity", parms.avatarDensity);
+ parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution);
parms.avatarCapsuleRadius = pConfig.GetFloat("AvatarCapsuleRadius", parms.avatarCapsuleRadius);
parms.avatarCapsuleHeight = pConfig.GetFloat("AvatarCapsuleHeight", parms.avatarCapsuleHeight);
}
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index d291cfb..2f4a549 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -833,7 +833,8 @@
TerrainFriction = 0.50
TerrainHitFriction = 0.8
TerrainRestitution = 0
- AvatarFriction = 0.5
+ AvatarFriction = 0.2
+ AvatarRestitution = 0.0
AvatarDensity = 60.0
AvatarCapsuleRadius = 0.37
AvatarCapsuleHeight = 1.5
--
cgit v1.1
From 7783c93802f61d4ed9994c3f9e924066be0469be Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Wed, 21 Mar 2012 07:07:44 -0700
Subject: BulletSim: update TODO list. Rearrange code for readability. Add per
object friction and restitution runtime settable parameters.
---
.../Region/Physics/BulletSPlugin/BSCharacter.cs | 4 +--
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 30 +++++++++++-----------
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index 1a61431..20708d9 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -261,7 +261,7 @@ public class BSCharacter : PhysicsActor
set {
_flying = value;
// simulate flying by changing the effect of gravity
- this.Buoyancy(ComputeBuoyancyFromFlying(_flying));
+ this.Buoyancy = ComputeBuoyancyFromFlying(_flying);
}
}
private float ComputeBuoyancyFromFlying(bool ifFlying) {
@@ -356,7 +356,7 @@ public class BSCharacter : PhysicsActor
}
else
{
- m_log.WarnFormat("{0}: Got a NaN force applied to a Character", LogHeader);
+ m_log.ErrorFormat("{0}: Got a NaN force applied to a Character", LogHeader);
}
//m_lastUpdateSent = false;
}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 9b12b4f..142103b 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -37,14 +37,18 @@ using OpenMetaverse;
using OpenSim.Region.Framework;
// TODOs for BulletSim (for BSScene, BSPrim, BSCharacter and BulletSim)
+// Debug linkset
+// Test with multiple regions in one simulator
// Adjust character capsule size when height is adjusted (ScenePresence.SetHeight)
// Test sculpties
// Compute physics FPS reasonably
// Based on material, set density and friction
-// More efficient memory usage in passing hull information from BSPrim to BulletSim
+// More efficient memory usage when passing hull information from BSPrim to BulletSim
// Four states of prim: Physical, regular, phantom and selected. Are we modeling these correctly?
// In SL one can set both physical and phantom (gravity, does not effect others, makes collisions with ground)
// At the moment, physical and phantom causes object to drop through the terrain
+// Physical phantom objects and related typing (collision options )
+// Check out llVolumeDetect. Must do something for that.
// Should prim.link() and prim.delink() membership checking happen at taint time?
// Mesh sharing. Use meshHash to tell if we already have a hull of that shape and only create once
// Do attachments need to be handled separately? Need collision events. Do not collide with VolumeDetect
@@ -53,17 +57,14 @@ using OpenSim.Region.Framework;
// Decide if clearing forces is the right thing to do when setting position (BulletSim::SetObjectTranslation)
// Does NeedsMeshing() really need to exclude all the different shapes?
// Remove mesh and Hull stuff. Use mesh passed to bullet and use convexdecom from bullet.
-// Add PID movement operations
-// Debug linkset
-// Ccd threshold to defaults (0.0)
-// Command line get and set is broken
+// Add PID movement operations. What does ScenePresence.MoveToTarget do?
// Check terrain size. 128 or 127?
-// Test with multiple regions in one simulator
// Multiple contact points on collision?
// See code in ode::near... calls to collision_accounting_events()
+// (This might not be a problem. ODE collects all the collisions with one object in one tick.)
// Use collision masks for collision with terrain and phantom objects
-// Check out llVolumeDetect. Must do something for that.
-// Physical phantom objects and related typing (collision options )
+// Figure out how to not allocate a new Dictionary and List for every collision
+// in BSPrim.Collide() and BSCharacter.Collide(). Can the same ones be reused?
// Raycast
//
namespace OpenSim.Region.Physics.BulletSPlugin
@@ -282,7 +283,6 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.avatarFriction = pConfig.GetFloat("AvatarFriction", parms.avatarFriction);
parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution);
parms.avatarDensity = pConfig.GetFloat("AvatarDensity", parms.avatarDensity);
- parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution);
parms.avatarCapsuleRadius = pConfig.GetFloat("AvatarCapsuleRadius", parms.avatarCapsuleRadius);
parms.avatarCapsuleHeight = pConfig.GetFloat("AvatarCapsuleHeight", parms.avatarCapsuleHeight);
}
@@ -408,16 +408,16 @@ public class BSScene : PhysicsScene, IPhysicsParameters
{
EntityProperties entprop = m_updateArray[ii];
// m_log.DebugFormat("{0}: entprop[{1}]: id={2}, pos={3}", LogHeader, ii, entprop.ID, entprop.Position);
- BSCharacter actor;
- if (m_avatars.TryGetValue(entprop.ID, out actor))
- {
- actor.UpdateProperties(entprop);
- continue;
- }
BSPrim prim;
if (m_prims.TryGetValue(entprop.ID, out prim))
{
prim.UpdateProperties(entprop);
+ continue;
+ }
+ BSCharacter actor;
+ if (m_avatars.TryGetValue(entprop.ID, out actor))
+ {
+ actor.UpdateProperties(entprop);
}
}
}
--
cgit v1.1
From 4bfd9e28caa8273ed27804e1bae938e0f8daf5c3 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Wed, 21 Mar 2012 17:24:17 -0700
Subject: BulletSim: add updated (but not working) BulletSim dlls
---
bin/lib32/BulletSim.dll | Bin 566784 -> 532480 bytes
bin/lib32/libBulletSim.so | Bin 618542 -> 618538 bytes
bin/lib64/BulletSim.dll | Bin 773632 -> 684544 bytes
bin/lib64/libBulletSim.so | Bin 684103 -> 684103 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/bin/lib32/BulletSim.dll b/bin/lib32/BulletSim.dll
index 82d9737..7811c46 100755
Binary files a/bin/lib32/BulletSim.dll and b/bin/lib32/BulletSim.dll differ
diff --git a/bin/lib32/libBulletSim.so b/bin/lib32/libBulletSim.so
index f93f7d7..dd2c5ee 100755
Binary files a/bin/lib32/libBulletSim.so and b/bin/lib32/libBulletSim.so differ
diff --git a/bin/lib64/BulletSim.dll b/bin/lib64/BulletSim.dll
index f922ccc..b8a4ed0 100755
Binary files a/bin/lib64/BulletSim.dll and b/bin/lib64/BulletSim.dll differ
diff --git a/bin/lib64/libBulletSim.so b/bin/lib64/libBulletSim.so
index c0c859f..3ee7cbf 100755
Binary files a/bin/lib64/libBulletSim.so and b/bin/lib64/libBulletSim.so differ
--
cgit v1.1
From c1d064e1ca1e7ddfb9da851654a6a430747b871f Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Mar 2012 23:16:52 +0000
Subject: Comment out a terrain save-tile debugging message that accidentally
crept in with c4b2d24
---
OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
index f6ddc66..9cd8f2b 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
@@ -598,12 +598,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain
"[TERRAIN]: Could not save terrain from {0} to {1}. Valid file extensions are {2}",
m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions);
}
- else
- {
- m_log.ErrorFormat(
- "[TERRAIN]: Could not save terrain from {0} to {1}. {2} {3} {4} {5} {6} {7}",
- m_scene.RegionInfo.RegionName, filename, fileWidth, fileHeight, fileStartX, fileStartY, offsetX, offsetY);
- }
+// else
+// {
+// m_log.ErrorFormat(
+// "[TERRAIN]: Could not save terrain from {0} to {1}. {2} {3} {4} {5} {6} {7}",
+// m_scene.RegionInfo.RegionName, filename, fileWidth, fileHeight, fileStartX, fileStartY, offsetX, offsetY);
+// }
}
///
--
cgit v1.1
From 15c2499ccdaf3b461a17557ae473e942dd62a26e Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Mar 2012 23:31:41 +0000
Subject: Comment out login parameters debug output accidentally included with
c4b2d24
---
OpenSim/Server/Handlers/Login/LLLoginHandlers.cs | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
index ed62f95..f83a239 100644
--- a/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
+++ b/OpenSim/Server/Handlers/Login/LLLoginHandlers.cs
@@ -73,17 +73,19 @@ namespace OpenSim.Server.Handlers.Login
if (requestData != null)
{
- foreach (string key in requestData.Keys)
- {
- object value = requestData[key];
- Console.WriteLine("{0}:{1}", key, value);
- if (value is ArrayList)
- {
- ICollection col = value as ICollection;
- foreach (object item in col)
- Console.WriteLine(" {0}", item);
- }
- }
+ // Debug code to show exactly what login parameters the viewer is sending us.
+ // TODO: Extract into a method that can be generally applied if one doesn't already exist.
+// foreach (string key in requestData.Keys)
+// {
+// object value = requestData[key];
+// Console.WriteLine("{0}:{1}", key, value);
+// if (value is ArrayList)
+// {
+// ICollection col = value as ICollection;
+// foreach (object item in col)
+// Console.WriteLine(" {0}", item);
+// }
+// }
if (requestData.ContainsKey("first") && requestData["first"] != null &&
requestData.ContainsKey("last") && requestData["last"] != null && (
--
cgit v1.1
From efe61b2481ce10f16b156542c122971d35c227e1 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Thu, 22 Mar 2012 17:04:06 -0700
Subject: BulletSim: remove confusion between angularVelocity and
rotationalVelocity (there is still confusion in the rest of OpenSim). Enhance
some debug statements to include the object ID.
---
OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | 4 ++--
OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 17 ++++++-----------
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 5 +++--
3 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
index 046726d..eb20eb3 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
@@ -821,7 +821,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
*/
// Get what the body is doing, this includes 'external' influences
- Vector3 angularVelocity = m_prim.AngularVelocity;
+ Vector3 angularVelocity = m_prim.RotationalVelocity;
// Vector3 angularVelocity = Vector3.Zero;
if (m_angularMotorApply > 0)
@@ -910,7 +910,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
m_lastAngularVelocity -= m_lastAngularVelocity * decayamount;
// Apply to the body
- m_prim.AngularVelocity = m_lastAngularVelocity;
+ m_prim.RotationalVelocity = m_lastAngularVelocity;
} //end MoveAngular
internal void LimitRotation(float timestep)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index 898436b..f122df9 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -85,7 +85,6 @@ public sealed class BSPrim : PhysicsActor
private OMV.Vector3 _rotationalVelocity;
private bool _kinematic;
private float _buoyancy;
- private OMV.Vector3 _angularVelocity;
private List _childrenPrims;
private BSPrim _parentPrim;
@@ -119,7 +118,6 @@ public sealed class BSPrim : PhysicsActor
_buoyancy = 1f;
_velocity = OMV.Vector3.Zero;
_rotationalVelocity = OMV.Vector3.Zero;
- _angularVelocity = OMV.Vector3.Zero;
_hullKey = 0;
_meshKey = 0;
_pbs = pbs;
@@ -146,7 +144,7 @@ public sealed class BSPrim : PhysicsActor
// called when this prim is being destroyed and we should free all the resources
public void Destroy()
{
- // m_log.DebugFormat("{0}: Destroy", LogHeader);
+ // m_log.DebugFormat("{0}: Destroy, id={1}", LogHeader, LocalID);
// Undo any vehicle properties
_vehicle.ProcessTypeChange(Vehicle.TYPE_NONE);
_scene.RemoveVehiclePrim(this); // just to make sure
@@ -203,7 +201,7 @@ public sealed class BSPrim : PhysicsActor
// link me to the specified parent
public override void link(PhysicsActor obj) {
- BSPrim parent = (BSPrim)obj;
+ BSPrim parent = obj as BSPrim;
// m_log.DebugFormat("{0}: link {1}/{2} to {3}", LogHeader, _avName, _localID, obj.LocalID);
// TODO: decide if this parent checking needs to happen at taint time
if (_parentPrim == null)
@@ -527,10 +525,6 @@ public sealed class BSPrim : PhysicsActor
});
}
}
- public OMV.Vector3 AngularVelocity {
- get { return _angularVelocity; }
- set { _angularVelocity = value; }
- }
public override bool Kinematic {
get { return _kinematic; }
set { _kinematic = value;
@@ -993,7 +987,7 @@ public sealed class BSPrim : PhysicsActor
}
// m_log.DebugFormat("{0}: CreateGeomMesh: calling CreateMesh. lid={1}, key={2}, indices={3}, vertices={4}",
- // LogHeader, _localID, _meshKey, indices.Length, vertices.Count);
+ // LogHeader, _localID, _meshKey, indices.Length, vertices.Count);
BulletSimAPI.CreateMesh(_scene.WorldID, _meshKey, indices.GetLength(0), indices,
vertices.Count, verticesAsFloats);
@@ -1127,7 +1121,7 @@ public sealed class BSPrim : PhysicsActor
return;
}
- // Create an object in Bullet
+ // Create an object in Bullet if it has not already been created
// No locking here because this is done when the physics engine is not simulating
private void CreateObject()
{
@@ -1324,7 +1318,8 @@ public sealed class BSPrim : PhysicsActor
_velocity = entprop.Velocity;
_acceleration = entprop.Acceleration;
_rotationalVelocity = entprop.RotationalVelocity;
- // m_log.DebugFormat("{0}: RequestTerseUpdate. id={1}, ch={2}, pos={3}, rot={4}", LogHeader, LocalID, changed, _position, _orientation);
+ // m_log.DebugFormat("{0}: RequestTerseUpdate. id={1}, ch={2}, pos={3}, rot={4}, vel={5}, acc={6}, rvel={7}",
+ // LogHeader, LocalID, changed, _position, _orientation, _velocity, _acceleration, _rotationalVelocity);
base.RequestPhysicsterseUpdate();
}
}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 142103b..13d5e03 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -487,12 +487,12 @@ public class BSScene : PhysicsScene, IPhysicsParameters
public override void DeleteTerrain()
{
- m_log.DebugFormat("{0}: DeleteTerrain()", LogHeader);
+ // m_log.DebugFormat("{0}: DeleteTerrain()", LogHeader);
}
public override void Dispose()
{
- m_log.DebugFormat("{0}: Dispose()", LogHeader);
+ // m_log.DebugFormat("{0}: Dispose()", LogHeader);
}
public override Dictionary GetTopColliders()
@@ -753,6 +753,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
switch (lparm)
{
case "detailedstats": m_detailedStatsStep = (int)val; break;
+
case "meshlod": m_meshLOD = (int)val; break;
case "sculptlod": m_sculptLOD = (int)val; break;
case "maxsubstep": m_maxSubSteps = (int)val; break;
--
cgit v1.1
From 40b9b519b89f5da08e1e6b6557934bfd39b4f90b Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 00:12:14 +0000
Subject: Add commented out section on collisions switch in
Scene.SetSceneCoreDebug().
This was not implemented before the recent changes but should be at some point.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 76e632e..9d882c0 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1074,6 +1074,12 @@ namespace OpenSim.Region.Framework.Scenes
m_physics_enabled = enablePhysics;
}
+// if (options.ContainsKey("collisions"))
+// {
+// // TODO: Implement. If false, should stop objects colliding, though possibly should still allow
+// // the avatar themselves to collide with the ground.
+// }
+
if (options.ContainsKey("teleport"))
{
bool enableTeleportDebugging;
--
cgit v1.1
From c903813e00e894475aff75c1b7eec3f8d4b3986c Mon Sep 17 00:00:00 2001
From: BlueWall
Date: Thu, 22 Mar 2012 20:49:45 -0400
Subject: RegionReady logging
Some maintenance to clean up logging messages
---
.../Scripting/RegionReadyModule/RegionReadyModule.cs | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
index d0142a4..0b9f875 100644
--- a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
@@ -70,8 +70,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
public void Initialise(IConfigSource config)
{
- //m_log.Info("[RegionReady] Initialising");
-
m_config = config.Configs["RegionReady"];
if (m_config != null)
{
@@ -84,9 +82,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
m_uri = m_config.GetString("alert_uri",string.Empty);
}
}
-
-// if (!m_enabled)
-// m_log.Info("[RegionReady] disabled.");
}
public void AddRegion(Scene scene)
@@ -113,7 +108,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
{
scene.LoginLock = true;
scene.LoginsDisabled = true;
- m_log.InfoFormat("[RegionReady]: Logins disabled for {0}",m_scene.RegionInfo.RegionName);
+ m_log.InfoFormat("[RegionReady]: Region {0} - logins disabled during initialization.",m_scene.RegionInfo.RegionName);
if(m_uri != string.Empty)
{
@@ -167,7 +162,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
void OnEmptyScriptCompileQueue(int numScriptsFailed, string message)
{
- m_log.InfoFormat("[RegionReady]: Script compile queue empty!");
+ m_log.DebugFormat("[RegionReady]: Script compile queue empty!");
if (m_firstEmptyCompileQueue || m_oarFileLoading)
{
@@ -194,7 +189,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
c.SenderUUID = UUID.Zero;
c.Scene = m_scene;
- m_log.InfoFormat("[RegionReady]: Region \"{0}\" is ready: \"{1}\" on channel {2}",
+ m_log.DebugFormat("[RegionReady]: Region \"{0}\" is ready: \"{1}\" on channel {2}",
m_scene.RegionInfo.RegionName, c.Message, m_channelNotify);
m_scene.EventManager.TriggerOnChatBroadcast(this, c);
@@ -210,7 +205,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
{
m_lastOarLoadedOk = true;
} else {
- m_log.InfoFormat("[RegionReady]: Oar file load errors: {0}", message);
+ m_log.WarnFormat("[RegionReady]: Oar file load errors: {0}", message);
m_lastOarLoadedOk = false;
}
}
@@ -233,7 +228,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
// m_log.InfoFormat("[RegionReady]: Logins enabled for {0}, Oar {1}",
// m_scene.RegionInfo.RegionName, m_oarFileLoading.ToString());
- m_log.InfoFormat("[RegionReady]: Logins enabled for {0}", m_scene.RegionInfo.RegionName);
+ m_log.InfoFormat("[RegionReady]: Initialization complete - logins enabled for {0}", m_scene.RegionInfo.RegionName);
if ( m_uri != string.Empty )
{
--
cgit v1.1
From 08b8ebcc7e71038894fa47757db6d6aa5bb66d00 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 00:54:37 +0000
Subject: Use m_lastFrameTick instead of m_lastUpdate in Scene.GetHealth().
m_lastUpdate is no longer properly updated and is redundant anyway.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 9d882c0..16ce1ba 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -4504,8 +4504,8 @@ namespace OpenSim.Region.Framework.Scenes
//
int health=1; // Start at 1, means we're up
- if ((Util.EnvironmentTickCountSubtract(m_lastUpdate)) < 1000)
- health+=1;
+ if ((Util.EnvironmentTickCountSubtract(m_lastFrameTick)) < 1000)
+ health += 1;
else
return health;
--
cgit v1.1
From bc2963d42ab998551603b74361b26d5dfd5d0acd Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 01:03:10 +0000
Subject: Comment out unused scene loop restart code.
This has actually been unused since at least 0.7.2 due to earlier changes.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 41 +++++++++++++++++---------------
1 file changed, 22 insertions(+), 19 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 16ce1ba..d89d94d 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -216,9 +216,7 @@ namespace OpenSim.Region.Framework.Scenes
// TODO: Possibly stop other classes being able to manipulate this directly.
private SceneGraph m_sceneGraph;
private volatile int m_bordersLocked;
-// private int m_RestartTimerCounter;
private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
-// private int m_incrementsof15seconds;
private volatile bool m_backingup;
private Dictionary m_returns = new Dictionary();
private Dictionary m_groupsWithTargets = new Dictionary();
@@ -226,12 +224,17 @@ namespace OpenSim.Region.Framework.Scenes
private bool m_physics_enabled = true;
private bool m_scripts_enabled = true;
private string m_defaultScriptEngine;
+
+ ///
+ /// Tick at which the last login occurred.
+ ///
private int m_LastLogin;
+
private Thread HeartbeatThread;
private volatile bool shuttingdown;
- private int m_lastUpdate;
- private bool m_firstHeartbeat = true;
+// private int m_lastUpdate;
+// private bool m_firstHeartbeat = true;
private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time;
private bool m_reprioritizationEnabled = true;
@@ -801,7 +804,7 @@ namespace OpenSim.Region.Framework.Scenes
m_permissions = new ScenePermissions(this);
- m_lastUpdate = Util.EnvironmentTickCount();
+// m_lastUpdate = Util.EnvironmentTickCount();
}
#endregion
@@ -1170,7 +1173,7 @@ namespace OpenSim.Region.Framework.Scenes
HeartbeatThread.Abort();
HeartbeatThread = null;
}
- m_lastUpdate = Util.EnvironmentTickCount();
+// m_lastUpdate = Util.EnvironmentTickCount();
HeartbeatThread
= Watchdog.StartThread(
@@ -1222,8 +1225,8 @@ namespace OpenSim.Region.Framework.Scenes
while (!shuttingdown)
Update(-1);
- m_lastUpdate = Util.EnvironmentTickCount();
- m_firstHeartbeat = false;
+// m_lastUpdate = Util.EnvironmentTickCount();
+// m_firstHeartbeat = false;
}
finally
{
@@ -2541,7 +2544,7 @@ namespace OpenSim.Region.Framework.Scenes
= (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0
|| (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0;
- CheckHeartbeat();
+// CheckHeartbeat();
ScenePresence sp = GetScenePresence(client.AgentId);
@@ -3117,7 +3120,7 @@ namespace OpenSim.Region.Framework.Scenes
public override void RemoveClient(UUID agentID, bool closeChildAgents)
{
- CheckHeartbeat();
+// CheckHeartbeat();
bool isChildAgent = false;
ScenePresence avatar = GetScenePresence(agentID);
if (avatar != null)
@@ -4516,7 +4519,7 @@ namespace OpenSim.Region.Framework.Scenes
else
return health;
- CheckHeartbeat();
+// CheckHeartbeat();
return health;
}
@@ -4704,14 +4707,14 @@ namespace OpenSim.Region.Framework.Scenes
return (((vsn.X * xdiff) + (vsn.Y * ydiff)) / (-1 * vsn.Z)) + p0.Z;
}
- private void CheckHeartbeat()
- {
- if (m_firstHeartbeat)
- return;
-
- if (Util.EnvironmentTickCountSubtract(m_lastUpdate) > 2000)
- StartTimer();
- }
+// private void CheckHeartbeat()
+// {
+// if (m_firstHeartbeat)
+// return;
+//
+// if (Util.EnvironmentTickCountSubtract(m_lastFrameTick) > 2000)
+// StartTimer();
+// }
public override ISceneObject DeserializeObject(string representation)
{
--
cgit v1.1
From a9995ede65d1327413ae5c5e9b2e6f6dcf0f11c2 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 01:08:13 +0000
Subject: Fix bug in ScenePresenceAnimator.RemoveAnimation() introduced in
commit 1a8769e
Forgot to uppercase the animation name for default animations, since for some reason we store and use them in upper rather than lowercase.
---
OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | 2 +-
OpenSim/Region/Framework/Scenes/Scene.cs | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index cded9be..f5623bd 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -125,7 +125,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
// XXX: For some reason, we store all animations and use them with upper case names, but in LSL animations
// are referenced with lower case names!
- UUID animID = DefaultAvatarAnimations.GetDefaultAnimation(name);
+ UUID animID = DefaultAvatarAnimations.GetDefaultAnimation(name.ToUpper());
if (animID == UUID.Zero)
return;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index d89d94d..6fea5ff 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1159,9 +1159,9 @@ namespace OpenSim.Region.Framework.Scenes
}
///
- /// Start the timer which triggers regular scene updates
+ /// Start the scene loop
///
- public void StartTimer()
+ public void Start()
{
// m_log.DebugFormat("[SCENE]: Starting Heartbeat timer for {0}", RegionInfo.RegionName);
--
cgit v1.1
From 4ee8b3e23edc9ca11cf3d17f24fddfdcbfd8c1cc Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 01:11:43 +0000
Subject: Fix build break
---
OpenSim/Region/Framework/Scenes/Scene.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 6fea5ff..8a4c6c9 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1161,7 +1161,7 @@ namespace OpenSim.Region.Framework.Scenes
///
/// Start the scene loop
///
- public void Start()
+ public void StartTimer()
{
// m_log.DebugFormat("[SCENE]: Starting Heartbeat timer for {0}", RegionInfo.RegionName);
--
cgit v1.1
From 18b3f1132eeb28e51d84e028e4fd69048150ccb7 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 01:21:43 +0000
Subject: Rename Scene.StartTimer() to Start() - this method no longer uses a
timer. Comment out more effectively unused old heartbeat code.
---
OpenSim/Region/Application/OpenSimBase.cs | 2 +-
OpenSim/Region/Framework/Scenes/Scene.cs | 49 ++++++++++++++++---------------
2 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index c6956fc..484159c 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -430,7 +430,7 @@ namespace OpenSim
mscene = scene;
- scene.StartTimer();
+ scene.Start();
scene.StartScripts();
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 8a4c6c9..d354ef0 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -211,7 +211,7 @@ namespace OpenSim.Region.Framework.Scenes
///
private bool m_cleaningTemps = false;
- private Object m_heartbeatLock = new Object();
+// private Object m_heartbeatLock = new Object();
// TODO: Possibly stop other classes being able to manipulate this directly.
private SceneGraph m_sceneGraph;
@@ -1159,9 +1159,9 @@ namespace OpenSim.Region.Framework.Scenes
}
///
- /// Start the scene loop
+ /// Start the scene
///
- public void StartTimer()
+ public void Start()
{
// m_log.DebugFormat("[SCENE]: Starting Heartbeat timer for {0}", RegionInfo.RegionName);
@@ -1206,33 +1206,34 @@ namespace OpenSim.Region.Framework.Scenes
///
private void Heartbeat()
{
- if (!Monitor.TryEnter(m_heartbeatLock))
- {
- Watchdog.RemoveThread();
- return;
- }
+// if (!Monitor.TryEnter(m_heartbeatLock))
+// {
+// Watchdog.RemoveThread();
+// return;
+// }
- try
- {
- m_eventManager.TriggerOnRegionStarted(this);
+// try
+// {
+
+ m_eventManager.TriggerOnRegionStarted(this);
- // The first frame can take a very long time due to physics actors being added on startup. Therefore,
- // don't turn on the watchdog alarm for this thread until the second frame, in order to prevent false
- // alarms for scenes with many objects.
- Update(1);
- Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true;
+ // The first frame can take a very long time due to physics actors being added on startup. Therefore,
+ // don't turn on the watchdog alarm for this thread until the second frame, in order to prevent false
+ // alarms for scenes with many objects.
+ Update(1);
+ Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true;
- while (!shuttingdown)
- Update(-1);
+ while (!shuttingdown)
+ Update(-1);
// m_lastUpdate = Util.EnvironmentTickCount();
// m_firstHeartbeat = false;
- }
- finally
- {
- Monitor.Pulse(m_heartbeatLock);
- Monitor.Exit(m_heartbeatLock);
- }
+// }
+// finally
+// {
+// Monitor.Pulse(m_heartbeatLock);
+// Monitor.Exit(m_heartbeatLock);
+// }
Watchdog.RemoveThread();
}
--
cgit v1.1
From 349454ca2740d5eb5d465f0d45ebd49975556dd5 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 01:46:11 +0000
Subject: Remove unnecessary shutting down check in Scene.Heartbeat(). Add
some method doc. Rename HeartbeatThread, shuttingdown to conform to code
standards.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 37 +++++++++++++++++---------------
1 file changed, 20 insertions(+), 17 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index d354ef0..09b91c0 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -230,8 +230,19 @@ namespace OpenSim.Region.Framework.Scenes
///
private int m_LastLogin;
- private Thread HeartbeatThread;
- private volatile bool shuttingdown;
+ ///
+ /// Thread that runs the scene loop.
+ ///
+ private Thread m_heartbeatThread;
+
+ ///
+ /// True if these scene is in the process of shutting down or is shutdown.
+ ///
+ public bool ShuttingDown
+ {
+ get { return m_shuttingDown; }
+ }
+ private volatile bool m_shuttingDown;
// private int m_lastUpdate;
// private bool m_firstHeartbeat = true;
@@ -811,11 +822,6 @@ namespace OpenSim.Region.Framework.Scenes
#region Startup / Close Methods
- public bool ShuttingDown
- {
- get { return shuttingdown; }
- }
-
///
/// The scene graph for this scene
///
@@ -1134,8 +1140,7 @@ namespace OpenSim.Region.Framework.Scenes
ForEachScenePresence(delegate(ScenePresence avatar) { avatar.ControllingClient.Close(); });
// Stop updating the scene objects and agents.
- //m_heartbeatTimer.Close();
- shuttingdown = true;
+ m_shuttingDown = true;
m_log.Debug("[SCENE]: Persisting changed objects");
EventManager.TriggerSceneShuttingDown(this);
@@ -1168,14 +1173,14 @@ namespace OpenSim.Region.Framework.Scenes
//m_heartbeatTimer.Enabled = true;
//m_heartbeatTimer.Interval = (int)(m_timespan * 1000);
//m_heartbeatTimer.Elapsed += new ElapsedEventHandler(Heartbeat);
- if (HeartbeatThread != null)
+ if (m_heartbeatThread != null)
{
- HeartbeatThread.Abort();
- HeartbeatThread = null;
+ m_heartbeatThread.Abort();
+ m_heartbeatThread = null;
}
// m_lastUpdate = Util.EnvironmentTickCount();
- HeartbeatThread
+ m_heartbeatThread
= Watchdog.StartThread(
Heartbeat, string.Format("Heartbeat ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, false);
}
@@ -1222,9 +1227,7 @@ namespace OpenSim.Region.Framework.Scenes
// alarms for scenes with many objects.
Update(1);
Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true;
-
- while (!shuttingdown)
- Update(-1);
+ Update(-1);
// m_lastUpdate = Util.EnvironmentTickCount();
// m_firstHeartbeat = false;
@@ -1252,7 +1255,7 @@ namespace OpenSim.Region.Framework.Scenes
List coarseLocations;
List avatarUUIDs;
- while (!shuttingdown && (endFrame == null || Frame < endFrame))
+ while (!m_shuttingDown && (endFrame == null || Frame < endFrame))
{
maintc = Util.EnvironmentTickCount();
++Frame;
--
cgit v1.1
From ade164667fb7bd9d1996a8791a1f751f191c16bc Mon Sep 17 00:00:00 2001
From: Melanie
Date: Fri, 23 Mar 2012 03:16:07 +0100
Subject: Make anims way more snappy. Decouple SP animation handling from
physics frame time.
---
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 43 ++++++++++++++++--------
1 file changed, 29 insertions(+), 14 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 2346c60..a23dc31 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -233,6 +233,8 @@ namespace OpenSim.Region.Framework.Scenes
private bool m_collisionEventFlag = false;
private object m_collisionEventLock = new Object();
+ private int m_movementAnimationUpdateCounter = 0;
+
private Vector3 m_prevSitOffset;
protected AvatarAppearance m_appearance;
@@ -741,6 +743,26 @@ namespace OpenSim.Region.Framework.Scenes
Appearance = appearance;
}
+ private void RegionHeartbeatEnd(Scene scene)
+ {
+ if (IsChildAgent)
+ return;
+
+ m_movementAnimationUpdateCounter ++;
+ if (m_movementAnimationUpdateCounter >= 2)
+ {
+ m_movementAnimationUpdateCounter = 0;
+ if (Animator != null)
+ {
+ Animator.UpdateMovementAnimations();
+ }
+ else
+ {
+ m_scene.EventManager.OnRegionHeartbeatEnd -= RegionHeartbeatEnd;
+ }
+ }
+ }
+
public void RegisterToEvents()
{
ControllingClient.OnCompleteMovementToRegion += CompleteMovement;
@@ -952,6 +974,8 @@ namespace OpenSim.Region.Framework.Scenes
MovementFlag = 0;
m_scene.EventManager.TriggerOnMakeRootAgent(this);
+
+ m_scene.EventManager.OnRegionHeartbeatEnd += RegionHeartbeatEnd;
}
public int GetStateSource()
@@ -979,6 +1003,8 @@ namespace OpenSim.Region.Framework.Scenes
///
public void MakeChildAgent()
{
+ m_scene.EventManager.OnRegionHeartbeatEnd -= RegionHeartbeatEnd;
+
m_log.DebugFormat("[SCENE PRESENCE]: Making {0} a child agent in {1}", Name, Scene.RegionInfo.RegionName);
// Reset these so that teleporting in and walking out isn't seen
@@ -2377,14 +2403,15 @@ namespace OpenSim.Region.Framework.Scenes
direc.Z *= 2.6f;
// TODO: PreJump and jump happen too quickly. Many times prejump gets ignored.
- Animator.TrySetMovementAnimation("PREJUMP");
- Animator.TrySetMovementAnimation("JUMP");
+// Animator.TrySetMovementAnimation("PREJUMP");
+// Animator.TrySetMovementAnimation("JUMP");
}
}
}
// TODO: Add the force instead of only setting it to support multiple forces per frame?
m_forceToApply = direc;
+ Animator.UpdateMovementAnimations();
}
#endregion
@@ -3334,18 +3361,6 @@ namespace OpenSim.Region.Framework.Scenes
if (IsChildAgent)
return;
- //if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f))
- // The Physics Scene will send updates every 500 ms grep: PhysicsActor.SubscribeEvents(
- // as of this comment the interval is set in AddToPhysicalScene
- if (Animator != null)
- {
-// if (m_updateCount > 0)
-// {
- Animator.UpdateMovementAnimations();
-// m_updateCount--;
-// }
- }
-
CollisionEventUpdate collisionData = (CollisionEventUpdate)e;
Dictionary coldata = collisionData.m_objCollisionList;
--
cgit v1.1
From 4ed833bc9dba8e0208777f8afde32a67aebe143a Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 02:49:29 +0000
Subject: Add a scene maintenance thread in parallel to the heartbeat thread.
The maintenance thread will end up running regular jobs that don't need to be
in the main scene loop.
The idea is to make the critical main scene loop as skinny as possible - it doesn't need to run things that aren't time critical and don't depend on update ordering.
This will be done gradually over time to try and uncover any issues. Many non-criticial scene loop activities are being launched on separate threadpool threads anyway.
This may also allow modules to register their own maintenance jobs without having to maintain their own timers and threads.
Currently the maintenance loop runs once a second, as opposed to the 89ms scene loop.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 91 +++++++++++++++++++++++++++-----
1 file changed, 77 insertions(+), 14 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 09b91c0..41e9bbc 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -169,6 +169,11 @@ namespace OpenSim.Region.Framework.Scenes
}
///
+ /// Current maintenance run number
+ ///
+ public uint MaintenanceRun { get; private set; }
+
+ ///
/// The minimum length of time in seconds that will be taken for a scene frame. If the frame takes less time then we
/// will sleep for the remaining period.
///
@@ -178,6 +183,11 @@ namespace OpenSim.Region.Framework.Scenes
///
public float MinFrameTime { get; private set; }
+ ///
+ /// The minimum length of time in seconds that will be taken for a maintenance run.
+ ///
+ public float MinMaintenanceTime { get; private set; }
+
private int m_update_physics = 1;
private int m_update_entitymovement = 1;
private int m_update_objects = 1;
@@ -206,6 +216,11 @@ namespace OpenSim.Region.Framework.Scenes
private int m_lastFrameTick;
///
+ /// Tick at which the last maintenance run occurred.
+ ///
+ private int m_lastMaintenanceTick;
+
+ ///
/// Signals whether temporary objects are currently being cleaned up. Needed because this is launched
/// asynchronously from the update loop.
///
@@ -560,6 +575,7 @@ namespace OpenSim.Region.Framework.Scenes
{
m_config = config;
MinFrameTime = 0.089f;
+ MinMaintenanceTime = 1;
Random random = new Random();
@@ -1226,6 +1242,10 @@ namespace OpenSim.Region.Framework.Scenes
// don't turn on the watchdog alarm for this thread until the second frame, in order to prevent false
// alarms for scenes with many objects.
Update(1);
+
+ Watchdog.StartThread(
+ Maintenance, string.Format("Maintenance ({0})", RegionInfo.RegionName), ThreadPriority.Normal, false, true);
+
Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true;
Update(-1);
@@ -1241,6 +1261,63 @@ namespace OpenSim.Region.Framework.Scenes
Watchdog.RemoveThread();
}
+ private void Maintenance()
+ {
+ DoMaintenance(-1);
+
+ Watchdog.RemoveThread();
+ }
+
+ public void DoMaintenance(int runs)
+ {
+ long? endRun = null;
+ int runtc;
+ int previousMaintenanceTick;
+
+ if (runs >= 0)
+ endRun = MaintenanceRun + runs;
+
+ List coarseLocations;
+ List avatarUUIDs;
+
+ while (!m_shuttingDown && (endRun == null || MaintenanceRun < endRun))
+ {
+ runtc = Util.EnvironmentTickCount();
+ ++MaintenanceRun;
+
+ // Coarse locations relate to positions of green dots on the mini-map (on a SecondLife client)
+ if (MaintenanceRun % (m_update_coarse_locations / 10) == 0)
+ {
+ SceneGraph.GetCoarseLocations(out coarseLocations, out avatarUUIDs, 60);
+ // Send coarse locations to clients
+ ForEachScenePresence(delegate(ScenePresence presence)
+ {
+ presence.SendCoarseLocations(coarseLocations, avatarUUIDs);
+ });
+ }
+
+ Watchdog.UpdateThread();
+
+ previousMaintenanceTick = m_lastMaintenanceTick;
+ m_lastMaintenanceTick = Util.EnvironmentTickCount();
+ runtc = Util.EnvironmentTickCountSubtract(m_lastMaintenanceTick, runtc);
+ runtc = (int)(MinMaintenanceTime * 1000) - runtc;
+
+ if (runtc > 0)
+ Thread.Sleep(runtc);
+
+ // Optionally warn if a frame takes double the amount of time that it should.
+ if (DebugUpdates
+ && Util.EnvironmentTickCountSubtract(
+ m_lastMaintenanceTick, previousMaintenanceTick) > (int)(MinMaintenanceTime * 1000 * 2))
+ m_log.WarnFormat(
+ "[SCENE]: Maintenance took {0} ms (desired max {1} ms) in {2}",
+ Util.EnvironmentTickCountSubtract(m_lastMaintenanceTick, previousMaintenanceTick),
+ MinMaintenanceTime * 1000,
+ RegionInfo.RegionName);
+ }
+ }
+
public override void Update(int frames)
{
long? endFrame = null;
@@ -1252,8 +1329,6 @@ namespace OpenSim.Region.Framework.Scenes
int tmpPhysicsMS, tmpPhysicsMS2, tmpAgentMS, tmpTempOnRezMS, evMS, backMS, terMS;
int previousFrameTick;
int maintc;
- List coarseLocations;
- List avatarUUIDs;
while (!m_shuttingDown && (endFrame == null || Frame < endFrame))
{
@@ -1305,17 +1380,6 @@ namespace OpenSim.Region.Framework.Scenes
if (Frame % m_update_presences == 0)
m_sceneGraph.UpdatePresences();
- // Coarse locations relate to positions of green dots on the mini-map (on a SecondLife client)
- if (Frame % m_update_coarse_locations == 0)
- {
- SceneGraph.GetCoarseLocations(out coarseLocations, out avatarUUIDs, 60);
- // Send coarse locations to clients
- ForEachScenePresence(delegate(ScenePresence presence)
- {
- presence.SendCoarseLocations(coarseLocations, avatarUUIDs);
- });
- }
-
agentMS += Util.EnvironmentTickCountSubtract(tmpAgentMS);
// Delete temp-on-rez stuff
@@ -1423,7 +1487,6 @@ namespace OpenSim.Region.Framework.Scenes
EventManager.TriggerRegionHeartbeatEnd(this);
- // Tell the watchdog that this thread is still alive
Watchdog.UpdateThread();
previousFrameTick = m_lastFrameTick;
--
cgit v1.1
From 54887bf38623007d9148e651b1d08f6d6fca35e7 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 03:33:07 +0000
Subject: Add experimental SendPeriodicAppearanceUpdates = true/false setting
to [Startup] in OpenSim.ini
On osgrid and other places, I have observed that manually sending appearance updates from the console often relieves grey avatar syndrome.
Despite hunting high and low, I haven't been able to find where this packet is sometimes being lost - it might be a persistent viewer bug for all I know.
Therefore, this experimental setting resends appearance data for everybody in the scene every 60 seconds. These packets are small and the viewer only fetches texture
data if it doesn't already have it.
Default is false.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 41e9bbc..5809508 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -104,6 +104,11 @@ namespace OpenSim.Region.Framework.Scenes
public bool m_allowScriptCrossings;
public bool m_useFlySlow;
+ ///
+ /// Temporarily setting to trigger appearance resends at 60 second intervals.
+ ///
+ public bool SendPeriodicAppearanceUpdates { get; set; }
+
protected float m_defaultDrawDistance = 255.0f;
public float DefaultDrawDistance
{
@@ -761,6 +766,8 @@ namespace OpenSim.Region.Framework.Scenes
m_update_presences = startupConfig.GetInt( "UpdateAgentsEveryNFrames", m_update_presences);
m_update_terrain = startupConfig.GetInt( "UpdateTerrainEveryNFrames", m_update_terrain);
m_update_temp_cleaning = startupConfig.GetInt( "UpdateTempCleaningEveryNFrames", m_update_temp_cleaning);
+
+ SendPeriodicAppearanceUpdates = startupConfig.GetBoolean("SendPeriodicAppearanceUpdates", SendPeriodicAppearanceUpdates);
}
#endregion Region Config
@@ -1296,6 +1303,16 @@ namespace OpenSim.Region.Framework.Scenes
});
}
+ if (SendPeriodicAppearanceUpdates && MaintenanceRun % 60 == 0)
+ {
+ m_log.DebugFormat("[SCENE]: Sending periodic appearance updates");
+
+ if (AvatarFactory != null)
+ {
+ ForEachRootScenePresence(sp => AvatarFactory.SendAppearance(sp.UUID));
+ }
+ }
+
Watchdog.UpdateThread();
previousMaintenanceTick = m_lastMaintenanceTick;
--
cgit v1.1
From e5b182fb41fb78a271b45f40e3d50e387bc38ad8 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 03:37:59 +0000
Subject: Add information about SendPeriodicAppearanceUpdates to
OpenSimDefaults.ini for now.
Default remains false.
---
bin/OpenSimDefaults.ini | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 3470b82..6986046 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -177,6 +177,11 @@
; Objects will always be considered for persistance in the next sweep if the first change occurred this number of seconds ago
MaximumTimeBeforePersistenceConsidered = 600
+ ; Experimental setting to resend appearance updates every 60 seconds.
+ ; These packets are small and this can help with grey avatar syndrome.
+ ; Default is false
+ SendPeriodicAppearanceUpdates = false
+
; ##
; ## PHYSICS
; ##
--
cgit v1.1
From d4beb2f5bcc71949c47daefc25d65160423d6cb1 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 23 Mar 2012 03:39:39 +0000
Subject: Comment out log message about sending periodic appearance updates.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 5809508..0dcbcdb 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1305,8 +1305,8 @@ namespace OpenSim.Region.Framework.Scenes
if (SendPeriodicAppearanceUpdates && MaintenanceRun % 60 == 0)
{
- m_log.DebugFormat("[SCENE]: Sending periodic appearance updates");
-
+// m_log.DebugFormat("[SCENE]: Sending periodic appearance updates");
+
if (AvatarFactory != null)
{
ForEachRootScenePresence(sp => AvatarFactory.SendAppearance(sp.UUID));
--
cgit v1.1
From 6b87a29c86f9e8612ffb348767c6544af989fc13 Mon Sep 17 00:00:00 2001
From: nebadon
Date: Fri, 23 Mar 2012 02:22:57 -0700
Subject: fix yield prolog so it compiles with mono 2.11 there has been a
bugzilla report files with mono project in regards to this change, this
simply lets us move forward with using mono 2.11 for now :
https://bugzilla.xamarin.com/show_bug.cgi?id=4052
---
.../ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs | 6 +++---
OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs
index 04357a9..09a9a08 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs
@@ -226,7 +226,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
break;
}
}
-
+ int z = 0;
try
{
if (gotMatch)
@@ -235,8 +235,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
finally
{
// Manually finalize all the iterators.
- for (int i = 0; i < nIterators; ++i)
- iterators[i].Dispose();
+ for (z = 0; z < nIterators; ++z)
+ iterators[z].Dispose();
}
}
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs
index d8f44c1..f2171dd 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs
@@ -576,7 +576,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
break;
}
}
-
+ int z = 0;
try
{
if (gotMatch)
@@ -585,8 +585,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
finally
{
// Manually finalize all the iterators.
- for (int i = 0; i < nIterators; ++i)
- iterators[i].Dispose();
+ for (z = 0; z < nIterators; ++z)
+ iterators[z].Dispose();
}
}
--
cgit v1.1
From 164706043d68108a6144abf306739cccfc3133a3 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 23 Mar 2012 13:11:58 -0700
Subject: Have the PhysicsParameters module output console command responses
directly to the console rather than logging at INFO (which doesn't output
anything for WARN).
There should really be a WriteLine method on ICommandConsole so all
of the different commands don't have to figure out where the command
output should go.
---
.../OptionalModules/PhysicsParameters/PhysicsParameters.cs | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs b/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs
index a3f68e5..e452124 100755
--- a/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs
+++ b/OpenSim/Region/OptionalModules/PhysicsParameters/PhysicsParameters.cs
@@ -264,14 +264,14 @@ namespace OpenSim.Region.OptionalModules.PhysicsParameters
private void WriteOut(string msg, params object[] args)
{
- m_log.InfoFormat(msg, args);
- // MainConsole.Instance.OutputFormat(msg, args);
+ // m_log.InfoFormat(msg, args);
+ MainConsole.Instance.OutputFormat(msg, args);
}
private void WriteError(string msg, params object[] args)
{
- m_log.ErrorFormat(msg, args);
- // MainConsole.Instance.OutputFormat(msg, args);
+ // m_log.ErrorFormat(msg, args);
+ MainConsole.Instance.OutputFormat(msg, args);
}
}
-}
\ No newline at end of file
+}
--
cgit v1.1
From 975184b3f94e169a720ee1dd9044f09a7dbb77cd Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 16 Mar 2012 08:59:41 -0700
Subject: BulletSim: Update list of TODO tasks
---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index e9a849c..b1e551c 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -52,6 +52,19 @@ using OpenSim.Region.Framework;
// Implement LockAngularMotion
// Decide if clearing forces is the right thing to do when setting position (BulletSim::SetObjectTranslation)
// Does NeedsMeshing() really need to exclude all the different shapes?
+// Remove mesh and Hull stuff. Use mesh passed to bullet and use convexdecom from bullet.
+// Add PID movement operations
+// Debug linkset
+// Ccd threshold to defaults (0.0)
+// Command line get and set is broken
+// Check terrain size. 128 or 127?
+// Test with multiple regions in one simulator
+// Multiple contact points on collision?
+// See code in ode::near... calls to collision_accounting_events()
+// Use collision masks for collision with terrain and phantom objects
+// Check out llVolumeDetect. Must do something for that.
+// Physical phantom objects and related typing (collision options )
+// Raycast
//
namespace OpenSim.Region.Physics.BulletSPlugin
{
--
cgit v1.1
From 6c504426252668a7d366705e49ca1ba642367412 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 16 Mar 2012 14:05:01 -0700
Subject: BulletSim: update BulletSim.dll to Bullet 2.80 and add
libBulletSim.so to the new lib32 and lib64 binary directories
---
bin/lib32/BulletSim.dll | Bin 562176 -> 566784 bytes
bin/lib32/libBulletSim.so | Bin 0 -> 618542 bytes
bin/lib64/BulletSim.dll | Bin 768000 -> 773632 bytes
bin/lib64/libBulletSim.so | Bin 0 -> 684103 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100755 bin/lib32/libBulletSim.so
create mode 100755 bin/lib64/libBulletSim.so
diff --git a/bin/lib32/BulletSim.dll b/bin/lib32/BulletSim.dll
index d1571cf..82d9737 100755
Binary files a/bin/lib32/BulletSim.dll and b/bin/lib32/BulletSim.dll differ
diff --git a/bin/lib32/libBulletSim.so b/bin/lib32/libBulletSim.so
new file mode 100755
index 0000000..f93f7d7
Binary files /dev/null and b/bin/lib32/libBulletSim.so differ
diff --git a/bin/lib64/BulletSim.dll b/bin/lib64/BulletSim.dll
index ec21dfe..f922ccc 100755
Binary files a/bin/lib64/BulletSim.dll and b/bin/lib64/BulletSim.dll differ
diff --git a/bin/lib64/libBulletSim.so b/bin/lib64/libBulletSim.so
new file mode 100755
index 0000000..c0c859f
Binary files /dev/null and b/bin/lib64/libBulletSim.so differ
--
cgit v1.1
From b22d0401693dad44790d4cbf58d85c0fe3870460 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 16 Mar 2012 16:37:21 -0700
Subject: BulletSim: add some new runtime setable parameters to match the dll.
---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 13 ++++++++++---
OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs | 10 ++++++----
bin/OpenSimDefaults.ini | 2 +-
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index b1e551c..977dcbe 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -177,6 +177,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
if (m_log.IsDebugEnabled)
{
m_log.DebugFormat("{0}: Initialize: Setting debug callback for unmanaged code", LogHeader);
+ // the handle is saved to it doesn't get freed after this call
m_DebugLogCallbackHandle = new BulletSimAPI.DebugLogCallback(BulletLogger);
BulletSimAPI.SetDebugLogCallback(m_DebugLogCallbackHandle);
}
@@ -185,7 +186,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
mesher = meshmerizer;
// The bounding box for the simulated world
- Vector3 worldExtent = new Vector3(Constants.RegionSize, Constants.RegionSize, 4096f);
+ Vector3 worldExtent = new Vector3(Constants.RegionSize, Constants.RegionSize, 8192f);
// m_log.DebugFormat("{0}: Initialize: Calling BulletSimAPI.Initialize.", LogHeader);
m_worldID = BulletSimAPI.Initialize(worldExtent, m_paramsHandle.AddrOfPinnedObject(),
@@ -233,7 +234,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.terrainFriction = 0.5f;
parms.terrainHitFraction = 0.8f;
parms.terrainRestitution = 0f;
- parms.avatarFriction = 0.0f;
+ parms.avatarFriction = 0.5f;
parms.avatarDensity = 60f;
parms.avatarCapsuleRadius = 0.37f;
parms.avatarCapsuleHeight = 1.5f; // 2.140599f
@@ -716,6 +717,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
// new PhysParameterEntry("CcdSweptSphereRadius", "" ),
new PhysParameterEntry("ContactProcessingThreshold", "Distance between contacts before doing collision check" ),
+ new PhysParameterEntry("Friction", "Set friction parameter for a specific object" ),
+ new PhysParameterEntry("Restitution", "Set restitution parameter for a specific object" ),
+
new PhysParameterEntry("TerrainFriction", "Factor to reduce movement against terrain surface" ),
new PhysParameterEntry("TerrainHitFraction", "Distance to measure hit collisions" ),
new PhysParameterEntry("TerrainRestitution", "Bouncyness" ),
@@ -756,7 +760,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "defaultdensity": m_params[0].defaultDensity = val; break;
case "defaultrestitution": m_params[0].defaultRestitution = val; break;
case "collisionmargin": m_params[0].collisionMargin = val; break;
- case "gravity": m_params[0].gravity = val; TaintedUpdateParameter(lparm, PhysParameterEntry.APPLY_TO_NONE, val); break;
+ case "gravity": m_params[0].gravity = val; TaintedUpdateParameter(lparm, localID, val); break;
case "lineardamping": UpdateParameterPrims(ref m_params[0].linearDamping, lparm, localID, val); break;
case "angulardamping": UpdateParameterPrims(ref m_params[0].angularDamping, lparm, localID, val); break;
@@ -767,6 +771,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "ccdsweptsphereradius": UpdateParameterPrims(ref m_params[0].ccdSweptSphereRadius, lparm, localID, val); break;
case "contactprocessingthreshold": UpdateParameterPrims(ref m_params[0].contactProcessingThreshold, lparm, localID, val); break;
+ case "friction": TaintedUpdateParameter(lparm, localID, val); break;
+ case "restitution": TaintedUpdateParameter(lparm, localID, val); break;
+
// set a terrain physical feature and cause terrain to be recalculated
case "terrainfriction": m_params[0].terrainFriction = val; TaintedUpdateParameter("terrain", 0, val); break;
case "terrainhitfraction": m_params[0].terrainHitFraction = val; TaintedUpdateParameter("terrain", 0, val); break;
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
index d12bd7d..aab0994 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
@@ -149,16 +149,16 @@ public static extern uint Initialize(Vector3 maxPosition, IntPtr parms,
int maxUpdates, IntPtr updateArray);
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
-public static extern bool UpdateParameter(uint worldID, uint localID,
- [MarshalAs(UnmanagedType.LPStr)]string paramCode, float value);
-
-[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern void SetHeightmap(uint worldID, [MarshalAs(UnmanagedType.LPArray)] float[] heightMap);
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern void Shutdown(uint worldID);
+[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
+public static extern bool UpdateParameter(uint worldID, uint localID,
+ [MarshalAs(UnmanagedType.LPStr)]string paramCode, float value);
+// ===============================================================================
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern int PhysicsStep(uint worldID, float timeStep, int maxSubSteps, float fixedTimeStep,
out int updatedEntityCount,
@@ -240,6 +240,7 @@ public static extern bool HasObject(uint worldID, uint id);
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern bool DestroyObject(uint worldID, uint id);
+// ===============================================================================
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern SweepHit ConvexSweepTest(uint worldID, uint id, Vector3 to, float extraMargin);
@@ -249,6 +250,7 @@ public static extern RaycastHit RayTest(uint worldID, uint id, Vector3 from, Vec
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern Vector3 RecoverFromPenetration(uint worldID, uint id);
+// ===============================================================================
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static extern void DumpBulletStatistics();
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 6986046..1216bce 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -846,7 +846,7 @@
TerrainFriction = 0.50
TerrainHitFriction = 0.8
TerrainRestitution = 0
- AvatarFriction = 0
+ AvatarFriction = 0.5
AvatarDensity = 60.0
AvatarCapsuleRadius = 0.37
AvatarCapsuleHeight = 1.5
--
cgit v1.1
From 6ecdadb32999aed776df29e53541326958daf836 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 16 Mar 2012 17:13:06 -0700
Subject: BulletSim: set buoyancy in only one place
---
OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index 0cab5d1..e816b61 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -260,11 +260,8 @@ public class BSCharacter : PhysicsActor
get { return _flying; }
set {
_flying = value;
- _scene.TaintedObject(delegate()
- {
- // simulate flying by changing the effect of gravity
- BulletSimAPI.SetObjectBuoyancy(_scene.WorldID, LocalID, _flying ? 1f : 0f);
- });
+ // simulate flying by changing the effect of gravity
+ this.Buoyancy(_flying ? 1f : 0f);
}
}
public override bool
@@ -299,6 +296,7 @@ public class BSCharacter : PhysicsActor
get { return _kinematic; }
set { _kinematic = value; }
}
+ // neg=fall quickly, 0=1g, 1=0g, pos=float up
public override float Buoyancy {
get { return _buoyancy; }
set { _buoyancy = value;
--
cgit v1.1
From de24feb275ddd1c7e7c0b04900718a9000b8d49b Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Sun, 18 Mar 2012 11:53:53 -0700
Subject: BulletSim: Add AvatarRestitution parameter. Centralize computation of
buoyancy for flying. Tweek avatar default friction and resititution
---
OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | 9 ++++++---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 3 +++
bin/OpenSimDefaults.ini | 3 ++-
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index e816b61..1a61431 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -94,7 +94,7 @@ public class BSCharacter : PhysicsActor
_flying = isFlying;
_orientation = Quaternion.Identity;
_velocity = Vector3.Zero;
- _buoyancy = isFlying ? 1f : 0f;
+ _buoyancy = ComputeBuoyancyFromFlying(isFlying);
_scale = new Vector3(1f, 1f, 1f);
_density = _scene.Params.avatarDensity;
ComputeAvatarVolumeAndMass(); // set _avatarVolume and _mass based on capsule size, _density and _scale
@@ -110,7 +110,7 @@ public class BSCharacter : PhysicsActor
shapeData.Buoyancy = _buoyancy;
shapeData.Static = ShapeData.numericFalse;
shapeData.Friction = _scene.Params.avatarFriction;
- shapeData.Restitution = _scene.Params.defaultRestitution;
+ shapeData.Restitution = _scene.Params.avatarRestitution;
// do actual create at taint time
_scene.TaintedObject(delegate()
@@ -261,9 +261,12 @@ public class BSCharacter : PhysicsActor
set {
_flying = value;
// simulate flying by changing the effect of gravity
- this.Buoyancy(_flying ? 1f : 0f);
+ this.Buoyancy(ComputeBuoyancyFromFlying(_flying));
}
}
+ private float ComputeBuoyancyFromFlying(bool ifFlying) {
+ return ifFlying ? 1f : 0f;
+ }
public override bool
SetAlwaysRun {
get { return _setAlwaysRun; }
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 977dcbe..9b12b4f 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -235,6 +235,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.terrainHitFraction = 0.8f;
parms.terrainRestitution = 0f;
parms.avatarFriction = 0.5f;
+ parms.avatarRestitution = 0.0f;
parms.avatarDensity = 60f;
parms.avatarCapsuleRadius = 0.37f;
parms.avatarCapsuleHeight = 1.5f; // 2.140599f
@@ -279,7 +280,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.terrainHitFraction = pConfig.GetFloat("TerrainHitFraction", parms.terrainHitFraction);
parms.terrainRestitution = pConfig.GetFloat("TerrainRestitution", parms.terrainRestitution);
parms.avatarFriction = pConfig.GetFloat("AvatarFriction", parms.avatarFriction);
+ parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution);
parms.avatarDensity = pConfig.GetFloat("AvatarDensity", parms.avatarDensity);
+ parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution);
parms.avatarCapsuleRadius = pConfig.GetFloat("AvatarCapsuleRadius", parms.avatarCapsuleRadius);
parms.avatarCapsuleHeight = pConfig.GetFloat("AvatarCapsuleHeight", parms.avatarCapsuleHeight);
}
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 1216bce..a31e6f4 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -846,7 +846,8 @@
TerrainFriction = 0.50
TerrainHitFriction = 0.8
TerrainRestitution = 0
- AvatarFriction = 0.5
+ AvatarFriction = 0.2
+ AvatarRestitution = 0.0
AvatarDensity = 60.0
AvatarCapsuleRadius = 0.37
AvatarCapsuleHeight = 1.5
--
cgit v1.1
From 1a738caecab74c5b9f6b6bac69a3ea9ccdc80b24 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Wed, 21 Mar 2012 07:07:44 -0700
Subject: BulletSim: update TODO list. Rearrange code for readability. Add per
object friction and restitution runtime settable parameters.
---
.../Region/Physics/BulletSPlugin/BSCharacter.cs | 4 +--
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 30 +++++++++++-----------
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index 1a61431..20708d9 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -261,7 +261,7 @@ public class BSCharacter : PhysicsActor
set {
_flying = value;
// simulate flying by changing the effect of gravity
- this.Buoyancy(ComputeBuoyancyFromFlying(_flying));
+ this.Buoyancy = ComputeBuoyancyFromFlying(_flying);
}
}
private float ComputeBuoyancyFromFlying(bool ifFlying) {
@@ -356,7 +356,7 @@ public class BSCharacter : PhysicsActor
}
else
{
- m_log.WarnFormat("{0}: Got a NaN force applied to a Character", LogHeader);
+ m_log.ErrorFormat("{0}: Got a NaN force applied to a Character", LogHeader);
}
//m_lastUpdateSent = false;
}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 9b12b4f..142103b 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -37,14 +37,18 @@ using OpenMetaverse;
using OpenSim.Region.Framework;
// TODOs for BulletSim (for BSScene, BSPrim, BSCharacter and BulletSim)
+// Debug linkset
+// Test with multiple regions in one simulator
// Adjust character capsule size when height is adjusted (ScenePresence.SetHeight)
// Test sculpties
// Compute physics FPS reasonably
// Based on material, set density and friction
-// More efficient memory usage in passing hull information from BSPrim to BulletSim
+// More efficient memory usage when passing hull information from BSPrim to BulletSim
// Four states of prim: Physical, regular, phantom and selected. Are we modeling these correctly?
// In SL one can set both physical and phantom (gravity, does not effect others, makes collisions with ground)
// At the moment, physical and phantom causes object to drop through the terrain
+// Physical phantom objects and related typing (collision options )
+// Check out llVolumeDetect. Must do something for that.
// Should prim.link() and prim.delink() membership checking happen at taint time?
// Mesh sharing. Use meshHash to tell if we already have a hull of that shape and only create once
// Do attachments need to be handled separately? Need collision events. Do not collide with VolumeDetect
@@ -53,17 +57,14 @@ using OpenSim.Region.Framework;
// Decide if clearing forces is the right thing to do when setting position (BulletSim::SetObjectTranslation)
// Does NeedsMeshing() really need to exclude all the different shapes?
// Remove mesh and Hull stuff. Use mesh passed to bullet and use convexdecom from bullet.
-// Add PID movement operations
-// Debug linkset
-// Ccd threshold to defaults (0.0)
-// Command line get and set is broken
+// Add PID movement operations. What does ScenePresence.MoveToTarget do?
// Check terrain size. 128 or 127?
-// Test with multiple regions in one simulator
// Multiple contact points on collision?
// See code in ode::near... calls to collision_accounting_events()
+// (This might not be a problem. ODE collects all the collisions with one object in one tick.)
// Use collision masks for collision with terrain and phantom objects
-// Check out llVolumeDetect. Must do something for that.
-// Physical phantom objects and related typing (collision options )
+// Figure out how to not allocate a new Dictionary and List for every collision
+// in BSPrim.Collide() and BSCharacter.Collide(). Can the same ones be reused?
// Raycast
//
namespace OpenSim.Region.Physics.BulletSPlugin
@@ -282,7 +283,6 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.avatarFriction = pConfig.GetFloat("AvatarFriction", parms.avatarFriction);
parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution);
parms.avatarDensity = pConfig.GetFloat("AvatarDensity", parms.avatarDensity);
- parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution);
parms.avatarCapsuleRadius = pConfig.GetFloat("AvatarCapsuleRadius", parms.avatarCapsuleRadius);
parms.avatarCapsuleHeight = pConfig.GetFloat("AvatarCapsuleHeight", parms.avatarCapsuleHeight);
}
@@ -408,16 +408,16 @@ public class BSScene : PhysicsScene, IPhysicsParameters
{
EntityProperties entprop = m_updateArray[ii];
// m_log.DebugFormat("{0}: entprop[{1}]: id={2}, pos={3}", LogHeader, ii, entprop.ID, entprop.Position);
- BSCharacter actor;
- if (m_avatars.TryGetValue(entprop.ID, out actor))
- {
- actor.UpdateProperties(entprop);
- continue;
- }
BSPrim prim;
if (m_prims.TryGetValue(entprop.ID, out prim))
{
prim.UpdateProperties(entprop);
+ continue;
+ }
+ BSCharacter actor;
+ if (m_avatars.TryGetValue(entprop.ID, out actor))
+ {
+ actor.UpdateProperties(entprop);
}
}
}
--
cgit v1.1
From 2f6e8564fe01a4a6421fdda5acdf41aef99cce8a Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Wed, 21 Mar 2012 17:24:17 -0700
Subject: BulletSim: add updated (but not working) BulletSim dlls
---
bin/lib32/BulletSim.dll | Bin 566784 -> 532480 bytes
bin/lib32/libBulletSim.so | Bin 618542 -> 618538 bytes
bin/lib64/BulletSim.dll | Bin 773632 -> 684544 bytes
bin/lib64/libBulletSim.so | Bin 684103 -> 684103 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/bin/lib32/BulletSim.dll b/bin/lib32/BulletSim.dll
index 82d9737..7811c46 100755
Binary files a/bin/lib32/BulletSim.dll and b/bin/lib32/BulletSim.dll differ
diff --git a/bin/lib32/libBulletSim.so b/bin/lib32/libBulletSim.so
index f93f7d7..dd2c5ee 100755
Binary files a/bin/lib32/libBulletSim.so and b/bin/lib32/libBulletSim.so differ
diff --git a/bin/lib64/BulletSim.dll b/bin/lib64/BulletSim.dll
index f922ccc..b8a4ed0 100755
Binary files a/bin/lib64/BulletSim.dll and b/bin/lib64/BulletSim.dll differ
diff --git a/bin/lib64/libBulletSim.so b/bin/lib64/libBulletSim.so
index c0c859f..3ee7cbf 100755
Binary files a/bin/lib64/libBulletSim.so and b/bin/lib64/libBulletSim.so differ
--
cgit v1.1
From 1273f259e46154f861104610e8f6029b3c19623d Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Thu, 22 Mar 2012 17:04:06 -0700
Subject: BulletSim: remove confusion between angularVelocity and
rotationalVelocity (there is still confusion in the rest of OpenSim). Enhance
some debug statements to include the object ID.
---
OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs | 4 ++--
OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 17 ++++++-----------
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 5 +++--
3 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
index 046726d..eb20eb3 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs
@@ -821,7 +821,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
*/
// Get what the body is doing, this includes 'external' influences
- Vector3 angularVelocity = m_prim.AngularVelocity;
+ Vector3 angularVelocity = m_prim.RotationalVelocity;
// Vector3 angularVelocity = Vector3.Zero;
if (m_angularMotorApply > 0)
@@ -910,7 +910,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
m_lastAngularVelocity -= m_lastAngularVelocity * decayamount;
// Apply to the body
- m_prim.AngularVelocity = m_lastAngularVelocity;
+ m_prim.RotationalVelocity = m_lastAngularVelocity;
} //end MoveAngular
internal void LimitRotation(float timestep)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index 898436b..f122df9 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -85,7 +85,6 @@ public sealed class BSPrim : PhysicsActor
private OMV.Vector3 _rotationalVelocity;
private bool _kinematic;
private float _buoyancy;
- private OMV.Vector3 _angularVelocity;
private List _childrenPrims;
private BSPrim _parentPrim;
@@ -119,7 +118,6 @@ public sealed class BSPrim : PhysicsActor
_buoyancy = 1f;
_velocity = OMV.Vector3.Zero;
_rotationalVelocity = OMV.Vector3.Zero;
- _angularVelocity = OMV.Vector3.Zero;
_hullKey = 0;
_meshKey = 0;
_pbs = pbs;
@@ -146,7 +144,7 @@ public sealed class BSPrim : PhysicsActor
// called when this prim is being destroyed and we should free all the resources
public void Destroy()
{
- // m_log.DebugFormat("{0}: Destroy", LogHeader);
+ // m_log.DebugFormat("{0}: Destroy, id={1}", LogHeader, LocalID);
// Undo any vehicle properties
_vehicle.ProcessTypeChange(Vehicle.TYPE_NONE);
_scene.RemoveVehiclePrim(this); // just to make sure
@@ -203,7 +201,7 @@ public sealed class BSPrim : PhysicsActor
// link me to the specified parent
public override void link(PhysicsActor obj) {
- BSPrim parent = (BSPrim)obj;
+ BSPrim parent = obj as BSPrim;
// m_log.DebugFormat("{0}: link {1}/{2} to {3}", LogHeader, _avName, _localID, obj.LocalID);
// TODO: decide if this parent checking needs to happen at taint time
if (_parentPrim == null)
@@ -527,10 +525,6 @@ public sealed class BSPrim : PhysicsActor
});
}
}
- public OMV.Vector3 AngularVelocity {
- get { return _angularVelocity; }
- set { _angularVelocity = value; }
- }
public override bool Kinematic {
get { return _kinematic; }
set { _kinematic = value;
@@ -993,7 +987,7 @@ public sealed class BSPrim : PhysicsActor
}
// m_log.DebugFormat("{0}: CreateGeomMesh: calling CreateMesh. lid={1}, key={2}, indices={3}, vertices={4}",
- // LogHeader, _localID, _meshKey, indices.Length, vertices.Count);
+ // LogHeader, _localID, _meshKey, indices.Length, vertices.Count);
BulletSimAPI.CreateMesh(_scene.WorldID, _meshKey, indices.GetLength(0), indices,
vertices.Count, verticesAsFloats);
@@ -1127,7 +1121,7 @@ public sealed class BSPrim : PhysicsActor
return;
}
- // Create an object in Bullet
+ // Create an object in Bullet if it has not already been created
// No locking here because this is done when the physics engine is not simulating
private void CreateObject()
{
@@ -1324,7 +1318,8 @@ public sealed class BSPrim : PhysicsActor
_velocity = entprop.Velocity;
_acceleration = entprop.Acceleration;
_rotationalVelocity = entprop.RotationalVelocity;
- // m_log.DebugFormat("{0}: RequestTerseUpdate. id={1}, ch={2}, pos={3}, rot={4}", LogHeader, LocalID, changed, _position, _orientation);
+ // m_log.DebugFormat("{0}: RequestTerseUpdate. id={1}, ch={2}, pos={3}, rot={4}, vel={5}, acc={6}, rvel={7}",
+ // LogHeader, LocalID, changed, _position, _orientation, _velocity, _acceleration, _rotationalVelocity);
base.RequestPhysicsterseUpdate();
}
}
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 142103b..13d5e03 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -487,12 +487,12 @@ public class BSScene : PhysicsScene, IPhysicsParameters
public override void DeleteTerrain()
{
- m_log.DebugFormat("{0}: DeleteTerrain()", LogHeader);
+ // m_log.DebugFormat("{0}: DeleteTerrain()", LogHeader);
}
public override void Dispose()
{
- m_log.DebugFormat("{0}: Dispose()", LogHeader);
+ // m_log.DebugFormat("{0}: Dispose()", LogHeader);
}
public override Dictionary GetTopColliders()
@@ -753,6 +753,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
switch (lparm)
{
case "detailedstats": m_detailedStatsStep = (int)val; break;
+
case "meshlod": m_meshLOD = (int)val; break;
case "sculptlod": m_sculptLOD = (int)val; break;
case "maxsubstep": m_maxSubSteps = (int)val; break;
--
cgit v1.1
From 142de1d02f086c80888eb216cfd31b84ec27a79b Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 23 Mar 2012 10:59:40 -0700
Subject: BulletSim: add a bunch of internal Bullet configuration parameters to
OpenSimDefaults.ini and the code.
---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 34 ++++++++++++++++++++++
.../Region/Physics/BulletSPlugin/BulletSimAPI.cs | 9 ++++++
bin/OpenSimDefaults.ini | 9 ++++++
3 files changed, 52 insertions(+)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 13d5e03..8d0f9a6 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -240,6 +240,15 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.avatarDensity = 60f;
parms.avatarCapsuleRadius = 0.37f;
parms.avatarCapsuleHeight = 1.5f; // 2.140599f
+ parms.avatarContactProcessingThreshold = 0.1f;
+
+ parms.maxPersistantManifoldPoolSize = 0f;
+ parms.shouldDisableContactPoolDynamicAllocation = ConfigurationParameters.numericFalse;
+ parms.shouldForceUpdateAllAabbs = ConfigurationParameters.numericFalse;
+ parms.shouldRandomizeSolverOrder = ConfigurationParameters.numericFalse;
+ parms.shouldSplitSimulationIslands = ConfigurationParameters.numericFalse;
+ parms.shouldEnableFrictionCaching = ConfigurationParameters.numericFalse;
+ parms.numberOfSolverIterations = 0f; // means use default
if (config != null)
{
@@ -285,11 +294,36 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.avatarDensity = pConfig.GetFloat("AvatarDensity", parms.avatarDensity);
parms.avatarCapsuleRadius = pConfig.GetFloat("AvatarCapsuleRadius", parms.avatarCapsuleRadius);
parms.avatarCapsuleHeight = pConfig.GetFloat("AvatarCapsuleHeight", parms.avatarCapsuleHeight);
+ parms.avatarContactProcessingThreshold = pConfig.GetFloat("AvatarContactProcessingThreshold", parms.avatarContactProcessingThreshold);
+
+ parms.maxPersistantManifoldPoolSize = pConfig.GetFloat("MaxPersistantManifoldPoolSize", parms.maxPersistantManifoldPoolSize);
+ parms.shouldDisableContactPoolDynamicAllocation = ParamBoolean(pConfig, "ShouldDisableContactPoolDynamicAllocation", parms.shouldDisableContactPoolDynamicAllocation);
+ parms.shouldForceUpdateAllAabbs = ParamBoolean(pConfig, "ShouldForceUpdateAllAabbs", parms.shouldForceUpdateAllAabbs);
+ parms.shouldRandomizeSolverOrder = ParamBoolean(pConfig, "ShouldRandomizeSolverOrder", parms.shouldRandomizeSolverOrder);
+ parms.shouldSplitSimulationIslands = ParamBoolean(pConfig, "ShouldSplitSimulationIslands", parms.shouldSplitSimulationIslands);
+ parms.shouldEnableFrictionCaching = ParamBoolean(pConfig, "ShouldEnableFrictionCaching", parms.shouldEnableFrictionCaching);
+ parms.numberOfSolverIterations = pConfig.GetFloat("NumberOfSolverIterations", parms.numberOfSolverIterations);
}
}
m_params[0] = parms;
}
+ // A helper function that handles a true/false parameter and returns the proper float number encoding
+ float ParamBoolean(IConfig config, string parmName, float deflt)
+ {
+ float ret = deflt;
+ if (config.Contains(parmName))
+ {
+ ret = ConfigurationParameters.numericFalse;
+ if (config.GetBoolean(parmName, false))
+ {
+ ret = ConfigurationParameters.numericTrue;
+ }
+ }
+ return ret;
+ }
+
+
// Called directly from unmanaged code so don't do much
private void BulletLogger(string msg)
{
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
index aab0994..086f0dc 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimAPI.cs
@@ -132,6 +132,15 @@ public struct ConfigurationParameters
public float avatarRestitution;
public float avatarCapsuleRadius;
public float avatarCapsuleHeight;
+ public float avatarContactProcessingThreshold;
+
+ public float maxPersistantManifoldPoolSize;
+ public float shouldDisableContactPoolDynamicAllocation;
+ public float shouldForceUpdateAllAabbs;
+ public float shouldRandomizeSolverOrder;
+ public float shouldSplitSimulationIslands;
+ public float shouldEnableFrictionCaching;
+ public float numberOfSolverIterations;
public const float numericTrue = 1f;
public const float numericFalse = 0f;
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index a31e6f4..34f70a2 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -851,6 +851,7 @@
AvatarDensity = 60.0
AvatarCapsuleRadius = 0.37
AvatarCapsuleHeight = 1.5
+ AvatarContactProcessingThreshold = 0.1;
MaxObjectMass = 10000.01
@@ -863,6 +864,14 @@
CcdMotionThreshold = 0.0
CcdSweptSphereRadius = 0.0
ContactProcessingThreshold = 0.1
+ MaxPersistantManifoldPoolSize = 0;
+ ShouldDisableContactPoolDynamicAllocation = False;
+ ShouldForceUpdateAllAabbs = False;
+ ShouldRandomizeSolverOrder = False;
+ ShouldSplitSimulationIslands = False;
+ ShouldEnableFrictionCaching = False;
+ NumberOfSolverIterations = 0;
+
; Whether to mesh sculpties
MeshSculptedPrim = true
--
cgit v1.1
From 3f53b7bc919b8270327911c3bc8ea71640c68c81 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 23 Mar 2012 12:12:06 -0700
Subject: BulletSim: Add new configuration parameters to get and set console
commands
---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 36 ++++++++++++++++++++++---
1 file changed, 32 insertions(+), 4 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 8d0f9a6..8d2e25f 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -750,9 +750,17 @@ public class BSScene : PhysicsScene, IPhysicsParameters
new PhysParameterEntry("DeactivationTime", "Seconds before considering an object potentially static" ),
new PhysParameterEntry("LinearSleepingThreshold", "Seconds to measure linear movement before considering static" ),
new PhysParameterEntry("AngularSleepingThreshold", "Seconds to measure angular movement before considering static" ),
- // new PhysParameterEntry("CcdMotionThreshold", "" ),
- // new PhysParameterEntry("CcdSweptSphereRadius", "" ),
+ new PhysParameterEntry("CcdMotionThreshold", "Continuious collision detection threshold (0 means no CCD)" ),
+ new PhysParameterEntry("CcdSweptSphereRadius", "Continuious collision detection test radius" ),
new PhysParameterEntry("ContactProcessingThreshold", "Distance between contacts before doing collision check" ),
+ // Can only change the following at initialization time. Change the INI file and reboot.
+ new PhysParameterEntry("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default)"),
+ new PhysParameterEntry("ShouldDisableContactPoolDynamicAllocation", "Enable to allow large changes in object count"),
+ new PhysParameterEntry("ShouldForceUpdateAllAabbs", "Enable to recomputer AABBs every simulator step"),
+ new PhysParameterEntry("ShouldRandomizeSolverOrder", "Enable for slightly better stacking interaction"),
+ new PhysParameterEntry("ShouldSplitSimulationIslands", "Enable splitting active object scanning islands"),
+ new PhysParameterEntry("ShouldEnableFrictionCaching", "Enable friction computation caching"),
+ new PhysParameterEntry("NumberOfSolverIterations", "Number of internal iterations (0 means default)"),
new PhysParameterEntry("Friction", "Set friction parameter for a specific object" ),
new PhysParameterEntry("Restitution", "Set restitution parameter for a specific object" ),
@@ -764,7 +772,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
new PhysParameterEntry("AvatarDensity", "Density of an avatar. Changed on avatar recreation." ),
new PhysParameterEntry("AvatarRestitution", "Bouncyness. Changed on avatar recreation." ),
new PhysParameterEntry("AvatarCapsuleRadius", "Radius of space around an avatar" ),
- new PhysParameterEntry("AvatarCapsuleHeight", "Default height of space around avatar" )
+ new PhysParameterEntry("AvatarCapsuleHeight", "Default height of space around avatar" ),
+ new PhysParameterEntry("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions")
+
};
#region IPhysicsParameters
@@ -798,6 +808,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "defaultdensity": m_params[0].defaultDensity = val; break;
case "defaultrestitution": m_params[0].defaultRestitution = val; break;
case "collisionmargin": m_params[0].collisionMargin = val; break;
+
case "gravity": m_params[0].gravity = val; TaintedUpdateParameter(lparm, localID, val); break;
case "lineardamping": UpdateParameterPrims(ref m_params[0].linearDamping, lparm, localID, val); break;
@@ -808,6 +819,14 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "ccdmotionthreshold": UpdateParameterPrims(ref m_params[0].ccdMotionThreshold, lparm, localID, val); break;
case "ccdsweptsphereradius": UpdateParameterPrims(ref m_params[0].ccdSweptSphereRadius, lparm, localID, val); break;
case "contactprocessingthreshold": UpdateParameterPrims(ref m_params[0].contactProcessingThreshold, lparm, localID, val); break;
+ // the following are used only at initialization time so setting them makes no sense
+ // case "maxPersistantmanifoldpoolSize": m_params[0].maxPersistantManifoldPoolSize = val; break;
+ // case "shoulddisablecontactpooldynamicallocation": m_params[0].shouldDisableContactPoolDynamicAllocation = val; break;
+ // case "shouldforceupdateallaabbs": m_params[0].shouldForceUpdateAllAabbs = val; break;
+ // case "shouldrandomizesolverorder": m_params[0].shouldRandomizeSolverOrder = val; break;
+ // case "shouldsplitsimulationislands": m_params[0].shouldSplitSimulationIslands = val; break;
+ // case "shouldenablefrictioncaching": m_params[0].shouldEnableFrictionCaching = val; break;
+ // case "numberofsolveriterations": m_params[0].numberOfSolverIterations = val; break;
case "friction": TaintedUpdateParameter(lparm, localID, val); break;
case "restitution": TaintedUpdateParameter(lparm, localID, val); break;
@@ -821,7 +840,8 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "avatardensity": UpdateParameterAvatars(ref m_params[0].avatarDensity, "avatar", localID, val); break;
case "avatarrestitution": UpdateParameterAvatars(ref m_params[0].avatarRestitution, "avatar", localID, val); break;
case "avatarcapsuleradius": UpdateParameterAvatars(ref m_params[0].avatarCapsuleRadius, "avatar", localID, val); break;
- case "avatarcapsuleheight": UpdateParameterAvatars(ref m_params[0].avatarCapsuleHeight, "avatar", localID, val); break;
+ case "avatarcapsuleheight": UpdateParameterAvatars(ref m_params[0].avatarCapsuleHeight, "avatar", localID, val); break;
+ case "avatarcontactprocessingthreshold": UpdateParameterAvatars(ref m_params[0].avatarContactProcessingThreshold, "avatar", localID, val); break;
default: ret = false; break;
}
@@ -914,6 +934,13 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "ccdmotionthreshold": val = m_params[0].ccdMotionThreshold; break;
case "ccdsweptsphereradius": val = m_params[0].ccdSweptSphereRadius; break;
case "contactprocessingthreshold": val = m_params[0].contactProcessingThreshold; break;
+ case "maxPersistantmanifoldpoolSize": val = m_params[0].maxPersistantManifoldPoolSize; break;
+ case "shoulddisablecontactpooldynamicallocation": val = m_params[0].shouldDisableContactPoolDynamicAllocation; break;
+ case "shouldforceupdateallaabbs": val = m_params[0].shouldForceUpdateAllAabbs; break;
+ case "shouldrandomizesolverorder": val = m_params[0].shouldRandomizeSolverOrder; break;
+ case "shouldsplitsimulationislands": val = m_params[0].shouldSplitSimulationIslands; break;
+ case "shouldenablefrictioncaching": val = m_params[0].shouldEnableFrictionCaching; break;
+ case "numberofsolveriterations": val = m_params[0].numberOfSolverIterations; break;
case "terrainfriction": val = m_params[0].terrainFriction; break;
case "terrainhitfraction": val = m_params[0].terrainHitFraction; break;
@@ -924,6 +951,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "avatarrestitution": val = m_params[0].avatarRestitution; break;
case "avatarcapsuleradius": val = m_params[0].avatarCapsuleRadius; break;
case "avatarcapsuleheight": val = m_params[0].avatarCapsuleHeight; break;
+ case "avatarcontactprocessingthreshold": val = m_params[0].avatarContactProcessingThreshold; break;
default: ret = false; break;
}
--
cgit v1.1
From ff54b3c3661a6bf9d5f0d9a24f8aeed5b42ce0ce Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 23 Mar 2012 15:50:32 -0700
Subject: BulletSim: change default of
shouldDisableContactPoolDynamicAllocation from False to True. It seems that
collisions don't happen well when it is False (things fall through terrain).
---
OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 4 ++--
bin/OpenSimDefaults.ini | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 8d2e25f..36dead0 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -243,7 +243,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
parms.avatarContactProcessingThreshold = 0.1f;
parms.maxPersistantManifoldPoolSize = 0f;
- parms.shouldDisableContactPoolDynamicAllocation = ConfigurationParameters.numericFalse;
+ parms.shouldDisableContactPoolDynamicAllocation = ConfigurationParameters.numericTrue;
parms.shouldForceUpdateAllAabbs = ConfigurationParameters.numericFalse;
parms.shouldRandomizeSolverOrder = ConfigurationParameters.numericFalse;
parms.shouldSplitSimulationIslands = ConfigurationParameters.numericFalse;
@@ -840,7 +840,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
case "avatardensity": UpdateParameterAvatars(ref m_params[0].avatarDensity, "avatar", localID, val); break;
case "avatarrestitution": UpdateParameterAvatars(ref m_params[0].avatarRestitution, "avatar", localID, val); break;
case "avatarcapsuleradius": UpdateParameterAvatars(ref m_params[0].avatarCapsuleRadius, "avatar", localID, val); break;
- case "avatarcapsuleheight": UpdateParameterAvatars(ref m_params[0].avatarCapsuleHeight, "avatar", localID, val); break;
+ case "avatarcapsuleheight": UpdateParameterAvatars(ref m_params[0].avatarCapsuleHeight, "avatar", localID, val); break;
case "avatarcontactprocessingthreshold": UpdateParameterAvatars(ref m_params[0].avatarContactProcessingThreshold, "avatar", localID, val); break;
default: ret = false; break;
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini
index 34f70a2..41be415 100644
--- a/bin/OpenSimDefaults.ini
+++ b/bin/OpenSimDefaults.ini
@@ -865,7 +865,7 @@
CcdSweptSphereRadius = 0.0
ContactProcessingThreshold = 0.1
MaxPersistantManifoldPoolSize = 0;
- ShouldDisableContactPoolDynamicAllocation = False;
+ ShouldDisableContactPoolDynamicAllocation = True;
ShouldForceUpdateAllAabbs = False;
ShouldRandomizeSolverOrder = False;
ShouldSplitSimulationIslands = False;
--
cgit v1.1
From cf61c74e90324e07cb4b15f9c597fef00c047c75 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 24 Mar 2012 02:16:44 +0000
Subject: Give feedback when "terrain save-tile" is not successfully invoked.
---
OpenSim/Framework/RegionInfo.cs | 6 ++
.../CoreModules/World/Terrain/ITerrainLoader.cs | 15 +++++
.../CoreModules/World/Terrain/TerrainModule.cs | 67 ++++++++++++----------
3 files changed, 58 insertions(+), 30 deletions(-)
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 5ba3863..a505524 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -421,12 +421,18 @@ namespace OpenSim.Framework
set { m_internalEndPoint = value; }
}
+ ///
+ /// The x co-ordinate of this region in map tiles (e.g. 1000).
+ ///
public uint RegionLocX
{
get { return m_regionLocX.Value; }
set { m_regionLocX = value; }
}
+ ///
+ /// The y co-ordinate of this region in map tiles (e.g. 1000).
+ ///
public uint RegionLocY
{
get { return m_regionLocY.Value; }
diff --git a/OpenSim/Region/CoreModules/World/Terrain/ITerrainLoader.cs b/OpenSim/Region/CoreModules/World/Terrain/ITerrainLoader.cs
index 7237f90..d407617 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/ITerrainLoader.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/ITerrainLoader.cs
@@ -38,6 +38,21 @@ namespace OpenSim.Region.CoreModules.World.Terrain
ITerrainChannel LoadStream(Stream stream);
void SaveFile(string filename, ITerrainChannel map);
void SaveStream(Stream stream, ITerrainChannel map);
+
+ ///
+ /// Save a number of map tiles to a single big image file.
+ ///
+ ///
+ /// If the image file already exists then the tiles saved will replace those already in the file - other tiles
+ /// will be untouched.
+ ///
+ /// The terrain file to save
+ /// The map x co-ordinate at which to begin the save.
+ /// The may y co-ordinate at which to begin the save.
+ /// The number of tiles to save along the X axis.
+ /// The number of tiles to save along the Y axis.
+ /// The width of a map tile.
+ /// The height of a map tile.
void SaveFile(ITerrainChannel map, string filename, int offsetX, int offsetY, int fileWidth, int fileHeight, int regionSizeX, int regionSizeY);
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
index 9cd8f2b..7c5ea29 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
@@ -561,49 +561,56 @@ namespace OpenSim.Region.CoreModules.World.Terrain
}
///
- /// Saves the terrain to a larger terrain file.
+ /// Save a number of map tiles to a single big image file.
///
+ ///
+ /// If the image file already exists then the tiles saved will replace those already in the file - other tiles
+ /// will be untouched.
+ ///
/// The terrain file to save
- /// The width of the file in units
- /// The height of the file in units
- /// Where to begin our slice
- /// Where to begin our slice
+ /// The number of tiles to save along the X axis.
+ /// The number of tiles to save along the Y axis.
+ /// The map x co-ordinate at which to begin the save.
+ /// The may y co-ordinate at which to begin the save.
public void SaveToFile(string filename, int fileWidth, int fileHeight, int fileStartX, int fileStartY)
{
int offsetX = (int)m_scene.RegionInfo.RegionLocX - fileStartX;
int offsetY = (int)m_scene.RegionInfo.RegionLocY - fileStartY;
- if (offsetX >= 0 && offsetX < fileWidth && offsetY >= 0 && offsetY < fileHeight)
+ if (offsetX < 0 || offsetX >= fileWidth || offsetY < 0 || offsetY >= fileHeight)
{
- // this region is included in the tile request
- foreach (KeyValuePair loader in m_loaders)
+ MainConsole.Instance.OutputFormat(
+ "ERROR: file width + minimum X tile and file height + minimum Y tile must incorporate the current region at ({0},{1}). File width {2} from {3} and file height {4} from {5} does not.",
+ m_scene.RegionInfo.RegionLocX, m_scene.RegionInfo.RegionLocY, fileWidth, fileStartX, fileHeight, fileStartY);
+
+ return;
+ }
+
+ // this region is included in the tile request
+ foreach (KeyValuePair loader in m_loaders)
+ {
+ if (filename.EndsWith(loader.Key))
{
- if (filename.EndsWith(loader.Key))
+ lock (m_scene)
{
- lock (m_scene)
- {
- loader.Value.SaveFile(m_channel, filename, offsetX, offsetY,
- fileWidth, fileHeight,
- (int)Constants.RegionSize,
- (int)Constants.RegionSize);
-
- m_log.InfoFormat("[TERRAIN]: Saved terrain from {0} to {1}", m_scene.RegionInfo.RegionName, filename);
- }
-
- return;
+ loader.Value.SaveFile(m_channel, filename, offsetX, offsetY,
+ fileWidth, fileHeight,
+ (int)Constants.RegionSize,
+ (int)Constants.RegionSize);
+
+ MainConsole.Instance.OutputFormat(
+ "Saved terrain from ({0},{1}) to ({2},{3}) from {4} to {5}",
+ fileStartX, fileStartY, fileStartX + fileWidth - 1, fileStartY + fileHeight - 1,
+ m_scene.RegionInfo.RegionName, filename);
}
+
+ return;
}
-
- m_log.ErrorFormat(
- "[TERRAIN]: Could not save terrain from {0} to {1}. Valid file extensions are {2}",
- m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions);
}
-// else
-// {
-// m_log.ErrorFormat(
-// "[TERRAIN]: Could not save terrain from {0} to {1}. {2} {3} {4} {5} {6} {7}",
-// m_scene.RegionInfo.RegionName, filename, fileWidth, fileHeight, fileStartX, fileStartY, offsetX, offsetY);
-// }
+
+ MainConsole.Instance.OutputFormat(
+ "ERROR: Could not save terrain from {0} to {1}. Valid file extensions are {2}",
+ m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions);
}
///
--
cgit v1.1
From f53c6b25940a51fce208b3dae21fad49ab8d1efe Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 24 Mar 2012 02:30:21 +0000
Subject: Use system provided temporary file in "terrain save-tile" to avoid
problems with drive letters on windows
Thanks to Garmin Kawaguichi for picking up on this and providing an initial solution (which I adapted).
---
.../CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs b/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
index 21a9999..58925fd 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/FileLoaders/GenericSystemDrawing.cs
@@ -132,13 +132,13 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
{
// We need to do this because:
// "Saving the image to the same file it was constructed from is not allowed and throws an exception."
- string tempName = offsetX + "_ " + offsetY + "_" + filename;
+ string tempName = Path.GetTempFileName();
Bitmap entireBitmap = null;
Bitmap thisBitmap = null;
if (File.Exists(filename))
{
- File.Copy(filename, tempName);
+ File.Copy(filename, tempName, true);
entireBitmap = new Bitmap(tempName);
if (entireBitmap.Width != fileWidth * regionSizeX || entireBitmap.Height != fileHeight * regionSizeY)
{
@@ -152,7 +152,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
}
thisBitmap = CreateGrayscaleBitmapFromMap(m_channel);
- Console.WriteLine("offsetX=" + offsetX + " offsetY=" + offsetY);
+// Console.WriteLine("offsetX=" + offsetX + " offsetY=" + offsetY);
for (int x = 0; x < regionSizeX; x++)
for (int y = 0; y < regionSizeY; y++)
entireBitmap.SetPixel(x + offsetX * regionSizeX, y + (fileHeight - 1 - offsetY) * regionSizeY, thisBitmap.GetPixel(x, y));
--
cgit v1.1
From f03c3c062e7829309d76ac76d5d2b2e7bc8b62dc Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 24 Mar 2012 02:41:45 +0000
Subject: Hack example on to "terrain save-tile" extended help.
Thanks to Garmin Kawaguichi for the initially suggested text.
---
OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
index 7c5ea29..17e9737 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
@@ -1199,6 +1199,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain
"Integer");
saveToTileCommand.AddArgument("minimum Y tile", "The Y region coordinate of the first section on the file",
"Integer");
+ saveToTileCommand.AddArgument("minimum Y tile", "The Y region coordinate of the first tile on the file\n"
+ + "= Example =\n"
+ + "To save a PNG file for a set of map tiles 2 regions wide and 3 regions high from map co-ordinate (9910,10234)\n"
+ + " # terrain save-tile ST06.png 2 3 9910 10234\n",
+ "Integer");
+
// Terrain adjustments
Command fillRegionCommand =
new Command("fill", CommandIntentions.COMMAND_HAZARDOUS, InterfaceFillTerrain, "Fills the current heightmap with a specified value.");
--
cgit v1.1
From 4f17537555856823cd3c3cc80708cc1d8bc574b4 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 24 Mar 2012 03:07:01 +0000
Subject: Allow the user to enter help topics in upper or lowercase.
Forcing uppercase (e.g. help Assets) is too annoying.
Thanks to WhiteStar for pointing this out.
---
OpenSim/Framework/Console/CommandConsole.cs | 22 ++++++++++++----------
OpenSim/Region/Application/OpenSimBase.cs | 11 ++++++-----
2 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs
index 2bb7de1..c5d6b78 100644
--- a/OpenSim/Framework/Console/CommandConsole.cs
+++ b/OpenSim/Framework/Console/CommandConsole.cs
@@ -188,19 +188,21 @@ namespace OpenSim.Framework.Console
{
lock (m_modulesCommands)
{
- if (m_modulesCommands.ContainsKey(moduleName))
+ foreach (string key in m_modulesCommands.Keys)
{
- List commands = m_modulesCommands[moduleName];
- var ourHelpText = commands.ConvertAll(c => string.Format("{0} - {1}", c.help_text, c.long_help));
- ourHelpText.Sort();
- helpText.AddRange(ourHelpText);
+ // Allow topic help requests to succeed whether they are upper or lowercase.
+ if (moduleName.ToLower() == key.ToLower())
+ {
+ List commands = m_modulesCommands[key];
+ var ourHelpText = commands.ConvertAll(c => string.Format("{0} - {1}", c.help_text, c.long_help));
+ ourHelpText.Sort();
+ helpText.AddRange(ourHelpText);
- return true;
- }
- else
- {
- return false;
+ return true;
+ }
}
+
+ return false;
}
}
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 484159c..5de3f25 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -248,15 +248,16 @@ namespace OpenSim
{
string capitalizedTopic = char.ToUpper(topic[0]) + topic.Substring(1);
+ // This is a hack to allow the user to enter the help command in upper or lowercase. This will go
+ // away at some point.
+ m_console.Commands.AddCommand(capitalizedTopic, false, "help " + topic,
+ "help " + capitalizedTopic,
+ "Get help on plugin command '" + topic + "'",
+ HandleCommanderHelp);
m_console.Commands.AddCommand(capitalizedTopic, false, "help " + capitalizedTopic,
"help " + capitalizedTopic,
"Get help on plugin command '" + topic + "'",
HandleCommanderHelp);
-//
-// m_console.Commands.AddCommand("General", false, topic,
-// topic,
-// "Execute subcommand for plugin '" + topic + "'",
-// null);
ICommander commander = null;
--
cgit v1.1
From a14437ad5abf4d4dc95897216224548515a599e7 Mon Sep 17 00:00:00 2001
From: Mic Bowman
Date: Sat, 24 Mar 2012 22:43:42 -0700
Subject: Add support for key, vector, rotation and list types for both
arguments and return values to the modInvoke family of functions.
See http://opensimulator.org/wiki/OSSL_Script_Library/ModInvoke
---
.../ScriptModuleComms/ScriptModuleCommsModule.cs | 8 +
.../Shared/Api/Implementation/MOD_Api.cs | 245 ++++++++++++++++-----
.../ScriptEngine/Shared/Api/Interface/IMOD_Api.cs | 24 +-
.../ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs | 34 ++-
4 files changed, 237 insertions(+), 74 deletions(-)
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index a90362e..0661c65 100644
--- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
@@ -147,6 +147,14 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
return "modInvokeI";
else if (sid.ReturnType == typeof(float))
return "modInvokeF";
+ else if (sid.ReturnType == typeof(UUID))
+ return "modInvokeK";
+ else if (sid.ReturnType == typeof(OpenMetaverse.Vector3))
+ return "modInvokeV";
+ else if (sid.ReturnType == typeof(OpenMetaverse.Quaternion))
+ return "modInvokeR";
+ else if (sid.ReturnType == typeof(object[]))
+ return "modInvokeL";
}
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
index 2942104..1bcbcd3 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
@@ -120,33 +120,101 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
///
///
/// The name of the function to invoke
- /// List of parameters
+ /// List of parameters
/// string result of the invocation
- public string modInvokeS(string fname, params object[] parms)
+ public LSL_String modInvokeS(string fname, params object[] parms)
{
Type returntype = m_comms.LookupReturnType(fname);
if (returntype != typeof(string))
MODError(String.Format("return type mismatch for {0}",fname));
- return (string)modInvoke(fname,parms);
+ string result = (string)modInvoke(fname,parms);
+ return new LSL_String(result);
}
- public int modInvokeI(string fname, params object[] parms)
+ public LSL_Integer modInvokeI(string fname, params object[] parms)
{
Type returntype = m_comms.LookupReturnType(fname);
if (returntype != typeof(int))
MODError(String.Format("return type mismatch for {0}",fname));
- return (int)modInvoke(fname,parms);
+ int result = (int)modInvoke(fname,parms);
+ return new LSL_Integer(result);
}
- public float modInvokeF(string fname, params object[] parms)
+ public LSL_Float modInvokeF(string fname, params object[] parms)
{
Type returntype = m_comms.LookupReturnType(fname);
if (returntype != typeof(float))
MODError(String.Format("return type mismatch for {0}",fname));
- return (float)modInvoke(fname,parms);
+ float result = (float)modInvoke(fname,parms);
+ return new LSL_Float(result);
+ }
+
+ public LSL_Key modInvokeK(string fname, params object[] parms)
+ {
+ Type returntype = m_comms.LookupReturnType(fname);
+ if (returntype != typeof(UUID))
+ MODError(String.Format("return type mismatch for {0}",fname));
+
+ UUID result = (UUID)modInvoke(fname,parms);
+ return new LSL_Key(result.ToString());
+ }
+
+ public LSL_Vector modInvokeV(string fname, params object[] parms)
+ {
+ Type returntype = m_comms.LookupReturnType(fname);
+ if (returntype != typeof(OpenMetaverse.Vector3))
+ MODError(String.Format("return type mismatch for {0}",fname));
+
+ OpenMetaverse.Vector3 result = (OpenMetaverse.Vector3)modInvoke(fname,parms);
+ return new LSL_Vector(result.X,result.Y,result.Z);
+ }
+
+ public LSL_Rotation modInvokeR(string fname, params object[] parms)
+ {
+ Type returntype = m_comms.LookupReturnType(fname);
+ if (returntype != typeof(OpenMetaverse.Quaternion))
+ MODError(String.Format("return type mismatch for {0}",fname));
+
+ OpenMetaverse.Quaternion result = (OpenMetaverse.Quaternion)modInvoke(fname,parms);
+ return new LSL_Rotation(result.X,result.Y,result.Z,result.W);
+ }
+
+ public LSL_List modInvokeL(string fname, params object[] parms)
+ {
+ Type returntype = m_comms.LookupReturnType(fname);
+ if (returntype != typeof(object[]))
+ MODError(String.Format("return type mismatch for {0}",fname));
+
+ object[] result = (object[])modInvoke(fname,parms);
+ object[] llist = new object[result.Length];
+ for (int i = 0; i < result.Length; i++)
+ {
+ if (result[i] is string)
+ llist[i] = new LSL_String((string)result[i]);
+ else if (result[i] is int)
+ llist[i] = new LSL_Integer((int)result[i]);
+ else if (result[i] is float)
+ llist[i] = new LSL_Float((float)result[i]);
+ else if (result[i] is OpenMetaverse.Vector3)
+ {
+ OpenMetaverse.Vector3 vresult = (OpenMetaverse.Vector3)result[i];
+ llist[i] = new LSL_Vector(vresult.X,vresult.Y,vresult.Z);
+ }
+ else if (result[i] is OpenMetaverse.Quaternion)
+ {
+ OpenMetaverse.Quaternion qresult = (OpenMetaverse.Quaternion)result[i];
+ llist[i] = new LSL_Rotation(qresult.X,qresult.Y,qresult.Z,qresult.W);
+ }
+ else
+ {
+ MODError(String.Format("unknown list element returned by {0}",fname));
+ }
+ }
+
+ return new LSL_List(llist);
}
///
@@ -168,63 +236,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
MODError(String.Format("wrong number of parameters to function {0}",fname));
object[] convertedParms = new object[parms.Length];
-
for (int i = 0; i < parms.Length; i++)
- {
- if (parms[i] is LSL_String)
- {
- if (signature[i] != typeof(string))
- MODError(String.Format("parameter type mismatch in {0}; expecting {1}",fname,signature[i].Name));
-
- convertedParms[i] = (string)(LSL_String)parms[i];
- }
- else if (parms[i] is LSL_Integer)
- {
- if (signature[i] != typeof(int))
- MODError(String.Format("parameter type mismatch in {0}; expecting {1}",fname,signature[i].Name));
-
- convertedParms[i] = (int)(LSL_Integer)parms[i];
- }
- else if (parms[i] is LSL_Float)
- {
- if (signature[i] != typeof(float))
- MODError(String.Format("parameter type mismatch in {0}; expecting {1}",fname,signature[i].Name));
-
- convertedParms[i] = (float)(LSL_Float)parms[i];
- }
- else if (parms[i] is LSL_Key)
- {
- if (signature[i] != typeof(string))
- MODError(String.Format("parameter type mismatch in {0}; expecting {1}",fname,signature[i].Name));
-
- convertedParms[i] = (string)(LSL_Key)parms[i];
- }
- else if (parms[i] is LSL_Rotation)
- {
- if (signature[i] != typeof(string))
- MODError(String.Format("parameter type mismatch in {0}; expecting {1}",fname,signature[i].Name));
-
- convertedParms[i] = (string)(LSL_Rotation)parms[i];
- }
- else if (parms[i] is LSL_Vector)
- {
- if (signature[i] != typeof(string))
- MODError(String.Format("parameter type mismatch in {0}; expecting {1}",fname,signature[i].Name));
+ convertedParms[i] = ConvertFromLSL(parms[i],signature[i]);
- convertedParms[i] = (string)(LSL_Vector)parms[i];
- }
- else
- {
- if (signature[i] != parms[i].GetType())
- MODError(String.Format("parameter type mismatch in {0}; expecting {1}",fname,signature[i].Name));
+ // now call the function, the contract with the function is that it will always return
+ // non-null but don't trust it completely
+ try
+ {
+ object result = m_comms.InvokeOperation(m_itemID,fname,convertedParms);
+ if (result != null)
+ return result;
- convertedParms[i] = parms[i];
- }
+ MODError(String.Format("Invocation of {0} failed; null return value",fname));
+ }
+ catch (Exception e)
+ {
+ MODError(String.Format("Invocation of {0} failed; {1}",fname,e.Message));
}
- return m_comms.InvokeOperation(m_itemID,fname,convertedParms);
+ return null;
}
+ ///
+ /// Send a command to functions registered on an event
+ ///
public string modSendCommand(string module, string command, string k)
{
if (!m_MODFunctionsEnabled)
@@ -239,5 +274,101 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return req.ToString();
}
+
+ ///
+ ///
+ protected object ConvertFromLSL(object lslparm, Type type)
+ {
+ // ---------- String ----------
+ if (lslparm is LSL_String)
+ {
+ if (type == typeof(string))
+ return (string)(LSL_String)lslparm;
+
+ // Need to check for UUID since keys are often treated as strings
+ if (type == typeof(UUID))
+ return new UUID((string)(LSL_String)lslparm);
+ }
+
+ // ---------- Integer ----------
+ else if (lslparm is LSL_Integer)
+ {
+ if (type == typeof(int))
+ return (int)(LSL_Integer)lslparm;
+ }
+
+ // ---------- Float ----------
+ else if (lslparm is LSL_Float)
+ {
+ if (type == typeof(float))
+ return (float)(LSL_Float)lslparm;
+ }
+
+ // ---------- Key ----------
+ else if (lslparm is LSL_Key)
+ {
+ if (type == typeof(UUID))
+ return new UUID((LSL_Key)lslparm);
+ }
+
+ // ---------- Rotation ----------
+ else if (lslparm is LSL_Rotation)
+ {
+ if (type == typeof(OpenMetaverse.Quaternion))
+ {
+ LSL_Rotation rot = (LSL_Rotation)lslparm;
+ return new OpenMetaverse.Quaternion((float)rot.x,(float)rot.y,(float)rot.z,(float)rot.s);
+ }
+ }
+
+ // ---------- Vector ----------
+ else if (lslparm is LSL_Vector)
+ {
+ if (type == typeof(OpenMetaverse.Vector3))
+ {
+ LSL_Vector vect = (LSL_Vector)lslparm;
+ return new OpenMetaverse.Vector3((float)vect.x,(float)vect.y,(float)vect.z);
+ }
+ }
+
+ // ---------- List ----------
+ else if (lslparm is LSL_List)
+ {
+ if (type == typeof(object[]))
+ {
+ object[] plist = (lslparm as LSL_List).Data;
+ object[] result = new object[plist.Length];
+ for (int i = 0; i < plist.Length; i++)
+ {
+ if (plist[i] is LSL_String)
+ result[i] = (string)(LSL_String)plist[i];
+ else if (plist[i] is LSL_Integer)
+ result[i] = (int)(LSL_Integer)plist[i];
+ else if (plist[i] is LSL_Float)
+ result[i] = (float)(LSL_Float)plist[i];
+ else if (plist[i] is LSL_Key)
+ result[i] = new UUID((LSL_Key)plist[i]);
+ else if (plist[i] is LSL_Rotation)
+ {
+ LSL_Rotation rot = (LSL_Rotation)plist[i];
+ result[i] = new OpenMetaverse.Quaternion((float)rot.x,(float)rot.y,(float)rot.z,(float)rot.s);
+ }
+ else if (plist[i] is LSL_Vector)
+ {
+ LSL_Vector vect = (LSL_Vector)plist[i];
+ result[i] = new OpenMetaverse.Vector3((float)vect.x,(float)vect.y,(float)vect.z);
+ }
+ else
+ MODError("unknown LSL list element type");
+ }
+
+ return result;
+ }
+ }
+
+ MODError(String.Format("parameter type mismatch; expecting {0}",type.Name));
+ return null;
+ }
+
}
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
index 756a59f..d258f76 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IMOD_Api.cs
@@ -28,26 +28,26 @@
using System.Collections;
using OpenSim.Region.ScriptEngine.Interfaces;
-using key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
-using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
-using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
+using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
+using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
+using LSL_Key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
+using LSL_Rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
-using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
-using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
+using LSL_Vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
{
public interface IMOD_Api
{
// Invocation functions
- string modInvokeS(string fname, params object[] parms);
- int modInvokeI(string fname, params object[] parms);
- float modInvokeF(string fname, params object[] parms);
- // vector modInvokeV(string fname, params object[] parms);
- // rotation modInvokeV(string fname, params object[] parms);
- // key modInvokeK(string fname, params object[] parms);
- // list modInvokeL(string fname, params object[] parms);
+ LSL_String modInvokeS(string fname, params object[] parms);
+ LSL_Integer modInvokeI(string fname, params object[] parms);
+ LSL_Float modInvokeF(string fname, params object[] parms);
+ LSL_Key modInvokeK(string fname, params object[] parms);
+ LSL_Vector modInvokeV(string fname, params object[] parms);
+ LSL_Rotation modInvokeR(string fname, params object[] parms);
+ LSL_List modInvokeL(string fname, params object[] parms);
//Module functions
string modSendCommand(string modules, string command, string k);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
index 04b7f14..e7a4b2b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/MOD_Stub.cs
@@ -39,10 +39,14 @@ using integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
using key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
-using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
-using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+
using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
+using LSL_Key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list;
+using LSL_Rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
+using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
+using LSL_Vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
{
@@ -58,21 +62,41 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_MOD_Functions = (IMOD_Api)api;
}
- public string modInvokeS(string fname, params object[] parms)
+ public LSL_String modInvokeS(string fname, params object[] parms)
{
return m_MOD_Functions.modInvokeS(fname, parms);
}
- public int modInvokeI(string fname, params object[] parms)
+ public LSL_Integer modInvokeI(string fname, params object[] parms)
{
return m_MOD_Functions.modInvokeI(fname, parms);
}
- public float modInvokeF(string fname, params object[] parms)
+ public LSL_Float modInvokeF(string fname, params object[] parms)
{
return m_MOD_Functions.modInvokeF(fname, parms);
}
+ public LSL_Key modInvokeK(string fname, params object[] parms)
+ {
+ return m_MOD_Functions.modInvokeK(fname, parms);
+ }
+
+ public LSL_Vector modInvokeV(string fname, params object[] parms)
+ {
+ return m_MOD_Functions.modInvokeV(fname, parms);
+ }
+
+ public LSL_Rotation modInvokeR(string fname, params object[] parms)
+ {
+ return m_MOD_Functions.modInvokeR(fname, parms);
+ }
+
+ public LSL_List modInvokeL(string fname, params object[] parms)
+ {
+ return m_MOD_Functions.modInvokeL(fname, parms);
+ }
+
public string modSendCommand(string module, string command, string k)
{
return m_MOD_Functions.modSendCommand(module, command, k);
--
cgit v1.1
From cb44808504e48125d630823880ee8e710afcd9ea Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sun, 25 Mar 2012 19:52:38 +0100
Subject: Simplify the module invocation registration. The types and method
name can be pulled fromt he delegate so we don't need to pass them explicitly
---
.../Framework/Interfaces/IScriptModuleComms.cs | 3 ++-
.../ScriptModuleComms/ScriptModuleCommsModule.cs | 20 ++++++++++++++++++--
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
index bb4c788..8bfbbf8 100644
--- a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
+++ b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
@@ -46,7 +46,8 @@ namespace OpenSim.Region.Framework.Interfaces
///
event ScriptCommand OnScriptCommand;
- void RegisterScriptInvocation(string name, ScriptInvocation fn, Type[] csig, Type rsig);
+ void RegisterScriptInvocation(ScriptInvocation fn);
+ ScriptInvocation[] GetScriptInvocationList();
ScriptInvocation LookupScriptInvocation(string fname);
string LookupModInvocation(string fname);
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index 0661c65..8e8a0b6 100644
--- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
@@ -126,14 +126,30 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
m_scriptModule.PostScriptEvent(script, "link_message", args);
}
- public void RegisterScriptInvocation(string fname, ScriptInvocation fcall, Type[] csig, Type rsig)
+ public void RegisterScriptInvocation(ScriptInvocation fcall)
{
lock (m_scriptInvocation)
{
- m_scriptInvocation[fname] = new ScriptInvocationData(fname,fcall,csig,rsig);
+ ParameterInfo[] parameters = fcall.Method.GetParameters ();
+ Type[] parmTypes = new Type[parameters.Length];
+ for (int i = 0 ; i < parameters.Length ; i++)
+ parmTypes[i] = parameters[i].ParameterType;
+ m_scriptInvocation[fcall.Method.Name] = new ScriptInvocationData(fcall.Method.Name, fcall, parmTypes, fcall.Method.ReturnType);
}
}
+ public ScriptInvocation[] GetScriptInvocationList()
+ {
+ List ret = new List();
+
+ lock (m_scriptInvocation)
+ {
+ foreach (ScriptInvocationData d in m_scriptInvocation.Values)
+ ret.Add(d.ScriptInvocationFn);
+ }
+ return ret.ToArray();
+ }
+
public string LookupModInvocation(string fname)
{
lock (m_scriptInvocation)
--
cgit v1.1
From 4b76c52c41ffcdaf4254a290885cf26e4d447397 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Mon, 26 Mar 2012 00:30:52 +0100
Subject: Correct the design error I introduced into ScriptComms. Untested but
about to be.
---
.../Framework/Interfaces/IScriptModuleComms.cs | 7 ++---
.../ScriptModuleComms/ScriptModuleCommsModule.cs | 36 +++++++++++++---------
2 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
index 8bfbbf8..8a08fbe 100644
--- a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
+++ b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs
@@ -31,7 +31,6 @@ using OpenMetaverse;
namespace OpenSim.Region.Framework.Interfaces
{
public delegate void ScriptCommand(UUID script, string id, string module, string command, string k);
- public delegate object ScriptInvocation(UUID script, object[] parms);
///
/// Interface for communication between OpenSim modules and in-world scripts
@@ -46,10 +45,10 @@ namespace OpenSim.Region.Framework.Interfaces
///
event ScriptCommand OnScriptCommand;
- void RegisterScriptInvocation(ScriptInvocation fn);
- ScriptInvocation[] GetScriptInvocationList();
+ void RegisterScriptInvocation(Delegate fn);
+ Delegate[] GetScriptInvocationList();
- ScriptInvocation LookupScriptInvocation(string fname);
+ Delegate LookupScriptInvocation(string fname);
string LookupModInvocation(string fname);
Type[] LookupTypeSignature(string fname);
Type LookupReturnType(string fname);
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
index 8e8a0b6..e37e42e 100644
--- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs
@@ -47,15 +47,15 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
#region ScriptInvocation
protected class ScriptInvocationData
{
- public ScriptInvocation ScriptInvocationFn { get; private set; }
+ public Delegate ScriptInvocationDelegate { get; private set; }
public string FunctionName { get; private set; }
public Type[] TypeSignature { get; private set; }
public Type ReturnType { get; private set; }
- public ScriptInvocationData(string fname, ScriptInvocation fn, Type[] callsig, Type returnsig)
+ public ScriptInvocationData(string fname, Delegate fn, Type[] callsig, Type returnsig)
{
FunctionName = fname;
- ScriptInvocationFn = fn;
+ ScriptInvocationDelegate = fn;
TypeSignature = callsig;
ReturnType = returnsig;
}
@@ -126,26 +126,30 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
m_scriptModule.PostScriptEvent(script, "link_message", args);
}
- public void RegisterScriptInvocation(ScriptInvocation fcall)
+ public void RegisterScriptInvocation(Delegate fcall)
{
lock (m_scriptInvocation)
{
ParameterInfo[] parameters = fcall.Method.GetParameters ();
- Type[] parmTypes = new Type[parameters.Length];
- for (int i = 0 ; i < parameters.Length ; i++)
- parmTypes[i] = parameters[i].ParameterType;
+ if (parameters.Length == 0) // Must have one UUID param
+ return;
+
+ // Hide the first parameter
+ Type[] parmTypes = new Type[parameters.Length - 1];
+ for (int i = 1 ; i < parameters.Length ; i++)
+ parmTypes[i - 1] = parameters[i].ParameterType;
m_scriptInvocation[fcall.Method.Name] = new ScriptInvocationData(fcall.Method.Name, fcall, parmTypes, fcall.Method.ReturnType);
}
}
- public ScriptInvocation[] GetScriptInvocationList()
+ public Delegate[] GetScriptInvocationList()
{
- List ret = new List();
+ List ret = new List();
lock (m_scriptInvocation)
{
foreach (ScriptInvocationData d in m_scriptInvocation.Values)
- ret.Add(d.ScriptInvocationFn);
+ ret.Add(d.ScriptInvocationDelegate);
}
return ret.ToArray();
}
@@ -177,13 +181,13 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
return null;
}
- public ScriptInvocation LookupScriptInvocation(string fname)
+ public Delegate LookupScriptInvocation(string fname)
{
lock (m_scriptInvocation)
{
ScriptInvocationData sid;
if (m_scriptInvocation.TryGetValue(fname,out sid))
- return sid.ScriptInvocationFn;
+ return sid.ScriptInvocationDelegate;
}
return null;
@@ -215,8 +219,12 @@ namespace OpenSim.Region.CoreModules.Scripting.ScriptModuleComms
public object InvokeOperation(UUID scriptid, string fname, params object[] parms)
{
- ScriptInvocation fn = LookupScriptInvocation(fname);
- return fn(scriptid,parms);
+ List