diff options
author | Melanie | 2013-09-01 22:49:31 +0100 |
---|---|---|
committer | Melanie | 2013-09-01 22:49:31 +0100 |
commit | 008c98a9748ba7deadb80c435ddd372002b6c844 (patch) | |
tree | 9458b87c1d28d741ee6c2384eb1028375cb703ab /OpenSim/Region | |
parent | Merge branch 'master' into careminster (diff) | |
parent | Profiles: Clean up some log entries caused when visiting HG avatar is using l... (diff) | |
download | opensim-SC-008c98a9748ba7deadb80c435ddd372002b6c844.zip opensim-SC-008c98a9748ba7deadb80c435ddd372002b6c844.tar.gz opensim-SC-008c98a9748ba7deadb80c435ddd372002b6c844.tar.bz2 opensim-SC-008c98a9748ba7deadb80c435ddd372002b6c844.tar.xz |
Merge branch 'master' into careminster
Conflicts:
OpenSim/Region/CoreModules/World/Region/RestartModule.cs
OpenSim/Region/Framework/Scenes/SceneGraph.cs
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
Diffstat (limited to 'OpenSim/Region')
13 files changed, 375 insertions, 75 deletions
diff --git a/OpenSim/Region/Application/ConfigurationLoader.cs b/OpenSim/Region/Application/ConfigurationLoader.cs index 3e93638..bc7ecb7 100644 --- a/OpenSim/Region/Application/ConfigurationLoader.cs +++ b/OpenSim/Region/Application/ConfigurationLoader.cs | |||
@@ -201,11 +201,11 @@ namespace OpenSim | |||
201 | 201 | ||
202 | envConfigSource.LoadEnv(); | 202 | envConfigSource.LoadEnv(); |
203 | m_config.Source.Merge(envConfigSource); | 203 | m_config.Source.Merge(envConfigSource); |
204 | m_config.Source.ExpandKeyValues(); | ||
205 | } | 204 | } |
206 | 205 | ||
207 | |||
208 | ReadConfigSettings(); | 206 | ReadConfigSettings(); |
207 | |||
208 | m_config.Source.ExpandKeyValues(); | ||
209 | 209 | ||
210 | return m_config; | 210 | return m_config; |
211 | } | 211 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 8cbbfd9..dc28be8 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -6777,6 +6777,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
6777 | } | 6777 | } |
6778 | #endregion | 6778 | #endregion |
6779 | 6779 | ||
6780 | if (SceneAgent.IsChildAgent) | ||
6781 | { | ||
6782 | SendCantSitBecauseChildAgentResponse(); | ||
6783 | return true; | ||
6784 | } | ||
6785 | |||
6780 | AgentRequestSit handlerAgentRequestSit = OnAgentRequestSit; | 6786 | AgentRequestSit handlerAgentRequestSit = OnAgentRequestSit; |
6781 | 6787 | ||
6782 | if (handlerAgentRequestSit != null) | 6788 | if (handlerAgentRequestSit != null) |
@@ -6801,6 +6807,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
6801 | } | 6807 | } |
6802 | #endregion | 6808 | #endregion |
6803 | 6809 | ||
6810 | if (SceneAgent.IsChildAgent) | ||
6811 | { | ||
6812 | SendCantSitBecauseChildAgentResponse(); | ||
6813 | return true; | ||
6814 | } | ||
6815 | |||
6804 | AgentSit handlerAgentSit = OnAgentSit; | 6816 | AgentSit handlerAgentSit = OnAgentSit; |
6805 | if (handlerAgentSit != null) | 6817 | if (handlerAgentSit != null) |
6806 | { | 6818 | { |
@@ -6810,6 +6822,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
6810 | return true; | 6822 | return true; |
6811 | } | 6823 | } |
6812 | 6824 | ||
6825 | /// <summary> | ||
6826 | /// Used when a child agent gets a sit response which should not be fulfilled. | ||
6827 | /// </summary> | ||
6828 | private void SendCantSitBecauseChildAgentResponse() | ||
6829 | { | ||
6830 | SendAlertMessage("Try moving closer. Can't sit on object because it is not in the same region as you."); | ||
6831 | } | ||
6832 | |||
6813 | private bool HandleSoundTrigger(IClientAPI sender, Packet Pack) | 6833 | private bool HandleSoundTrigger(IClientAPI sender, Packet Pack) |
6814 | { | 6834 | { |
6815 | SoundTriggerPacket soundTriggerPacket = (SoundTriggerPacket)Pack; | 6835 | SoundTriggerPacket soundTriggerPacket = (SoundTriggerPacket)Pack; |
@@ -12934,7 +12954,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12934 | { | 12954 | { |
12935 | if (p is ScenePresence) | 12955 | if (p is ScenePresence) |
12936 | { | 12956 | { |
12937 | ScenePresence presence = p as ScenePresence; | ||
12938 | // It turns out to get the agent to stop flying, you have to feed it stop flying velocities | 12957 | // It turns out to get the agent to stop flying, you have to feed it stop flying velocities |
12939 | // There's no explicit message to send the client to tell it to stop flying.. it relies on the | 12958 | // There's no explicit message to send the client to tell it to stop flying.. it relies on the |
12940 | // velocity, collision plane and avatar height | 12959 | // velocity, collision plane and avatar height |
@@ -12942,15 +12961,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12942 | // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air | 12961 | // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air |
12943 | // when the avatar stands up | 12962 | // when the avatar stands up |
12944 | 12963 | ||
12945 | Vector3 pos = presence.AbsolutePosition; | ||
12946 | |||
12947 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock block = | 12964 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock block = |
12948 | CreateImprovedTerseBlock(p, false); | 12965 | CreateImprovedTerseBlock(p, false); |
12949 | 12966 | ||
12950 | const float TIME_DILATION = 1.0f; | 12967 | const float TIME_DILATION = 1.0f; |
12951 | ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); | 12968 | ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); |
12952 | 12969 | ||
12953 | |||
12954 | ImprovedTerseObjectUpdatePacket packet | 12970 | ImprovedTerseObjectUpdatePacket packet |
12955 | = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket( | 12971 | = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket( |
12956 | PacketType.ImprovedTerseObjectUpdate); | 12972 | PacketType.ImprovedTerseObjectUpdate); |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index cef6177..ea660bd 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs | |||
@@ -538,7 +538,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
538 | } | 538 | } |
539 | catch (Exception e) | 539 | catch (Exception e) |
540 | { | 540 | { |
541 | m_log.ErrorFormat("[INVENTORY ARCHIVER]: Could not authenticate password, {0}", e.Message); | 541 | m_log.ErrorFormat("[INVENTORY ARCHIVER]: Could not authenticate password, {0}", e); |
542 | return null; | 542 | return null; |
543 | } | 543 | } |
544 | */ | 544 | */ |
diff --git a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs index 966a05c..bf1cffb 100644 --- a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs | |||
@@ -309,6 +309,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
309 | string serverURI = string.Empty; | 309 | string serverURI = string.Empty; |
310 | GetUserProfileServerURI(targetID, out serverURI); | 310 | GetUserProfileServerURI(targetID, out serverURI); |
311 | UUID creatorId = UUID.Zero; | 311 | UUID creatorId = UUID.Zero; |
312 | Dictionary<UUID, string> classifieds = new Dictionary<UUID, string>(); | ||
312 | 313 | ||
313 | OSDMap parameters= new OSDMap(); | 314 | OSDMap parameters= new OSDMap(); |
314 | UUID.TryParse(args[0], out creatorId); | 315 | UUID.TryParse(args[0], out creatorId); |
@@ -316,15 +317,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
316 | OSD Params = (OSD)parameters; | 317 | OSD Params = (OSD)parameters; |
317 | if(!JsonRpcRequest(ref Params, "avatarclassifiedsrequest", serverURI, UUID.Random().ToString())) | 318 | if(!JsonRpcRequest(ref Params, "avatarclassifiedsrequest", serverURI, UUID.Random().ToString())) |
318 | { | 319 | { |
319 | // Error Handling here! | 320 | remoteClient.SendAvatarClassifiedReply(new UUID(args[0]), classifieds); |
320 | // if(parameters.ContainsKey("message") | 321 | return; |
321 | } | 322 | } |
322 | 323 | ||
323 | parameters = (OSDMap)Params; | 324 | parameters = (OSDMap)Params; |
324 | 325 | ||
325 | OSDArray list = (OSDArray)parameters["result"]; | 326 | OSDArray list = (OSDArray)parameters["result"]; |
326 | 327 | ||
327 | Dictionary<UUID, string> classifieds = new Dictionary<UUID, string>(); | ||
328 | 328 | ||
329 | foreach(OSD map in list) | 329 | foreach(OSD map in list) |
330 | { | 330 | { |
@@ -441,7 +441,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
441 | Vector3 pos = remoteClient.SceneAgent.AbsolutePosition; | 441 | Vector3 pos = remoteClient.SceneAgent.AbsolutePosition; |
442 | ILandObject land = s.LandChannel.GetLandObject(pos.X, pos.Y); | 442 | ILandObject land = s.LandChannel.GetLandObject(pos.X, pos.Y); |
443 | ScenePresence p = FindPresence(remoteClient.AgentId); | 443 | ScenePresence p = FindPresence(remoteClient.AgentId); |
444 | // Vector3 avaPos = p.AbsolutePosition; | ||
445 | 444 | ||
446 | string serverURI = string.Empty; | 445 | string serverURI = string.Empty; |
447 | GetUserProfileServerURI(remoteClient.AgentId, out serverURI); | 446 | GetUserProfileServerURI(remoteClient.AgentId, out serverURI); |
@@ -542,14 +541,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
542 | 541 | ||
543 | string serverURI = string.Empty; | 542 | string serverURI = string.Empty; |
544 | GetUserProfileServerURI(targetId, out serverURI); | 543 | GetUserProfileServerURI(targetId, out serverURI); |
544 | |||
545 | Dictionary<UUID, string> picks = new Dictionary<UUID, string>(); | ||
545 | 546 | ||
546 | OSDMap parameters= new OSDMap(); | 547 | OSDMap parameters= new OSDMap(); |
547 | parameters.Add("creatorId", OSD.FromUUID(targetId)); | 548 | parameters.Add("creatorId", OSD.FromUUID(targetId)); |
548 | OSD Params = (OSD)parameters; | 549 | OSD Params = (OSD)parameters; |
549 | if(!JsonRpcRequest(ref Params, "avatarpicksrequest", serverURI, UUID.Random().ToString())) | 550 | if(!JsonRpcRequest(ref Params, "avatarpicksrequest", serverURI, UUID.Random().ToString())) |
550 | { | 551 | { |
551 | remoteClient.SendAgentAlertMessage( | 552 | remoteClient.SendAvatarPicksReply(new UUID(args[0]), picks); |
552 | "Error requesting picks", false); | ||
553 | return; | 553 | return; |
554 | } | 554 | } |
555 | 555 | ||
@@ -557,8 +557,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
557 | 557 | ||
558 | OSDArray list = (OSDArray)parameters["result"]; | 558 | OSDArray list = (OSDArray)parameters["result"]; |
559 | 559 | ||
560 | Dictionary<UUID, string> picks = new Dictionary<UUID, string>(); | ||
561 | |||
562 | foreach(OSD map in list) | 560 | foreach(OSD map in list) |
563 | { | 561 | { |
564 | OSDMap m = (OSDMap)map; | 562 | OSDMap m = (OSDMap)map; |
@@ -762,8 +760,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
762 | object Note = (object)note; | 760 | object Note = (object)note; |
763 | if(!JsonRpcRequest(ref Note, "avatarnotesrequest", serverURI, UUID.Random().ToString())) | 761 | if(!JsonRpcRequest(ref Note, "avatarnotesrequest", serverURI, UUID.Random().ToString())) |
764 | { | 762 | { |
765 | remoteClient.SendAgentAlertMessage( | 763 | remoteClient.SendAvatarNotesReply(note.TargetId, note.Notes); |
766 | "Error requesting note", false); | 764 | return; |
767 | } | 765 | } |
768 | note = (UserProfileNotes) Note; | 766 | note = (UserProfileNotes) Note; |
769 | 767 | ||
@@ -796,8 +794,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
796 | object Note = note; | 794 | object Note = note; |
797 | if(!JsonRpcRequest(ref Note, "avatar_notes_update", serverURI, UUID.Random().ToString())) | 795 | if(!JsonRpcRequest(ref Note, "avatar_notes_update", serverURI, UUID.Random().ToString())) |
798 | { | 796 | { |
799 | remoteClient.SendAgentAlertMessage( | 797 | return; |
800 | "Error updating note", false); | ||
801 | } | 798 | } |
802 | } | 799 | } |
803 | #endregion Notes | 800 | #endregion Notes |
@@ -1033,8 +1030,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
1033 | OSD Params = (OSD)parameters; | 1030 | OSD Params = (OSD)parameters; |
1034 | if(!JsonRpcRequest(ref Params, "image_assets_request", profileServerURI, UUID.Random().ToString())) | 1031 | if(!JsonRpcRequest(ref Params, "image_assets_request", profileServerURI, UUID.Random().ToString())) |
1035 | { | 1032 | { |
1036 | // Error Handling here! | ||
1037 | // if(parameters.ContainsKey("message") | ||
1038 | return false; | 1033 | return false; |
1039 | } | 1034 | } |
1040 | 1035 | ||
@@ -1224,7 +1219,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
1224 | byte[] content = Encoding.UTF8.GetBytes(jsonRequestData); | 1219 | byte[] content = Encoding.UTF8.GetBytes(jsonRequestData); |
1225 | 1220 | ||
1226 | HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri); | 1221 | HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri); |
1227 | // webRequest.Credentials = new NetworkCredential(rpcUser, rpcPass); | 1222 | |
1228 | webRequest.ContentType = "application/json-rpc"; | 1223 | webRequest.ContentType = "application/json-rpc"; |
1229 | webRequest.Method = "POST"; | 1224 | webRequest.Method = "POST"; |
1230 | 1225 | ||
@@ -1245,7 +1240,20 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
1245 | } | 1240 | } |
1246 | 1241 | ||
1247 | Stream rstream = webResponse.GetResponseStream(); | 1242 | Stream rstream = webResponse.GetResponseStream(); |
1248 | OSDMap mret = (OSDMap)OSDParser.DeserializeJson(rstream); | 1243 | if (rstream.Length < 1) |
1244 | return false; | ||
1245 | |||
1246 | OSDMap mret = new OSDMap(); | ||
1247 | try | ||
1248 | { | ||
1249 | mret = (OSDMap)OSDParser.DeserializeJson(rstream); | ||
1250 | } | ||
1251 | catch (Exception e) | ||
1252 | { | ||
1253 | m_log.DebugFormat("[PROFILES]: JsonRpcRequest Error {0} - remote user with legacy profiles?", e.Message); | ||
1254 | return false; | ||
1255 | } | ||
1256 | |||
1249 | 1257 | ||
1250 | if (mret.ContainsKey("error")) | 1258 | if (mret.ContainsKey("error")) |
1251 | return false; | 1259 | return false; |
@@ -1310,6 +1318,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles | |||
1310 | } | 1318 | } |
1311 | 1319 | ||
1312 | Stream rstream = webResponse.GetResponseStream(); | 1320 | Stream rstream = webResponse.GetResponseStream(); |
1321 | if (rstream.Length < 1) | ||
1322 | return false; | ||
1313 | 1323 | ||
1314 | OSDMap response = new OSDMap(); | 1324 | OSDMap response = new OSDMap(); |
1315 | try | 1325 | try |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 6ff9988..1f3e7a1 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -837,8 +837,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
837 | } | 837 | } |
838 | 838 | ||
839 | m_log.WarnFormat( | 839 | m_log.WarnFormat( |
840 | "[ENTITY TRANSFER MODULE]: UpdateAgent failed on teleport of {0} to {1} from {2}. Keeping avatar in source region.", | 840 | "[ENTITY TRANSFER MODULE]: UpdateAgent failed on teleport of {0} to {1}. Keeping avatar in {2}", |
841 | sp.Name, finalDestination.RegionName, sp.Scene.RegionInfo.RegionName); | 841 | sp.Name, finalDestination.RegionName, sp.Scene.Name); |
842 | 842 | ||
843 | Fail(sp, finalDestination, logout, currentAgentCircuit.SessionID.ToString(), "Connection between viewer and destination region could not be established."); | 843 | Fail(sp, finalDestination, logout, currentAgentCircuit.SessionID.ToString(), "Connection between viewer and destination region could not be established."); |
844 | return; | 844 | return; |
@@ -1058,8 +1058,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1058 | } | 1058 | } |
1059 | 1059 | ||
1060 | m_log.WarnFormat( | 1060 | m_log.WarnFormat( |
1061 | "[ENTITY TRANSFER MODULE]: UpdateAgent failed on teleport of {0} to {1} from {2}. Keeping avatar in source region.", | 1061 | "[ENTITY TRANSFER MODULE]: UpdateAgent failed on teleport of {0} to {1}. Keeping avatar in {2}", |
1062 | sp.Name, finalDestination.RegionName, sp.Scene.RegionInfo.RegionName); | 1062 | sp.Name, finalDestination.RegionName, sp.Scene.Name); |
1063 | 1063 | ||
1064 | Fail(sp, finalDestination, logout, currentAgentCircuit.SessionID.ToString(), "Connection between viewer and destination region could not be established."); | 1064 | Fail(sp, finalDestination, logout, currentAgentCircuit.SessionID.ToString(), "Connection between viewer and destination region could not be established."); |
1065 | return; | 1065 | return; |
diff --git a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs index 9c441ed..0c74b49 100644 --- a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs +++ b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs | |||
@@ -48,8 +48,8 @@ namespace OpenSim.Region.CoreModules.World.Region | |||
48 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "RestartModule")] | 48 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "RestartModule")] |
49 | public class RestartModule : INonSharedRegionModule, IRestartModule | 49 | public class RestartModule : INonSharedRegionModule, IRestartModule |
50 | { | 50 | { |
51 | // private static readonly ILog m_log = | 51 | private static readonly ILog m_log = |
52 | // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 52 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
53 | 53 | ||
54 | protected Scene m_Scene; | 54 | protected Scene m_Scene; |
55 | protected Timer m_CountdownTimer = null; | 55 | protected Timer m_CountdownTimer = null; |
@@ -223,11 +223,25 @@ namespace OpenSim.Region.CoreModules.World.Region | |||
223 | 223 | ||
224 | public void SetTimer(int intervalSeconds) | 224 | public void SetTimer(int intervalSeconds) |
225 | { | 225 | { |
226 | m_CountdownTimer = new Timer(); | 226 | if (intervalSeconds > 0) |
227 | m_CountdownTimer.AutoReset = false; | 227 | { |
228 | m_CountdownTimer.Interval = intervalSeconds * 1000; | 228 | m_CountdownTimer = new Timer(); |
229 | m_CountdownTimer.Elapsed += OnTimer; | 229 | m_CountdownTimer.AutoReset = false; |
230 | m_CountdownTimer.Start(); | 230 | m_CountdownTimer.Interval = intervalSeconds * 1000; |
231 | m_CountdownTimer.Elapsed += OnTimer; | ||
232 | m_CountdownTimer.Start(); | ||
233 | } | ||
234 | else if (m_CountdownTimer != null) | ||
235 | { | ||
236 | m_CountdownTimer.Stop(); | ||
237 | m_CountdownTimer = null; | ||
238 | } | ||
239 | else | ||
240 | { | ||
241 | m_log.WarnFormat( | ||
242 | "[RESTART MODULE]: Tried to set restart timer to {0} in {1}, which is not a valid interval", | ||
243 | intervalSeconds, m_Scene.Name); | ||
244 | } | ||
231 | } | 245 | } |
232 | 246 | ||
233 | private void OnTimer(object source, ElapsedEventArgs e) | 247 | private void OnTimer(object source, ElapsedEventArgs e) |
@@ -332,4 +346,4 @@ namespace OpenSim.Region.CoreModules.World.Region | |||
332 | } | 346 | } |
333 | } | 347 | } |
334 | } | 348 | } |
335 | } \ No newline at end of file | 349 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 56bdc63..f864392 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3986,7 +3986,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3986 | 3986 | ||
3987 | try | 3987 | try |
3988 | { | 3988 | { |
3989 | if (!AuthorizeUser(acd, SeeIntoRegion, out reason)) | 3989 | if (!AuthorizeUser(acd, (vialogin ? false : SeeIntoRegion), out reason)) |
3990 | { | 3990 | { |
3991 | m_authenticateHandler.RemoveCircuit(acd.circuitcode); | 3991 | m_authenticateHandler.RemoveCircuit(acd.circuitcode); |
3992 | return false; | 3992 | return false; |
@@ -4596,10 +4596,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
4596 | 4596 | ||
4597 | // Check that the auth_token is valid | 4597 | // Check that the auth_token is valid |
4598 | AgentCircuitData acd = AuthenticateHandler.GetAgentCircuitData(agentID); | 4598 | AgentCircuitData acd = AuthenticateHandler.GetAgentCircuitData(agentID); |
4599 | if (acd != null && acd.SessionID.ToString() == auth_token) | 4599 | |
4600 | if (acd == null) | ||
4601 | { | ||
4602 | m_log.DebugFormat( | ||
4603 | "[SCENE]: Request to close agent {0} but no such agent in scene {1}. May have been closed previously.", | ||
4604 | agentID, Name); | ||
4605 | |||
4606 | return false; | ||
4607 | } | ||
4608 | |||
4609 | if (acd.SessionID.ToString() == auth_token) | ||
4610 | { | ||
4600 | return IncomingCloseAgent(agentID, force); | 4611 | return IncomingCloseAgent(agentID, force); |
4612 | } | ||
4601 | else | 4613 | else |
4602 | m_log.ErrorFormat("[SCENE]: Request to close agent {0} with invalid authorization token {1}", agentID, auth_token); | 4614 | { |
4615 | m_log.WarnFormat( | ||
4616 | "[SCENE]: Request to close agent {0} with invalid authorization token {1} in {2}", | ||
4617 | agentID, auth_token, Name); | ||
4618 | } | ||
4619 | |||
4603 | return false; | 4620 | return false; |
4604 | } | 4621 | } |
4605 | 4622 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index e599e90..b0f8991 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -631,40 +631,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
631 | protected internal ScenePresence CreateAndAddChildScenePresence( | 631 | protected internal ScenePresence CreateAndAddChildScenePresence( |
632 | IClientAPI client, AvatarAppearance appearance, PresenceType type) | 632 | IClientAPI client, AvatarAppearance appearance, PresenceType type) |
633 | { | 633 | { |
634 | ScenePresence newAvatar = null; | ||
635 | |||
636 | // ScenePresence always defaults to child agent | 634 | // ScenePresence always defaults to child agent |
637 | newAvatar = new ScenePresence(client, m_parentScene, appearance, type); | 635 | ScenePresence presence = new ScenePresence(client, m_parentScene, appearance, type); |
638 | |||
639 | AddScenePresence(newAvatar); | ||
640 | |||
641 | return newAvatar; | ||
642 | } | ||
643 | |||
644 | /// <summary> | ||
645 | /// Add a presence to the scene | ||
646 | /// </summary> | ||
647 | /// <param name="presence"></param> | ||
648 | protected internal void AddScenePresence(ScenePresence presence) | ||
649 | { | ||
650 | // Always a child when added to the scene | ||
651 | bool child = presence.IsChildAgent; | ||
652 | |||
653 | if (child) | ||
654 | { | ||
655 | m_numChildAgents++; | ||
656 | } | ||
657 | else | ||
658 | { | ||
659 | m_numRootAgents++; | ||
660 | presence.AddToPhysicalScene(false); | ||
661 | } | ||
662 | 636 | ||
663 | Entities[presence.UUID] = presence; | 637 | Entities[presence.UUID] = presence; |
664 | 638 | ||
665 | m_scenePresencesLock.EnterWriteLock(); | 639 | m_scenePresencesLock.EnterWriteLock(); |
666 | try | 640 | try |
667 | { | 641 | { |
642 | m_numChildAgents++; | ||
643 | |||
668 | Dictionary<UUID, ScenePresence> newmap = new Dictionary<UUID, ScenePresence>(m_scenePresenceMap); | 644 | Dictionary<UUID, ScenePresence> newmap = new Dictionary<UUID, ScenePresence>(m_scenePresenceMap); |
669 | List<ScenePresence> newlist = new List<ScenePresence>(m_scenePresenceArray); | 645 | List<ScenePresence> newlist = new List<ScenePresence>(m_scenePresenceArray); |
670 | 646 | ||
@@ -675,7 +651,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
675 | } | 651 | } |
676 | else | 652 | else |
677 | { | 653 | { |
678 | // Remember the old presene reference from the dictionary | 654 | // Remember the old presence reference from the dictionary |
679 | ScenePresence oldref = newmap[presence.UUID]; | 655 | ScenePresence oldref = newmap[presence.UUID]; |
680 | // Replace the presence reference in the dictionary with the new value | 656 | // Replace the presence reference in the dictionary with the new value |
681 | newmap[presence.UUID] = presence; | 657 | newmap[presence.UUID] = presence; |
@@ -691,6 +667,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
691 | { | 667 | { |
692 | m_scenePresencesLock.ExitWriteLock(); | 668 | m_scenePresencesLock.ExitWriteLock(); |
693 | } | 669 | } |
670 | |||
671 | return presence; | ||
694 | } | 672 | } |
695 | 673 | ||
696 | /// <summary> | 674 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 59a453a..cf03d7c 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -4522,7 +4522,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4522 | // For now, we use the NINJA naming scheme for identifying joints. | 4522 | // For now, we use the NINJA naming scheme for identifying joints. |
4523 | // In the future, we can support other joint specification schemes such as a | 4523 | // In the future, we can support other joint specification schemes such as a |
4524 | // custom checkbox in the viewer GUI. | 4524 | // custom checkbox in the viewer GUI. |
4525 | if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints) | 4525 | if (ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene != null && ParentGroup.Scene.PhysicsScene.SupportsNINJAJoints) |
4526 | { | 4526 | { |
4527 | return IsHingeJoint() || IsBallJoint(); | 4527 | return IsHingeJoint() || IsBallJoint(); |
4528 | } | 4528 | } |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 3f4979e..88ecda2 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2707,6 +2707,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2707 | 2707 | ||
2708 | public void HandleAgentSit(IClientAPI remoteClient, UUID agentID) | 2708 | public void HandleAgentSit(IClientAPI remoteClient, UUID agentID) |
2709 | { | 2709 | { |
2710 | if (IsChildAgent) | ||
2711 | return; | ||
2712 | |||
2710 | SceneObjectPart part = m_scene.GetSceneObjectPart(m_requestedSitTargetID); | 2713 | SceneObjectPart part = m_scene.GetSceneObjectPart(m_requestedSitTargetID); |
2711 | 2714 | ||
2712 | if (part != null) | 2715 | if (part != null) |
@@ -2793,6 +2796,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2793 | 2796 | ||
2794 | public void HandleAgentSitOnGround() | 2797 | public void HandleAgentSitOnGround() |
2795 | { | 2798 | { |
2799 | if (IsChildAgent) | ||
2800 | return; | ||
2801 | |||
2796 | // m_updateCount = 0; // Kill animation update burst so that the SIT_G.. will stick.. | 2802 | // m_updateCount = 0; // Kill animation update burst so that the SIT_G.. will stick.. |
2797 | m_AngularVelocity = Vector3.Zero; | 2803 | m_AngularVelocity = Vector3.Zero; |
2798 | Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); | 2804 | Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); |
@@ -3451,11 +3457,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3451 | } | 3457 | } |
3452 | } | 3458 | } |
3453 | 3459 | ||
3454 | public void RestoreInCurrentScene() | ||
3455 | { | ||
3456 | AddToPhysicalScene(false); // not exactly false | ||
3457 | } | ||
3458 | |||
3459 | public void Reset() | 3460 | public void Reset() |
3460 | { | 3461 | { |
3461 | // m_log.DebugFormat("[SCENE PRESENCE]: Resetting {0} in {1}", Name, Scene.RegionInfo.RegionName); | 3462 | // m_log.DebugFormat("[SCENE PRESENCE]: Resetting {0} in {1}", Name, Scene.RegionInfo.RegionName); |
diff --git a/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs b/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs new file mode 100644 index 0000000..5a6b284 --- /dev/null +++ b/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs | |||
@@ -0,0 +1,220 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Linq; | ||
31 | using System.Reflection; | ||
32 | using System.Text; | ||
33 | using System.Text.RegularExpressions; | ||
34 | using log4net; | ||
35 | using Mono.Addins; | ||
36 | using NDesk.Options; | ||
37 | using Nini.Config; | ||
38 | using OpenMetaverse; | ||
39 | using OpenSim.Framework; | ||
40 | using OpenSim.Framework.Console; | ||
41 | using OpenSim.Region.Framework.Interfaces; | ||
42 | using OpenSim.Region.Framework.Scenes; | ||
43 | |||
44 | namespace OpenSim.Region.OptionalModules.Avatar.SitStand | ||
45 | { | ||
46 | /// <summary> | ||
47 | /// A module that just holds commands for changing avatar sitting and standing states. | ||
48 | /// </summary> | ||
49 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "AnimationsCommandModule")] | ||
50 | public class SitStandCommandModule : INonSharedRegionModule | ||
51 | { | ||
52 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
53 | |||
54 | private Scene m_scene; | ||
55 | |||
56 | public string Name { get { return "SitStand Command Module"; } } | ||
57 | |||
58 | public Type ReplaceableInterface { get { return null; } } | ||
59 | |||
60 | public void Initialise(IConfigSource source) | ||
61 | { | ||
62 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: INITIALIZED MODULE"); | ||
63 | } | ||
64 | |||
65 | public void PostInitialise() | ||
66 | { | ||
67 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: POST INITIALIZED MODULE"); | ||
68 | } | ||
69 | |||
70 | public void Close() | ||
71 | { | ||
72 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: CLOSED MODULE"); | ||
73 | } | ||
74 | |||
75 | public void AddRegion(Scene scene) | ||
76 | { | ||
77 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: REGION {0} ADDED", scene.RegionInfo.RegionName); | ||
78 | } | ||
79 | |||
80 | public void RemoveRegion(Scene scene) | ||
81 | { | ||
82 | // m_log.DebugFormat("[ATTACHMENTS COMMAND MODULE]: REGION {0} REMOVED", scene.RegionInfo.RegionName); | ||
83 | } | ||
84 | |||
85 | public void RegionLoaded(Scene scene) | ||
86 | { | ||
87 | // m_log.DebugFormat("[ANIMATIONS COMMAND MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName); | ||
88 | |||
89 | m_scene = scene; | ||
90 | |||
91 | scene.AddCommand( | ||
92 | "Users", this, "sit user name", | ||
93 | "sit user name [--regex] <first-name> <last-name>", | ||
94 | "Sit the named user on an unoccupied object with a sit target.", | ||
95 | "If there are no such objects then nothing happens.\n" | ||
96 | + "If --regex is specified then the names are treated as regular expressions.", | ||
97 | HandleSitUserNameCommand); | ||
98 | |||
99 | scene.AddCommand( | ||
100 | "Users", this, "stand user name", | ||
101 | "stand user name [--regex] <first-name> <last-name>", | ||
102 | "Stand the named user.", | ||
103 | "If --regex is specified then the names are treated as regular expressions.", | ||
104 | HandleStandUserNameCommand); | ||
105 | } | ||
106 | |||
107 | private void HandleSitUserNameCommand(string module, string[] cmd) | ||
108 | { | ||
109 | if (MainConsole.Instance.ConsoleScene != m_scene && MainConsole.Instance.ConsoleScene != null) | ||
110 | return; | ||
111 | |||
112 | if (cmd.Length < 5) | ||
113 | { | ||
114 | MainConsole.Instance.Output("Usage: sit user name [--regex] <first-name> <last-name>"); | ||
115 | return; | ||
116 | } | ||
117 | |||
118 | List<ScenePresence> scenePresences = GetScenePresences(cmd); | ||
119 | |||
120 | foreach (ScenePresence sp in scenePresences) | ||
121 | { | ||
122 | if (sp.SitGround || sp.IsSatOnObject) | ||
123 | continue; | ||
124 | |||
125 | SceneObjectPart sitPart = null; | ||
126 | List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups(); | ||
127 | |||
128 | foreach (SceneObjectGroup sceneObject in sceneObjects) | ||
129 | { | ||
130 | if (sceneObject.IsAttachment) | ||
131 | continue; | ||
132 | |||
133 | foreach (SceneObjectPart part in sceneObject.Parts) | ||
134 | { | ||
135 | if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero) | ||
136 | { | ||
137 | sitPart = part; | ||
138 | break; | ||
139 | } | ||
140 | } | ||
141 | } | ||
142 | |||
143 | if (sitPart != null) | ||
144 | { | ||
145 | MainConsole.Instance.OutputFormat( | ||
146 | "Sitting {0} on {1} {2} in {3}", | ||
147 | sp.Name, sitPart.ParentGroup.Name, sitPart.ParentGroup.UUID, m_scene.Name); | ||
148 | |||
149 | sp.HandleAgentRequestSit(sp.ControllingClient, sp.UUID, sitPart.UUID, Vector3.Zero); | ||
150 | sp.HandleAgentSit(sp.ControllingClient, sp.UUID); | ||
151 | } | ||
152 | else | ||
153 | { | ||
154 | MainConsole.Instance.OutputFormat( | ||
155 | "Could not find any unoccupied set seat on which to sit {0} in {1}. Aborting", | ||
156 | sp.Name, m_scene.Name); | ||
157 | |||
158 | break; | ||
159 | } | ||
160 | } | ||
161 | } | ||
162 | |||
163 | private void HandleStandUserNameCommand(string module, string[] cmd) | ||
164 | { | ||
165 | if (MainConsole.Instance.ConsoleScene != m_scene && MainConsole.Instance.ConsoleScene != null) | ||
166 | return; | ||
167 | |||
168 | if (cmd.Length < 5) | ||
169 | { | ||
170 | MainConsole.Instance.Output("Usage: stand user name [--regex] <first-name> <last-name>"); | ||
171 | return; | ||
172 | } | ||
173 | |||
174 | List<ScenePresence> scenePresences = GetScenePresences(cmd); | ||
175 | |||
176 | foreach (ScenePresence sp in scenePresences) | ||
177 | { | ||
178 | if (sp.SitGround || sp.IsSatOnObject) | ||
179 | { | ||
180 | MainConsole.Instance.OutputFormat("Standing {0} in {1}", sp.Name, m_scene.Name); | ||
181 | sp.StandUp(); | ||
182 | } | ||
183 | } | ||
184 | } | ||
185 | |||
186 | private List<ScenePresence> GetScenePresences(string[] cmdParams) | ||
187 | { | ||
188 | bool useRegex = false; | ||
189 | OptionSet options = new OptionSet().Add("regex", v=> useRegex = v != null ); | ||
190 | |||
191 | List<string> mainParams = options.Parse(cmdParams); | ||
192 | |||
193 | string firstName = mainParams[3]; | ||
194 | string lastName = mainParams[4]; | ||
195 | |||
196 | List<ScenePresence> scenePresencesMatched = new List<ScenePresence>(); | ||
197 | |||
198 | if (useRegex) | ||
199 | { | ||
200 | Regex nameRegex = new Regex(string.Format("{0} {1}", firstName, lastName)); | ||
201 | List<ScenePresence> scenePresences = m_scene.GetScenePresences(); | ||
202 | |||
203 | foreach (ScenePresence sp in scenePresences) | ||
204 | { | ||
205 | if (!sp.IsChildAgent && nameRegex.IsMatch(sp.Name)) | ||
206 | scenePresencesMatched.Add(sp); | ||
207 | } | ||
208 | } | ||
209 | else | ||
210 | { | ||
211 | ScenePresence sp = m_scene.GetScenePresence(firstName, lastName); | ||
212 | |||
213 | if (sp != null && !sp.IsChildAgent) | ||
214 | scenePresencesMatched.Add(sp); | ||
215 | } | ||
216 | |||
217 | return scenePresencesMatched; | ||
218 | } | ||
219 | } | ||
220 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs index 6db5f5e..2a820be 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs | |||
@@ -1221,6 +1221,50 @@ private sealed class BulletConstraintXNA : BulletConstraint | |||
1221 | //BSParam.TerrainImplementation = 0; | 1221 | //BSParam.TerrainImplementation = 0; |
1222 | world.SetGravity(new IndexedVector3(0,0,p.gravity)); | 1222 | world.SetGravity(new IndexedVector3(0,0,p.gravity)); |
1223 | 1223 | ||
1224 | // Turn off Pooling since globals and pooling are bad for threading. | ||
1225 | BulletGlobals.VoronoiSimplexSolverPool.SetPoolingEnabled(false); | ||
1226 | BulletGlobals.SubSimplexConvexCastPool.SetPoolingEnabled(false); | ||
1227 | BulletGlobals.ManifoldPointPool.SetPoolingEnabled(false); | ||
1228 | BulletGlobals.CastResultPool.SetPoolingEnabled(false); | ||
1229 | BulletGlobals.SphereShapePool.SetPoolingEnabled(false); | ||
1230 | BulletGlobals.DbvtNodePool.SetPoolingEnabled(false); | ||
1231 | BulletGlobals.SingleRayCallbackPool.SetPoolingEnabled(false); | ||
1232 | BulletGlobals.SubSimplexClosestResultPool.SetPoolingEnabled(false); | ||
1233 | BulletGlobals.GjkPairDetectorPool.SetPoolingEnabled(false); | ||
1234 | BulletGlobals.DbvtTreeColliderPool.SetPoolingEnabled(false); | ||
1235 | BulletGlobals.SingleSweepCallbackPool.SetPoolingEnabled(false); | ||
1236 | BulletGlobals.BroadphaseRayTesterPool.SetPoolingEnabled(false); | ||
1237 | BulletGlobals.ClosestNotMeConvexResultCallbackPool.SetPoolingEnabled(false); | ||
1238 | BulletGlobals.GjkEpaPenetrationDepthSolverPool.SetPoolingEnabled(false); | ||
1239 | BulletGlobals.ContinuousConvexCollisionPool.SetPoolingEnabled(false); | ||
1240 | BulletGlobals.DbvtStackDataBlockPool.SetPoolingEnabled(false); | ||
1241 | |||
1242 | BulletGlobals.BoxBoxCollisionAlgorithmPool.SetPoolingEnabled(false); | ||
1243 | BulletGlobals.CompoundCollisionAlgorithmPool.SetPoolingEnabled(false); | ||
1244 | BulletGlobals.ConvexConcaveCollisionAlgorithmPool.SetPoolingEnabled(false); | ||
1245 | BulletGlobals.ConvexConvexAlgorithmPool.SetPoolingEnabled(false); | ||
1246 | BulletGlobals.ConvexPlaneAlgorithmPool.SetPoolingEnabled(false); | ||
1247 | BulletGlobals.SphereBoxCollisionAlgorithmPool.SetPoolingEnabled(false); | ||
1248 | BulletGlobals.SphereSphereCollisionAlgorithmPool.SetPoolingEnabled(false); | ||
1249 | BulletGlobals.SphereTriangleCollisionAlgorithmPool.SetPoolingEnabled(false); | ||
1250 | BulletGlobals.GImpactCollisionAlgorithmPool.SetPoolingEnabled(false); | ||
1251 | BulletGlobals.GjkEpaSolver2MinkowskiDiffPool.SetPoolingEnabled(false); | ||
1252 | BulletGlobals.PersistentManifoldPool.SetPoolingEnabled(false); | ||
1253 | BulletGlobals.ManifoldResultPool.SetPoolingEnabled(false); | ||
1254 | BulletGlobals.GJKPool.SetPoolingEnabled(false); | ||
1255 | BulletGlobals.GIM_ShapeRetrieverPool.SetPoolingEnabled(false); | ||
1256 | BulletGlobals.TriangleShapePool.SetPoolingEnabled(false); | ||
1257 | BulletGlobals.SphereTriangleDetectorPool.SetPoolingEnabled(false); | ||
1258 | BulletGlobals.CompoundLeafCallbackPool.SetPoolingEnabled(false); | ||
1259 | BulletGlobals.GjkConvexCastPool.SetPoolingEnabled(false); | ||
1260 | BulletGlobals.LocalTriangleSphereCastCallbackPool.SetPoolingEnabled(false); | ||
1261 | BulletGlobals.BridgeTriangleRaycastCallbackPool.SetPoolingEnabled(false); | ||
1262 | BulletGlobals.BridgeTriangleConcaveRaycastCallbackPool.SetPoolingEnabled(false); | ||
1263 | BulletGlobals.BridgeTriangleConvexcastCallbackPool.SetPoolingEnabled(false); | ||
1264 | BulletGlobals.MyNodeOverlapCallbackPool.SetPoolingEnabled(false); | ||
1265 | BulletGlobals.ClosestRayResultCallbackPool.SetPoolingEnabled(false); | ||
1266 | BulletGlobals.DebugDrawcallbackPool.SetPoolingEnabled(false); | ||
1267 | |||
1224 | return world; | 1268 | return world; |
1225 | } | 1269 | } |
1226 | //m_constraint.ptr, ConstraintParams.BT_CONSTRAINT_STOP_CFM, cfm, ConstraintParamAxis.AXIS_ALL | 1270 | //m_constraint.ptr, ConstraintParams.BT_CONSTRAINT_STOP_CFM, cfm, ConstraintParamAxis.AXIS_ALL |
@@ -1914,7 +1958,7 @@ private sealed class BulletConstraintXNA : BulletConstraint | |||
1914 | heightMap, scaleFactor, | 1958 | heightMap, scaleFactor, |
1915 | minHeight, maxHeight, upAxis, | 1959 | minHeight, maxHeight, upAxis, |
1916 | false); | 1960 | false); |
1917 | terrainShape.SetMargin(collisionMargin + 0.5f); | 1961 | terrainShape.SetMargin(collisionMargin); |
1918 | terrainShape.SetUseDiamondSubdivision(true); | 1962 | terrainShape.SetUseDiamondSubdivision(true); |
1919 | terrainShape.SetUserPointer(id); | 1963 | terrainShape.SetUserPointer(id); |
1920 | return new BulletShapeXNA(terrainShape, BSPhysicsShapeType.SHAPE_TERRAIN); | 1964 | return new BulletShapeXNA(terrainShape, BSPhysicsShapeType.SHAPE_TERRAIN); |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index 88d50b4..c92c9b9 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -946,7 +946,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
946 | 946 | ||
947 | private void ProcessRegularTaints() | 947 | private void ProcessRegularTaints() |
948 | { | 948 | { |
949 | if (_taintOperations.Count > 0) // save allocating new list if there is nothing to process | 949 | if (m_initialized && _taintOperations.Count > 0) // save allocating new list if there is nothing to process |
950 | { | 950 | { |
951 | // swizzle a new list into the list location so we can process what's there | 951 | // swizzle a new list into the list location so we can process what's there |
952 | List<TaintCallbackEntry> oldList; | 952 | List<TaintCallbackEntry> oldList; |
@@ -989,7 +989,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
989 | // Taints that happen after the normal taint processing but before the simulation step. | 989 | // Taints that happen after the normal taint processing but before the simulation step. |
990 | private void ProcessPostTaintTaints() | 990 | private void ProcessPostTaintTaints() |
991 | { | 991 | { |
992 | if (_postTaintOperations.Count > 0) | 992 | if (m_initialized && _postTaintOperations.Count > 0) |
993 | { | 993 | { |
994 | Dictionary<string, TaintCallbackEntry> oldList; | 994 | Dictionary<string, TaintCallbackEntry> oldList; |
995 | lock (_taintLock) | 995 | lock (_taintLock) |