diff options
Diffstat (limited to 'OpenSim/Region')
14 files changed, 103 insertions, 54 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs b/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs index 3995620..dfc4419 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/J2KImage.cs | |||
@@ -429,7 +429,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
429 | if (!assetServerURL.EndsWith("/") && !assetServerURL.EndsWith("=")) | 429 | if (!assetServerURL.EndsWith("/") && !assetServerURL.EndsWith("=")) |
430 | assetServerURL = assetServerURL + "/"; | 430 | assetServerURL = assetServerURL + "/"; |
431 | 431 | ||
432 | m_log.DebugFormat("[J2KIMAGE]: texture {0} not found in local asset storage. Trying user's storage.", assetServerURL + id); | 432 | // m_log.DebugFormat("[J2KIMAGE]: texture {0} not found in local asset storage. Trying user's storage.", assetServerURL + id); |
433 | AssetService.Get(assetServerURL + id, InventoryAccessModule, AssetReceived); | 433 | AssetService.Get(assetServerURL + id, InventoryAccessModule, AssetReceived); |
434 | return; | 434 | return; |
435 | } | 435 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index 33ca08c..fab66ce 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -1416,7 +1416,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1416 | 1416 | ||
1417 | // We only want to send initial data to new clients, not ones which are being converted from child to root. | 1417 | // We only want to send initial data to new clients, not ones which are being converted from child to root. |
1418 | if (client != null) | 1418 | if (client != null) |
1419 | client.SceneAgent.SendInitialDataToMe(); | 1419 | { |
1420 | AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code); | ||
1421 | bool tp = (aCircuit.teleportFlags > 0); | ||
1422 | if (!tp) | ||
1423 | client.SceneAgent.SendInitialDataToMe(); | ||
1424 | } | ||
1420 | 1425 | ||
1421 | // Now we know we can handle more data | 1426 | // Now we know we can handle more data |
1422 | Thread.Sleep(200); | 1427 | Thread.Sleep(200); |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 6e19805..6b90097 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -942,6 +942,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
942 | EnableChildAgents(sp); | 942 | EnableChildAgents(sp); |
943 | 943 | ||
944 | // Finally, kill the agent we just created at the destination. | 944 | // Finally, kill the agent we just created at the destination. |
945 | // XXX: Possibly this should be done asynchronously. | ||
945 | Scene.SimulationService.CloseAgent(finalDestination, sp.UUID); | 946 | Scene.SimulationService.CloseAgent(finalDestination, sp.UUID); |
946 | } | 947 | } |
947 | 948 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs index 8b8bb37..e4aa7bc 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs | |||
@@ -322,7 +322,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
322 | // "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate", | 322 | // "[LOCAL SIMULATION CONNECTOR]: Found region {0} {1} to send AgentUpdate", |
323 | // s.RegionInfo.RegionName, destination.RegionHandle); | 323 | // s.RegionInfo.RegionName, destination.RegionHandle); |
324 | 324 | ||
325 | Util.FireAndForget(delegate { m_scenes[destination.RegionID].IncomingCloseAgent(id, false); }); | 325 | m_scenes[destination.RegionID].IncomingCloseAgent(id, false); |
326 | return true; | 326 | return true; |
327 | } | 327 | } |
328 | //m_log.Debug("[LOCAL COMMS]: region not found in SendCloseAgent"); | 328 | //m_log.Debug("[LOCAL COMMS]: region not found in SendCloseAgent"); |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 257e070..70018c8 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -417,13 +417,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
417 | // is not allowed to change the export flag. | 417 | // is not allowed to change the export flag. |
418 | bool denyExportChange = false; | 418 | bool denyExportChange = false; |
419 | 419 | ||
420 | m_log.InfoFormat("[XXX]: B: {0} O: {1} E: {2}", itemUpd.BasePermissions, itemUpd.CurrentPermissions, itemUpd.EveryOnePermissions); | 420 | // m_log.DebugFormat("[XXX]: B: {0} O: {1} E: {2}", itemUpd.BasePermissions, itemUpd.CurrentPermissions, itemUpd.EveryOnePermissions); |
421 | 421 | ||
422 | // If the user is not the creator or doesn't have "E" in both "B" and "O", deny setting export | 422 | // If the user is not the creator or doesn't have "E" in both "B" and "O", deny setting export |
423 | if ((item.BasePermissions & (uint)(PermissionMask.All | PermissionMask.Export)) != (uint)(PermissionMask.All | PermissionMask.Export) || (item.CurrentPermissions & (uint)PermissionMask.Export) == 0 || item.CreatorIdAsUuid != item.Owner) | 423 | if ((item.BasePermissions & (uint)(PermissionMask.All | PermissionMask.Export)) != (uint)(PermissionMask.All | PermissionMask.Export) || (item.CurrentPermissions & (uint)PermissionMask.Export) == 0 || item.CreatorIdAsUuid != item.Owner) |
424 | denyExportChange = true; | 424 | denyExportChange = true; |
425 | 425 | ||
426 | m_log.InfoFormat("[XXX]: Deny Export Update {0}", denyExportChange); | 426 | // m_log.DebugFormat("[XXX]: Deny Export Update {0}", denyExportChange); |
427 | 427 | ||
428 | // If it is already set, force it set and also force full perm | 428 | // If it is already set, force it set and also force full perm |
429 | // else prevent setting it. It can and should never be set unless | 429 | // else prevent setting it. It can and should never be set unless |
@@ -447,7 +447,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
447 | // If the new state is exportable, force full perm | 447 | // If the new state is exportable, force full perm |
448 | if ((itemUpd.EveryOnePermissions & (uint)PermissionMask.Export) != 0) | 448 | if ((itemUpd.EveryOnePermissions & (uint)PermissionMask.Export) != 0) |
449 | { | 449 | { |
450 | m_log.InfoFormat("[XXX]: Force full perm"); | 450 | // m_log.DebugFormat("[XXX]: Force full perm"); |
451 | itemUpd.NextPermissions = (uint)(PermissionMask.All); | 451 | itemUpd.NextPermissions = (uint)(PermissionMask.All); |
452 | } | 452 | } |
453 | } | 453 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 3aabd14..f561d97 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3593,15 +3593,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
3593 | if (closeChildAgents && CapsModule != null) | 3593 | if (closeChildAgents && CapsModule != null) |
3594 | CapsModule.RemoveCaps(agentID, avatar.ControllingClient.CircuitCode); | 3594 | CapsModule.RemoveCaps(agentID, avatar.ControllingClient.CircuitCode); |
3595 | 3595 | ||
3596 | // // REFACTORING PROBLEM -- well not really a problem, but just to point out that whatever | ||
3597 | // // this method is doing is HORRIBLE!!! | ||
3598 | // Commented pending deletion since this method no longer appears to do anything at all | ||
3599 | // avatar.Scene.NeedSceneCacheClear(avatar.UUID); | ||
3600 | |||
3601 | if (closeChildAgents && !isChildAgent) | 3596 | if (closeChildAgents && !isChildAgent) |
3602 | { | 3597 | { |
3603 | List<ulong> regions = avatar.KnownRegionHandles; | 3598 | List<ulong> regions = avatar.KnownRegionHandles; |
3604 | regions.Remove(RegionInfo.RegionHandle); | 3599 | regions.Remove(RegionInfo.RegionHandle); |
3600 | |||
3601 | // This ends up being done asynchronously so that a logout isn't held up where there are many present but unresponsive neighbours. | ||
3605 | m_sceneGridService.SendCloseChildAgentConnections(agentID, regions); | 3602 | m_sceneGridService.SendCloseChildAgentConnections(agentID, regions); |
3606 | } | 3603 | } |
3607 | 3604 | ||
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 0ab267a..5184585 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1550,6 +1550,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1550 | // Create child agents in neighbouring regions | 1550 | // Create child agents in neighbouring regions |
1551 | if (openChildAgents && !IsChildAgent) | 1551 | if (openChildAgents && !IsChildAgent) |
1552 | { | 1552 | { |
1553 | SendInitialDataToMe(); | ||
1553 | 1554 | ||
1554 | IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>(); | 1555 | IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>(); |
1555 | if (m_agentTransfer != null) | 1556 | if (m_agentTransfer != null) |
@@ -3347,10 +3348,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
3347 | if (byebyeRegions.Count > 0) | 3348 | if (byebyeRegions.Count > 0) |
3348 | { | 3349 | { |
3349 | m_log.Debug("[SCENE PRESENCE]: Closing " + byebyeRegions.Count + " child agents"); | 3350 | m_log.Debug("[SCENE PRESENCE]: Closing " + byebyeRegions.Count + " child agents"); |
3350 | Util.FireAndForget(delegate | 3351 | |
3351 | { | 3352 | m_scene.SceneGridService.SendCloseChildAgentConnections(ControllingClient.AgentId, byebyeRegions); |
3352 | m_scene.SceneGridService.SendCloseChildAgentConnections(ControllingClient.AgentId, byebyeRegions); | ||
3353 | }); | ||
3354 | } | 3353 | } |
3355 | 3354 | ||
3356 | foreach (ulong handle in byebyeRegions) | 3355 | foreach (ulong handle in byebyeRegions) |
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs index 5398ab9..bf32251 100644 --- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs | |||
@@ -290,6 +290,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
290 | 290 | ||
291 | private void statsHeartBeat(object sender, EventArgs e) | 291 | private void statsHeartBeat(object sender, EventArgs e) |
292 | { | 292 | { |
293 | if (!m_scene.Active) | ||
294 | return; | ||
295 | |||
293 | SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[23]; | 296 | SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[23]; |
294 | SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); | 297 | SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); |
295 | 298 | ||
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs index 542f732..ff5b6ab 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | |||
@@ -1,4 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ | 2 | * Copyright (c) Contributors, http://opensimulator.org/ |
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | 3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. |
4 | * | 4 | * |
@@ -419,7 +419,7 @@ public sealed class BSCharacter : BSPhysObject | |||
419 | DetailLog("{0},BSCharacter.setTargetVelocity,call,vel={1}", LocalID, value); | 419 | DetailLog("{0},BSCharacter.setTargetVelocity,call,vel={1}", LocalID, value); |
420 | m_targetVelocity = value; | 420 | m_targetVelocity = value; |
421 | OMV.Vector3 targetVel = value; | 421 | OMV.Vector3 targetVel = value; |
422 | if (_setAlwaysRun) | 422 | if (_setAlwaysRun && !_flying) |
423 | targetVel *= new OMV.Vector3(BSParam.AvatarAlwaysRunFactor, BSParam.AvatarAlwaysRunFactor, 0f); | 423 | targetVel *= new OMV.Vector3(BSParam.AvatarAlwaysRunFactor, BSParam.AvatarAlwaysRunFactor, 0f); |
424 | 424 | ||
425 | if (m_moveActor != null) | 425 | if (m_moveActor != null) |
@@ -481,7 +481,10 @@ public sealed class BSCharacter : BSPhysObject | |||
481 | _orientation = value; | 481 | _orientation = value; |
482 | PhysScene.TaintedObject("BSCharacter.setOrientation", delegate() | 482 | PhysScene.TaintedObject("BSCharacter.setOrientation", delegate() |
483 | { | 483 | { |
484 | ForceOrientation = _orientation; | 484 | // Bullet assumes we know what we are doing when forcing orientation |
485 | // so it lets us go against all the rules and just compensates for them later. | ||
486 | // This keeps us from flipping the capsule over which the veiwer does not understand. | ||
487 | ForceOrientation = new OMV.Quaternion(0, 0, _orientation.Z,0); | ||
485 | }); | 488 | }); |
486 | } | 489 | } |
487 | } | 490 | } |
@@ -649,12 +652,12 @@ public sealed class BSCharacter : BSPhysObject | |||
649 | OMV.Vector3 newScale; | 652 | OMV.Vector3 newScale; |
650 | 653 | ||
651 | // Bullet's capsule total height is the "passed height + radius * 2"; | 654 | // Bullet's capsule total height is the "passed height + radius * 2"; |
652 | // The base capsule is 1 diameter and 2 height (passed radius=0.5, passed height = 1) | 655 | // The base capsule is 1 unit in diameter and 2 units in height (passed radius=0.5, passed height = 1) |
653 | // The number we pass in for 'scaling' is the multiplier to get that base | 656 | // The number we pass in for 'scaling' is the multiplier to get that base |
654 | // shape to be the size desired. | 657 | // shape to be the size desired. |
655 | // So, when creating the scale for the avatar height, we take the passed height | 658 | // So, when creating the scale for the avatar height, we take the passed height |
656 | // (size.Z) and remove the caps. | 659 | // (size.Z) and remove the caps. |
657 | // Another oddity of the Bullet capsule implementation is that it presumes the Y | 660 | // An oddity of the Bullet capsule implementation is that it presumes the Y |
658 | // dimension is the radius of the capsule. Even though some of the code allows | 661 | // dimension is the radius of the capsule. Even though some of the code allows |
659 | // for a asymmetrical capsule, other parts of the code presume it is cylindrical. | 662 | // for a asymmetrical capsule, other parts of the code presume it is cylindrical. |
660 | 663 | ||
@@ -662,8 +665,27 @@ public sealed class BSCharacter : BSPhysObject | |||
662 | newScale.X = size.X / 2f; | 665 | newScale.X = size.X / 2f; |
663 | newScale.Y = size.Y / 2f; | 666 | newScale.Y = size.Y / 2f; |
664 | 667 | ||
668 | float heightAdjust = BSParam.AvatarHeightMidFudge; | ||
669 | if (BSParam.AvatarHeightLowFudge != 0f || BSParam.AvatarHeightHighFudge != 0f) | ||
670 | { | ||
671 | // An avatar is between 1.61 and 2.12 meters. Midpoint is 1.87m. | ||
672 | // The "times 4" relies on the fact that the difference from the midpoint to the extremes is exactly 0.25 | ||
673 | float midHeightOffset = size.Z - 1.87f; | ||
674 | if (midHeightOffset < 0f) | ||
675 | { | ||
676 | // Small avatar. Add the adjustment based on the distance from midheight | ||
677 | heightAdjust += -1f * midHeightOffset * 4f * BSParam.AvatarHeightLowFudge; | ||
678 | } | ||
679 | else | ||
680 | { | ||
681 | // Large avatar. Add the adjustment based on the distance from midheight | ||
682 | heightAdjust += midHeightOffset * 4f * BSParam.AvatarHeightHighFudge; | ||
683 | } | ||
684 | } | ||
665 | // The total scale height is the central cylindar plus the caps on the two ends. | 685 | // The total scale height is the central cylindar plus the caps on the two ends. |
666 | newScale.Z = (size.Z + (Math.Min(size.X, size.Y) * 2)) / 2f; | 686 | newScale.Z = (size.Z + (Math.Min(size.X, size.Y) * 2) + heightAdjust) / 2f; |
687 | // m_log.DebugFormat("{0} ComputeAvatarScale: size={1},adj={2},scale={3}", LogHeader, size, heightAdjust, newScale); | ||
688 | |||
667 | // If smaller than the endcaps, just fake like we're almost that small | 689 | // If smaller than the endcaps, just fake like we're almost that small |
668 | if (newScale.Z < 0) | 690 | if (newScale.Z < 0) |
669 | newScale.Z = 0.1f; | 691 | newScale.Z = 0.1f; |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs index 3ca7e16..d33292f 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs | |||
@@ -90,7 +90,7 @@ public static class BSParam | |||
90 | public static bool ShouldUseBulletHACD { get; set; } | 90 | public static bool ShouldUseBulletHACD { get; set; } |
91 | public static bool ShouldUseSingleConvexHullForPrims { get; set; } | 91 | public static bool ShouldUseSingleConvexHullForPrims { get; set; } |
92 | 92 | ||
93 | public static float TerrainImplementation { get; private set; } | 93 | public static float TerrainImplementation { get; set; } |
94 | public static int TerrainMeshMagnification { get; private set; } | 94 | public static int TerrainMeshMagnification { get; private set; } |
95 | public static float TerrainFriction { get; private set; } | 95 | public static float TerrainFriction { get; private set; } |
96 | public static float TerrainHitFraction { get; private set; } | 96 | public static float TerrainHitFraction { get; private set; } |
@@ -125,6 +125,9 @@ public static class BSParam | |||
125 | public static float AvatarCapsuleWidth { get; private set; } | 125 | public static float AvatarCapsuleWidth { get; private set; } |
126 | public static float AvatarCapsuleDepth { get; private set; } | 126 | public static float AvatarCapsuleDepth { get; private set; } |
127 | public static float AvatarCapsuleHeight { get; private set; } | 127 | public static float AvatarCapsuleHeight { get; private set; } |
128 | public static float AvatarHeightLowFudge { get; private set; } | ||
129 | public static float AvatarHeightMidFudge { get; private set; } | ||
130 | public static float AvatarHeightHighFudge { get; private set; } | ||
128 | public static float AvatarContactProcessingThreshold { get; private set; } | 131 | public static float AvatarContactProcessingThreshold { get; private set; } |
129 | public static float AvatarBelowGroundUpCorrectionMeters { get; private set; } | 132 | public static float AvatarBelowGroundUpCorrectionMeters { get; private set; } |
130 | public static float AvatarStepHeight { get; private set; } | 133 | public static float AvatarStepHeight { get; private set; } |
@@ -539,6 +542,12 @@ public static class BSParam | |||
539 | 0.45f ), | 542 | 0.45f ), |
540 | new ParameterDefn<float>("AvatarCapsuleHeight", "Default height of space around avatar", | 543 | new ParameterDefn<float>("AvatarCapsuleHeight", "Default height of space around avatar", |
541 | 1.5f ), | 544 | 1.5f ), |
545 | new ParameterDefn<float>("AvatarHeightLowFudge", "A fudge factor to make small avatars stand on the ground", | ||
546 | -0.2f ), | ||
547 | new ParameterDefn<float>("AvatarHeightMidFudge", "A fudge distance to adjust average sized avatars to be standing on ground", | ||
548 | 0.1f ), | ||
549 | new ParameterDefn<float>("AvatarHeightHighFudge", "A fudge factor to make tall avatars stand on the ground", | ||
550 | 0.1f ), | ||
542 | new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", | 551 | new ParameterDefn<float>("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", |
543 | 0.1f ), | 552 | 0.1f ), |
544 | new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground", | 553 | new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground", |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index a4a8794..3f407ce 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -318,8 +318,12 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
318 | ret = new BSAPIXNA(engineName, this); | 318 | ret = new BSAPIXNA(engineName, this); |
319 | // Disable some features that are not implemented in BulletXNA | 319 | // Disable some features that are not implemented in BulletXNA |
320 | m_log.InfoFormat("{0} Disabling some physics features not implemented by BulletXNA", LogHeader); | 320 | m_log.InfoFormat("{0} Disabling some physics features not implemented by BulletXNA", LogHeader); |
321 | m_log.InfoFormat("{0} Disabling ShouldUseBulletHACD", LogHeader); | ||
321 | BSParam.ShouldUseBulletHACD = false; | 322 | BSParam.ShouldUseBulletHACD = false; |
323 | m_log.InfoFormat("{0} Disabling ShouldUseSingleConvexHullForPrims", LogHeader); | ||
322 | BSParam.ShouldUseSingleConvexHullForPrims = false; | 324 | BSParam.ShouldUseSingleConvexHullForPrims = false; |
325 | m_log.InfoFormat("{0} Setting terrain implimentation to Heightmap", LogHeader); | ||
326 | BSParam.TerrainImplementation = (float)BSTerrainPhys.TerrainImplementation.Heightmap; | ||
323 | break; | 327 | break; |
324 | } | 328 | } |
325 | 329 | ||
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs index 2dc029e..6b09468 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapes.cs | |||
@@ -283,8 +283,13 @@ public class BSShapeNative : BSShape | |||
283 | public override BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim) | 283 | public override BSShape GetReference(BSScene pPhysicsScene, BSPhysObject pPrim) |
284 | { | 284 | { |
285 | // Native shapes are not shared so we return a new shape. | 285 | // Native shapes are not shared so we return a new shape. |
286 | return new BSShapeNative(CreatePhysicalNativeShape(pPhysicsScene, pPrim, | 286 | BSShape ret = null; |
287 | physShapeInfo.shapeType, (FixedShapeKey)physShapeInfo.shapeKey) ); | 287 | lock (physShapeInfo) |
288 | { | ||
289 | ret = new BSShapeNative(CreatePhysicalNativeShape(pPhysicsScene, pPrim, | ||
290 | physShapeInfo.shapeType, (FixedShapeKey)physShapeInfo.shapeKey)); | ||
291 | } | ||
292 | return ret; | ||
288 | } | 293 | } |
289 | 294 | ||
290 | // Make this reference to the physical shape go away since native shapes are not shared. | 295 | // Make this reference to the physical shape go away since native shapes are not shared. |
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index d181b78..42929ec 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs | |||
@@ -358,6 +358,10 @@ namespace OpenSim.Region.Physics.Meshing | |||
358 | physicsParms = (OSDMap)map["physics_shape"]; // old asset format | 358 | physicsParms = (OSDMap)map["physics_shape"]; // old asset format |
359 | else if (map.ContainsKey("physics_mesh")) | 359 | else if (map.ContainsKey("physics_mesh")) |
360 | physicsParms = (OSDMap)map["physics_mesh"]; // new asset format | 360 | physicsParms = (OSDMap)map["physics_mesh"]; // new asset format |
361 | else if (map.ContainsKey("medium_lod")) | ||
362 | physicsParms = (OSDMap)map["medium_lod"]; // if no physics mesh, try to fall back to medium LOD display mesh | ||
363 | else if (map.ContainsKey("high_lod")) | ||
364 | physicsParms = (OSDMap)map["high_lod"]; // if all else fails, use highest LOD display mesh and hope it works :) | ||
361 | 365 | ||
362 | if (physicsParms == null) | 366 | if (physicsParms == null) |
363 | { | 367 | { |
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index b524a18..3e69ab9 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -546,21 +546,33 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
546 | 546 | ||
547 | set {m_data = value; } | 547 | set {m_data = value; } |
548 | } | 548 | } |
549 | // Function to obtain LSL type from an index. This is needed | 549 | |
550 | // because LSL lists allow for multiple types, and safely | 550 | /// <summary> |
551 | // iterating in them requires a type check. | 551 | /// Obtain LSL type from an index. |
552 | /// </summary> | ||
553 | /// <remarks> | ||
554 | /// This is needed because LSL lists allow for multiple types, and safely | ||
555 | /// iterating in them requires a type check. | ||
556 | /// </remarks> | ||
557 | /// <returns></returns> | ||
558 | /// <param name='itemIndex'></param> | ||
552 | public Type GetLSLListItemType(int itemIndex) | 559 | public Type GetLSLListItemType(int itemIndex) |
553 | { | 560 | { |
554 | return m_data[itemIndex].GetType(); | 561 | return m_data[itemIndex].GetType(); |
555 | } | 562 | } |
556 | 563 | ||
557 | // Member functions to obtain item as specific types. | 564 | /// <summary> |
558 | // For cases where implicit conversions would apply if items | 565 | /// Obtain float from an index. |
559 | // were not in a list (e.g. integer to float, but not float | 566 | /// </summary> |
560 | // to integer) functions check for alternate types so as to | 567 | /// <remarks> |
561 | // down-cast from Object to the correct type. | 568 | /// For cases where implicit conversions would apply if items |
562 | // Note: no checks for item index being valid are performed | 569 | /// were not in a list (e.g. integer to float, but not float |
563 | 570 | /// to integer) functions check for alternate types so as to | |
571 | /// down-cast from Object to the correct type. | ||
572 | /// Note: no checks for item index being valid are performed | ||
573 | /// </remarks> | ||
574 | /// <returns></returns> | ||
575 | /// <param name='itemIndex'></param> | ||
564 | public LSL_Types.LSLFloat GetLSLFloatItem(int itemIndex) | 576 | public LSL_Types.LSLFloat GetLSLFloatItem(int itemIndex) |
565 | { | 577 | { |
566 | if (m_data[itemIndex] is LSL_Types.LSLInteger) | 578 | if (m_data[itemIndex] is LSL_Types.LSLInteger) |
@@ -591,26 +603,14 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
591 | 603 | ||
592 | public LSL_Types.LSLString GetLSLStringItem(int itemIndex) | 604 | public LSL_Types.LSLString GetLSLStringItem(int itemIndex) |
593 | { | 605 | { |
594 | if (m_data[itemIndex] is LSL_Types.key) | 606 | if (m_data[itemIndex] is LSL_Types.key) |
595 | { | 607 | { |
596 | return (LSL_Types.key)m_data[itemIndex]; | 608 | return (LSL_Types.key)m_data[itemIndex]; |
597 | } | 609 | } |
598 | else if (m_data[itemIndex] is String) | 610 | else |
599 | { | 611 | { |
600 | return new LSL_Types.LSLString((string)m_data[itemIndex]); | 612 | return new LSL_Types.LSLString(m_data[itemIndex].ToString()); |
601 | } | 613 | } |
602 | else if (m_data[itemIndex] is LSL_Types.LSLFloat) | ||
603 | { | ||
604 | return new LSL_Types.LSLString((LSLFloat)m_data[itemIndex]); | ||
605 | } | ||
606 | else if (m_data[itemIndex] is LSL_Types.LSLInteger) | ||
607 | { | ||
608 | return new LSL_Types.LSLString((LSLInteger)m_data[itemIndex]); | ||
609 | } | ||
610 | else | ||
611 | { | ||
612 | return (LSL_Types.LSLString)m_data[itemIndex]; | ||
613 | } | ||
614 | } | 614 | } |
615 | 615 | ||
616 | public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex) | 616 | public LSL_Types.LSLInteger GetLSLIntegerItem(int itemIndex) |