Merge branch 'master' into careminster

avinationmerge
Melanie 2012-03-27 18:11:05 +01:00
commit 6b5f3b49e7
17 changed files with 91 additions and 58 deletions

View File

@ -89,6 +89,7 @@ what it is today.
* Fernando Oliveira * Fernando Oliveira
* Fly-Man * Fly-Man
* Flyte Xevious * Flyte Xevious
* Garmin Kawaguichi
* Imaze Rhiano * Imaze Rhiano
* Intimidated * Intimidated
* Jeremy Bongio (IBM) * Jeremy Bongio (IBM)

View File

@ -1199,8 +1199,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain
saveToTileCommand.AddArgument("file height", "The height of the file in tiles", "Integer"); saveToTileCommand.AddArgument("file height", "The height of the file in tiles", "Integer");
saveToTileCommand.AddArgument("minimum X tile", "The X region coordinate of the first section on the file", saveToTileCommand.AddArgument("minimum X tile", "The X region coordinate of the first section on the file",
"Integer"); "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" saveToTileCommand.AddArgument("minimum Y tile", "The Y region coordinate of the first tile on the file\n"
+ "= Example =\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" + "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"

View File

@ -426,6 +426,8 @@ public class BSCharacter : PhysicsActor
} }
} }
// Called by the scene when a collision with this object is reported
CollisionEventUpdate collisionCollection = null;
public void Collide(uint collidingWith, ActorTypes type, Vector3 contactPoint, Vector3 contactNormal, float pentrationDepth) public void Collide(uint collidingWith, ActorTypes type, Vector3 contactPoint, Vector3 contactNormal, float pentrationDepth)
{ {
// m_log.DebugFormat("{0}: Collide: ms={1}, id={2}, with={3}", LogHeader, _subscribedEventsMs, LocalID, collidingWith); // m_log.DebugFormat("{0}: Collide: ms={1}, id={2}, with={3}", LogHeader, _subscribedEventsMs, LocalID, collidingWith);
@ -443,10 +445,24 @@ public class BSCharacter : PhysicsActor
if (nowTime < (_lastCollisionTime + _subscribedEventsMs)) return; if (nowTime < (_lastCollisionTime + _subscribedEventsMs)) return;
_lastCollisionTime = nowTime; _lastCollisionTime = nowTime;
Dictionary<uint, ContactPoint> contactPoints = new Dictionary<uint, ContactPoint>(); if (collisionCollection == null)
contactPoints.Add(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth)); collisionCollection = new CollisionEventUpdate();
CollisionEventUpdate args = new CollisionEventUpdate(contactPoints); collisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth));
base.SendCollisionUpdate(args); }
public void SendCollisions()
{
// if (collisionCollection != null)
// {
// base.SendCollisionUpdate(collisionCollection);
// collisionCollection = null;
// }
// Kludge to make a collision call even if there are no collisions.
// This causes the avatar animation to get updated.
if (collisionCollection == null)
collisionCollection = new CollisionEventUpdate();
base.SendCollisionUpdate(collisionCollection);
collisionCollection = null;
} }
} }

View File

@ -1326,6 +1326,7 @@ public sealed class BSPrim : PhysicsActor
} }
// I've collided with something // I've collided with something
CollisionEventUpdate collisionCollection = null;
public void Collide(uint collidingWith, ActorTypes type, OMV.Vector3 contactPoint, OMV.Vector3 contactNormal, float pentrationDepth) public void Collide(uint collidingWith, ActorTypes type, OMV.Vector3 contactPoint, OMV.Vector3 contactNormal, float pentrationDepth)
{ {
// m_log.DebugFormat("{0}: Collide: ms={1}, id={2}, with={3}", LogHeader, _subscribedEventsMs, LocalID, collidingWith); // m_log.DebugFormat("{0}: Collide: ms={1}, id={2}, with={3}", LogHeader, _subscribedEventsMs, LocalID, collidingWith);
@ -1343,11 +1344,18 @@ public sealed class BSPrim : PhysicsActor
if (nowTime < (_lastCollisionTime + _subscribedEventsMs)) return; if (nowTime < (_lastCollisionTime + _subscribedEventsMs)) return;
_lastCollisionTime = nowTime; _lastCollisionTime = nowTime;
// create the event for the collision if (collisionCollection == null)
Dictionary<uint, ContactPoint> contactPoints = new Dictionary<uint, ContactPoint>(); collisionCollection = new CollisionEventUpdate();
contactPoints.Add(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth)); collisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth));
CollisionEventUpdate args = new CollisionEventUpdate(contactPoints); }
base.SendCollisionUpdate(args);
public void SendCollisions()
{
if (collisionCollection != null)
{
base.SendCollisionUpdate(collisionCollection);
collisionCollection = null;
}
} }
} }
} }

View File

@ -78,6 +78,8 @@ public class BSScene : PhysicsScene, IPhysicsParameters
private Dictionary<uint, BSCharacter> m_avatars = new Dictionary<uint, BSCharacter>(); private Dictionary<uint, BSCharacter> m_avatars = new Dictionary<uint, BSCharacter>();
private Dictionary<uint, BSPrim> m_prims = new Dictionary<uint, BSPrim>(); private Dictionary<uint, BSPrim> m_prims = new Dictionary<uint, BSPrim>();
private HashSet<BSCharacter> m_avatarsWithCollisions = new HashSet<BSCharacter>();
private HashSet<BSPrim> m_primsWithCollisions = new HashSet<BSPrim>();
private List<BSPrim> m_vehicles = new List<BSPrim>(); private List<BSPrim> m_vehicles = new List<BSPrim>();
private float[] m_heightMap; private float[] m_heightMap;
private float m_waterLevel; private float m_waterLevel;
@ -435,6 +437,17 @@ public class BSScene : PhysicsScene, IPhysicsParameters
} }
} }
// The SendCollision's batch up the collisions on the objects. Now push the collisions into the simulator.
foreach (BSPrim bsp in m_primsWithCollisions)
bsp.SendCollisions();
m_primsWithCollisions.Clear();
// foreach (BSCharacter bsc in m_avatarsWithCollisions)
// bsc.SendCollisions();
// This is a kludge to get avatar movement updated. ODE sends collisions even if there isn't any
foreach (KeyValuePair<uint, BSCharacter> kvp in m_avatars)
kvp.Value.SendCollisions();
m_avatarsWithCollisions.Clear();
// If any of the objects had updated properties, tell the object it has been changed by the physics engine // If any of the objects had updated properties, tell the object it has been changed by the physics engine
if (updatedEntityCount > 0) if (updatedEntityCount > 0)
{ {
@ -485,11 +498,13 @@ public class BSScene : PhysicsScene, IPhysicsParameters
BSPrim prim; BSPrim prim;
if (m_prims.TryGetValue(localID, out prim)) { if (m_prims.TryGetValue(localID, out prim)) {
prim.Collide(collidingWith, type, collidePoint, collideNormal, penitration); prim.Collide(collidingWith, type, collidePoint, collideNormal, penitration);
m_primsWithCollisions.Add(prim);
return; return;
} }
BSCharacter actor; BSCharacter actor;
if (m_avatars.TryGetValue(localID, out actor)) { if (m_avatars.TryGetValue(localID, out actor)) {
actor.Collide(collidingWith, type, collidePoint, collideNormal, penitration); actor.Collide(collidingWith, type, collidePoint, collideNormal, penitration);
m_avatarsWithCollisions.Add(actor);
return; return;
} }
return; return;

View File

@ -59,7 +59,7 @@ namespace OpenSim.Server.Handlers.Asset
if (assetService == String.Empty) if (assetService == String.Empty)
throw new Exception("No LocalServiceModule in config file"); throw new Exception("No LocalServiceModule in config file");
Object[] args = new Object[] { config }; Object[] args = new Object[] { config, m_ConfigName };
m_AssetService = m_AssetService =
ServerUtils.LoadPlugin<IAssetService>(assetService, args); ServerUtils.LoadPlugin<IAssetService>(assetService, args);

View File

@ -67,7 +67,7 @@ namespace OpenSim.Server.Handlers.Asset
if (inventoryService == String.Empty) if (inventoryService == String.Empty)
throw new Exception("No InventoryService in config file"); throw new Exception("No InventoryService in config file");
Object[] args = new Object[] { config }; Object[] args = new Object[] { config, m_ConfigName };
m_InventoryService = m_InventoryService =
ServerUtils.LoadPlugin<IInventoryService>(inventoryService, args); ServerUtils.LoadPlugin<IInventoryService>(inventoryService, args);

View File

@ -46,7 +46,12 @@ namespace OpenSim.Services.AssetService
protected static AssetService m_RootInstance; protected static AssetService m_RootInstance;
public AssetService(IConfigSource config) : base(config) public AssetService(IConfigSource config)
: this(config, "AssetService")
{
}
public AssetService(IConfigSource config, string configName) : base(config, configName)
{ {
if (m_RootInstance == null) if (m_RootInstance == null)
{ {
@ -54,9 +59,9 @@ namespace OpenSim.Services.AssetService
if (m_AssetLoader != null) if (m_AssetLoader != null)
{ {
IConfig assetConfig = config.Configs["AssetService"]; IConfig assetConfig = config.Configs[m_ConfigName];
if (assetConfig == null) if (assetConfig == null)
throw new Exception("No AssetService configuration"); throw new Exception("No " + m_ConfigName + " configuration");
string loaderArgs = assetConfig.GetString("AssetLoaderArgs", string loaderArgs = assetConfig.GetString("AssetLoaderArgs",
String.Empty); String.Empty);

View File

@ -39,16 +39,25 @@ namespace OpenSim.Services.AssetService
{ {
protected IAssetDataPlugin m_Database = null; protected IAssetDataPlugin m_Database = null;
protected IAssetLoader m_AssetLoader = null; protected IAssetLoader m_AssetLoader = null;
protected string m_ConfigName = "AssetService";
public AssetServiceBase(IConfigSource config) : base(config) public AssetServiceBase(IConfigSource config)
: this(config, "AssetService")
{ {
}
public AssetServiceBase(IConfigSource config, string configName) : base(config)
{
if (configName != string.Empty)
m_ConfigName = configName;
string dllName = String.Empty; string dllName = String.Empty;
string connString = String.Empty; string connString = String.Empty;
// //
// Try reading the [AssetService] section first, if it exists // Try reading the [AssetService] section, if it exists
// //
IConfig assetConfig = config.Configs["AssetService"]; IConfig assetConfig = config.Configs[m_ConfigName];
if (assetConfig != null) if (assetConfig != null)
{ {
dllName = assetConfig.GetString("StorageProvider", dllName); dllName = assetConfig.GetString("StorageProvider", dllName);

View File

@ -58,10 +58,10 @@ namespace OpenSim.Services.HypergridService
private UserAccountCache m_Cache; private UserAccountCache m_Cache;
public HGAssetService(IConfigSource config) : base(config) public HGAssetService(IConfigSource config, string configName) : base(config, configName)
{ {
m_log.Debug("[HGAsset Service]: Starting"); m_log.Debug("[HGAsset Service]: Starting");
IConfig assetConfig = config.Configs["HGAssetService"]; IConfig assetConfig = config.Configs[configName];
if (assetConfig == null) if (assetConfig == null)
throw new Exception("No HGAssetService configuration"); throw new Exception("No HGAssetService configuration");

View File

@ -60,36 +60,19 @@ namespace OpenSim.Services.HypergridService
private UserAccountCache m_Cache; private UserAccountCache m_Cache;
public HGInventoryService(IConfigSource config) public HGInventoryService(IConfigSource config, string configName)
: base(config) : base(config, configName)
{ {
m_log.Debug("[HGInventory Service]: Starting"); m_log.Debug("[HGInventory Service]: Starting");
if (configName != string.Empty)
string dllName = String.Empty; m_ConfigName = configName;
string connString = String.Empty;
//string realm = "Inventory"; // OSG version doesn't use this
//
// Try reading the [DatabaseService] section, if it exists
//
IConfig dbConfig = config.Configs["DatabaseService"];
if (dbConfig != null)
{
if (dllName == String.Empty)
dllName = dbConfig.GetString("StorageProvider", String.Empty);
if (connString == String.Empty)
connString = dbConfig.GetString("ConnectionString", String.Empty);
}
// //
// Try reading the [InventoryService] section, if it exists // Try reading the [InventoryService] section, if it exists
// //
IConfig invConfig = config.Configs["HGInventoryService"]; IConfig invConfig = config.Configs[m_ConfigName];
if (invConfig != null) if (invConfig != null)
{ {
dllName = invConfig.GetString("StorageProvider", dllName);
connString = invConfig.GetString("ConnectionString", connString);
// realm = authConfig.GetString("Realm", realm); // realm = authConfig.GetString("Realm", realm);
string userAccountsDll = invConfig.GetString("UserAccountsService", string.Empty); string userAccountsDll = invConfig.GetString("UserAccountsService", string.Empty);
if (userAccountsDll == string.Empty) if (userAccountsDll == string.Empty)
@ -108,17 +91,6 @@ namespace OpenSim.Services.HypergridService
m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService);
} }
//
// We tried, but this doesn't exist. We can't proceed.
//
if (dllName == String.Empty)
throw new Exception("No StorageProvider configured");
m_Database = LoadPlugin<IXInventoryData>(dllName,
new Object[] {connString, String.Empty});
if (m_Database == null)
throw new Exception("Could not find a storage interface in the given module");
m_log.Debug("[HG INVENTORY SERVICE]: Starting..."); m_log.Debug("[HG INVENTORY SERVICE]: Starting...");
} }

View File

@ -46,9 +46,17 @@ namespace OpenSim.Services.InventoryService
protected IXInventoryData m_Database; protected IXInventoryData m_Database;
protected bool m_AllowDelete = true; protected bool m_AllowDelete = true;
protected string m_ConfigName = "InventoryService";
public XInventoryService(IConfigSource config) : base(config) public XInventoryService(IConfigSource config)
: this(config, "InventoryService")
{ {
}
public XInventoryService(IConfigSource config, string configName) : base(config)
{
if (configName != string.Empty)
m_ConfigName = configName;
string dllName = String.Empty; string dllName = String.Empty;
string connString = String.Empty; string connString = String.Empty;
//string realm = "Inventory"; // OSG version doesn't use this //string realm = "Inventory"; // OSG version doesn't use this
@ -56,7 +64,7 @@ namespace OpenSim.Services.InventoryService
// //
// Try reading the [InventoryService] section first, if it exists // Try reading the [InventoryService] section first, if it exists
// //
IConfig authConfig = config.Configs["InventoryService"]; IConfig authConfig = config.Configs[m_ConfigName];
if (authConfig != null) if (authConfig != null)
{ {
dllName = authConfig.GetString("StorageProvider", dllName); dllName = authConfig.GetString("StorageProvider", dllName);

View File

@ -864,8 +864,9 @@
CcdMotionThreshold = 0.0 CcdMotionThreshold = 0.0
CcdSweptSphereRadius = 0.0 CcdSweptSphereRadius = 0.0
ContactProcessingThreshold = 0.1 ContactProcessingThreshold = 0.1
; If setting a pool size, also disable dynamic allocation (default pool size is 4096 with dynamic alloc)
MaxPersistantManifoldPoolSize = 0; MaxPersistantManifoldPoolSize = 0;
ShouldDisableContactPoolDynamicAllocation = True; ShouldDisableContactPoolDynamicAllocation = False;
ShouldForceUpdateAllAabbs = False; ShouldForceUpdateAllAabbs = False;
ShouldRandomizeSolverOrder = False; ShouldRandomizeSolverOrder = False;
ShouldSplitSimulationIslands = False; ShouldSplitSimulationIslands = False;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.