diff options
author | Melanie | 2010-01-04 21:41:33 +0000 |
---|---|---|
committer | Melanie | 2010-01-04 21:41:33 +0000 |
commit | 7f960cd5950129c8ae9ae8d0aa92efbf9ce3c0cc (patch) | |
tree | badbb6fd767ff6127c28d339677febd9356d80b0 /OpenSim/Region | |
parent | Forgot to add these to the grid configs, so that logins work. (diff) | |
parent | Finish conversion if XInventoryService (diff) | |
download | opensim-SC-7f960cd5950129c8ae9ae8d0aa92efbf9ce3c0cc.zip opensim-SC-7f960cd5950129c8ae9ae8d0aa92efbf9ce3c0cc.tar.gz opensim-SC-7f960cd5950129c8ae9ae8d0aa92efbf9ce3c0cc.tar.bz2 opensim-SC-7f960cd5950129c8ae9ae8d0aa92efbf9ce3c0cc.tar.xz |
Merge branch 'master' into presence-refactor
Diffstat (limited to '')
38 files changed, 770 insertions, 764 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 25026a6..3a802df 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -304,7 +304,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
304 | public event SaveStateHandler OnSaveStateEvent; | 304 | public event SaveStateHandler OnSaveStateEvent; |
305 | public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest; | 305 | public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest; |
306 | public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest; | 306 | public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest; |
307 | public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest; | 307 | public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest; |
308 | public event FreezeUserUpdate OnParcelFreezeUserEvent; | 308 | public event FreezeUserUpdate OnParcelFreezeUserEvent; |
309 | public event EjectUserUpdate OnParcelEjectUserEvent; | 309 | public event EjectUserUpdate OnParcelEjectUserEvent; |
310 | public event ParcelBuyPass OnParcelBuyPass; | 310 | public event ParcelBuyPass OnParcelBuyPass; |
@@ -828,7 +828,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
828 | 828 | ||
829 | public void SendGroupActiveProposals(IClientAPI sender,UUID agentID, UUID sessionID, UUID groupID, UUID transactionID, Dictionary<int, string> VoteID, Dictionary<int, string> VoteInitiator, Dictionary<int, string> Majority, Dictionary<int, string> Quorum, Dictionary<int, string> TerseDateID, Dictionary<int, string> StartDateTime, Dictionary<int, string> EndDateTime, Dictionary<int, string> ProposalText) | 829 | public void SendGroupActiveProposals(IClientAPI sender,UUID agentID, UUID sessionID, UUID groupID, UUID transactionID, Dictionary<int, string> VoteID, Dictionary<int, string> VoteInitiator, Dictionary<int, string> Majority, Dictionary<int, string> Quorum, Dictionary<int, string> TerseDateID, Dictionary<int, string> StartDateTime, Dictionary<int, string> EndDateTime, Dictionary<int, string> ProposalText) |
830 | { | 830 | { |
831 | foreach(KeyValuePair<int, string> Blank in VoteID) | 831 | foreach (KeyValuePair<int, string> Blank in VoteID) |
832 | { | 832 | { |
833 | GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); | 833 | GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); |
834 | 834 | ||
@@ -851,7 +851,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
851 | GAPIRP.ProposalData[0] = ProposalData; | 851 | GAPIRP.ProposalData[0] = ProposalData; |
852 | OutPacket(GAPIRP, ThrottleOutPacketType.Task); | 852 | OutPacket(GAPIRP, ThrottleOutPacketType.Task); |
853 | } | 853 | } |
854 | if(VoteID.Count == 0) | 854 | if (VoteID.Count == 0) |
855 | { | 855 | { |
856 | GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); | 856 | GroupActiveProposalItemReplyPacket GAPIRP = new GroupActiveProposalItemReplyPacket(); |
857 | 857 | ||
@@ -878,7 +878,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
878 | 878 | ||
879 | public void SendGroupVoteHistory(IClientAPI sender,UUID agentID, UUID sessionID, UUID groupID, UUID transactionID, Dictionary<int, string> VoteID, Dictionary<int, string> VoteInitiator, Dictionary<int, string> Majority, Dictionary<int, string> Quorum, Dictionary<int, string> TerseDateID, Dictionary<int, string> StartDateTime, Dictionary<int, string> EndDateTime, Dictionary<int, string> VoteType, Dictionary<int, string> VoteResult, Dictionary<int, string> ProposalText) | 879 | public void SendGroupVoteHistory(IClientAPI sender,UUID agentID, UUID sessionID, UUID groupID, UUID transactionID, Dictionary<int, string> VoteID, Dictionary<int, string> VoteInitiator, Dictionary<int, string> Majority, Dictionary<int, string> Quorum, Dictionary<int, string> TerseDateID, Dictionary<int, string> StartDateTime, Dictionary<int, string> EndDateTime, Dictionary<int, string> VoteType, Dictionary<int, string> VoteResult, Dictionary<int, string> ProposalText) |
880 | { | 880 | { |
881 | foreach(KeyValuePair<int, string> Blank in VoteID) | 881 | foreach (KeyValuePair<int, string> Blank in VoteID) |
882 | { | 882 | { |
883 | GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket(); | 883 | GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket(); |
884 | 884 | ||
@@ -904,7 +904,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
904 | GVHIRP.VoteItem[0] = VoteItem; | 904 | GVHIRP.VoteItem[0] = VoteItem; |
905 | OutPacket(GVHIRP, ThrottleOutPacketType.Task); | 905 | OutPacket(GVHIRP, ThrottleOutPacketType.Task); |
906 | } | 906 | } |
907 | if(VoteID.Count == 0) | 907 | if (VoteID.Count == 0) |
908 | { | 908 | { |
909 | GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket(); | 909 | GroupVoteHistoryItemReplyPacket GVHIRP = new GroupVoteHistoryItemReplyPacket(); |
910 | 910 | ||
@@ -5915,7 +5915,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5915 | 5915 | ||
5916 | if (avSetStartLocationRequestPacket.AgentData.AgentID == AgentId && avSetStartLocationRequestPacket.AgentData.SessionID == SessionId) | 5916 | if (avSetStartLocationRequestPacket.AgentData.AgentID == AgentId && avSetStartLocationRequestPacket.AgentData.SessionID == SessionId) |
5917 | { | 5917 | { |
5918 | // Linden Client limitation.. | 5918 | // Linden Client limitation.. |
5919 | if (avSetStartLocationRequestPacket.StartLocationData.LocationPos.X == 255.5f | 5919 | if (avSetStartLocationRequestPacket.StartLocationData.LocationPos.X == 255.5f |
5920 | || avSetStartLocationRequestPacket.StartLocationData.LocationPos.Y == 255.5f) | 5920 | || avSetStartLocationRequestPacket.StartLocationData.LocationPos.Y == 255.5f) |
5921 | { | 5921 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs index 7e1bed5..50171a3 100644 --- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs | |||
@@ -118,7 +118,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods | |||
118 | 118 | ||
119 | m_scene.ForEachClient( | 119 | m_scene.ForEachClient( |
120 | delegate(IClientAPI controller) | 120 | delegate(IClientAPI controller) |
121 | { | 121 | { |
122 | if (controller.AgentId != godID) | 122 | if (controller.AgentId != godID) |
123 | controller.Kick(reasonStr); | 123 | controller.Kick(reasonStr); |
124 | } | 124 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 0ced2f9..160a9bd 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | |||
@@ -359,12 +359,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
359 | 359 | ||
360 | UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_scene.CommsManager); | 360 | UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_scene.CommsManager); |
361 | if (UUID.Zero != ospResolvedId) | 361 | if (UUID.Zero != ospResolvedId) |
362 | { | 362 | { |
363 | item.CreatorIdAsUuid = ospResolvedId; | 363 | item.CreatorIdAsUuid = ospResolvedId; |
364 | 364 | ||
365 | // XXX: For now, don't preserve the OSPA in the creator id (which actually gets persisted to the | 365 | // XXX: For now, don't preserve the OSPA in the creator id (which actually gets persisted to the |
366 | // database). Instead, replace with the UUID that we found. | 366 | // database). Instead, replace with the UUID that we found. |
367 | item.CreatorId = ospResolvedId.ToString(); | 367 | item.CreatorId = ospResolvedId.ToString(); |
368 | } | 368 | } |
369 | else | 369 | else |
370 | { | 370 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index c85d974..98b686e 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | |||
@@ -117,12 +117,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
117 | } | 117 | } |
118 | 118 | ||
119 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) | 119 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) |
120 | { | 120 | { |
121 | Exception reportedException = null; | 121 | Exception reportedException = null; |
122 | bool succeeded = true; | 122 | bool succeeded = true; |
123 | 123 | ||
124 | try | 124 | try |
125 | { | 125 | { |
126 | // We're almost done. Just need to write out the control file now | 126 | // We're almost done. Just need to write out the control file now |
127 | m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile()); | 127 | m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile()); |
128 | m_log.InfoFormat("[ARCHIVER]: Added control file to archive."); | 128 | m_log.InfoFormat("[ARCHIVER]: Added control file to archive."); |
@@ -269,7 +269,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
269 | m_module.TriggerInventoryArchiveSaved( | 269 | m_module.TriggerInventoryArchiveSaved( |
270 | m_id, false, m_userInfo, m_invPath, m_saveStream, | 270 | m_id, false, m_userInfo, m_invPath, m_saveStream, |
271 | new Exception(errorMessage)); | 271 | new Exception(errorMessage)); |
272 | return; | 272 | return; |
273 | } | 273 | } |
274 | 274 | ||
275 | m_archiveWriter = new TarArchiveWriter(m_saveStream); | 275 | m_archiveWriter = new TarArchiveWriter(m_saveStream); |
diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs index 67fc8e6..efa60bb 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs | |||
@@ -484,11 +484,11 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
484 | QueryDataMap.Add("GlobalZ", OSD.FromInteger((int)groupDataBlock.GlobalZ)); | 484 | QueryDataMap.Add("GlobalZ", OSD.FromInteger((int)groupDataBlock.GlobalZ)); |
485 | QueryDataMap.Add("Name", OSD.FromBinary(groupDataBlock.Name)); | 485 | QueryDataMap.Add("Name", OSD.FromBinary(groupDataBlock.Name)); |
486 | QueryDataMap.Add("OwnerID", OSD.FromUUID(groupDataBlock.OwnerID)); | 486 | QueryDataMap.Add("OwnerID", OSD.FromUUID(groupDataBlock.OwnerID)); |
487 | QueryDataMap.Add("SimName", OSD.FromBinary(groupDataBlock.SimName)); | 487 | QueryDataMap.Add("SimName", OSD.FromBinary(groupDataBlock.SimName)); |
488 | QueryDataMap.Add("SnapShotID", OSD.FromUUID(groupDataBlock.SnapshotID)); | 488 | QueryDataMap.Add("SnapShotID", OSD.FromUUID(groupDataBlock.SnapshotID)); |
489 | QueryDataMap.Add("ProductSku", OSD.FromInteger(0)); | 489 | QueryDataMap.Add("ProductSku", OSD.FromInteger(0)); |
490 | QueryDataMap.Add("Price", OSD.FromInteger(groupDataBlock.Price)); | 490 | QueryDataMap.Add("Price", OSD.FromInteger(groupDataBlock.Price)); |
491 | 491 | ||
492 | QueryData.Add(QueryDataMap); | 492 | QueryData.Add(QueryDataMap); |
493 | } | 493 | } |
494 | body.Add("QueryData", QueryData); | 494 | body.Add("QueryData", QueryData); |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index af72968..52add23 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | |||
@@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
104 | List<string> serialisedParcels = new List<string>(); | 104 | List<string> serialisedParcels = new List<string>(); |
105 | string filePath = "NONE"; | 105 | string filePath = "NONE"; |
106 | 106 | ||
107 | TarArchiveReader archive = new TarArchiveReader(m_loadStream); | 107 | TarArchiveReader archive = new TarArchiveReader(m_loadStream); |
108 | byte[] data; | 108 | byte[] data; |
109 | TarArchiveReader.TarEntryType entryType; | 109 | TarArchiveReader.TarEntryType entryType; |
110 | 110 | ||
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs index 75c4557..9fc6ec4 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs | |||
@@ -91,7 +91,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
91 | 91 | ||
92 | m_log.InfoFormat("[ARCHIVER]: Finished writing out OAR for {0}", m_scene.RegionInfo.RegionName); | 92 | m_log.InfoFormat("[ARCHIVER]: Finished writing out OAR for {0}", m_scene.RegionInfo.RegionName); |
93 | 93 | ||
94 | m_scene.EventManager.TriggerOarFileSaved(m_requestId, String.Empty); | 94 | m_scene.EventManager.TriggerOarFileSaved(m_requestId, String.Empty); |
95 | } | 95 | } |
96 | 96 | ||
97 | protected internal void Save(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) | 97 | protected internal void Save(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs index 27763bb..fc8d4e1 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs | |||
@@ -50,7 +50,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
50 | /// <value> | 50 | /// <value> |
51 | /// The file used to load and save an opensimulator archive if no filename has been specified | 51 | /// The file used to load and save an opensimulator archive if no filename has been specified |
52 | /// </value> | 52 | /// </value> |
53 | protected const string DEFAULT_OAR_BACKUP_FILENAME = "region.oar"; | 53 | protected const string DEFAULT_OAR_BACKUP_FILENAME = "region.oar"; |
54 | 54 | ||
55 | public string Name | 55 | public string Name |
56 | { | 56 | { |
@@ -111,7 +111,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
111 | { | 111 | { |
112 | DearchiveRegion(DEFAULT_OAR_BACKUP_FILENAME, mergeOar, Guid.Empty); | 112 | DearchiveRegion(DEFAULT_OAR_BACKUP_FILENAME, mergeOar, Guid.Empty); |
113 | } | 113 | } |
114 | } | 114 | } |
115 | 115 | ||
116 | /// <summary> | 116 | /// <summary> |
117 | /// Save a region to a file, including all the assets needed to restore it. | 117 | /// Save a region to a file, including all the assets needed to restore it. |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandChannel.cs b/OpenSim/Region/CoreModules/World/Land/LandChannel.cs index 81024db..1fbc733 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandChannel.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandChannel.cs | |||
@@ -105,7 +105,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
105 | ILandObject obj = new LandObject(UUID.Zero, false, m_scene); | 105 | ILandObject obj = new LandObject(UUID.Zero, false, m_scene); |
106 | obj.LandData.Name = "NO LAND"; | 106 | obj.LandData.Name = "NO LAND"; |
107 | return obj; | 107 | return obj; |
108 | } | 108 | } |
109 | 109 | ||
110 | public List<ILandObject> AllParcels() | 110 | public List<ILandObject> AllParcels() |
111 | { | 111 | { |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 9a2ef50..9b39b09 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -627,7 +627,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
627 | return null; | 627 | return null; |
628 | } | 628 | } |
629 | } | 629 | } |
630 | } | 630 | } |
631 | 631 | ||
632 | #endregion | 632 | #endregion |
633 | 633 | ||
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 91c0a53..ae3dc2e 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -817,7 +817,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
817 | } | 817 | } |
818 | 818 | ||
819 | protected bool GenericParcelOwnerPermission(UUID user, ILandObject parcel, ulong groupPowers) | 819 | protected bool GenericParcelOwnerPermission(UUID user, ILandObject parcel, ulong groupPowers) |
820 | { | 820 | { |
821 | if (parcel.LandData.OwnerID == user) | 821 | if (parcel.LandData.OwnerID == user) |
822 | { | 822 | { |
823 | // Returning immediately so that group deeded objects on group deeded land don't trigger a NRE on | 823 | // Returning immediately so that group deeded objects on group deeded land don't trigger a NRE on |
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 086103b..27fad61 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | |||
@@ -275,24 +275,24 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
275 | public event PlacesQuery OnPlacesQuery; | 275 | public event PlacesQuery OnPlacesQuery; |
276 | 276 | ||
277 | public event FindAgentUpdate OnFindAgentEvent; | 277 | public event FindAgentUpdate OnFindAgentEvent; |
278 | public event TrackAgentUpdate OnTrackAgentEvent; | 278 | public event TrackAgentUpdate OnTrackAgentEvent; |
279 | public event NewUserReport OnUserReportEvent; | 279 | public event NewUserReport OnUserReportEvent; |
280 | public event SaveStateHandler OnSaveStateEvent; | 280 | public event SaveStateHandler OnSaveStateEvent; |
281 | public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest; | 281 | public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest; |
282 | public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest; | 282 | public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest; |
283 | public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest; | 283 | public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest; |
284 | public event FreezeUserUpdate OnParcelFreezeUserEvent; | 284 | public event FreezeUserUpdate OnParcelFreezeUserEvent; |
285 | public event EjectUserUpdate OnParcelEjectUserEvent; | 285 | public event EjectUserUpdate OnParcelEjectUserEvent; |
286 | public event ParcelBuyPass OnParcelBuyPass; | 286 | public event ParcelBuyPass OnParcelBuyPass; |
287 | public event ParcelGodMark OnParcelGodMark; | 287 | public event ParcelGodMark OnParcelGodMark; |
288 | public event GroupActiveProposalsRequest OnGroupActiveProposalsRequest; | 288 | public event GroupActiveProposalsRequest OnGroupActiveProposalsRequest; |
289 | public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest; | 289 | public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest; |
290 | public event SimWideDeletesDelegate OnSimWideDeletes; | 290 | public event SimWideDeletesDelegate OnSimWideDeletes; |
291 | public event SendPostcard OnSendPostcard; | 291 | public event SendPostcard OnSendPostcard; |
292 | public event MuteListEntryUpdate OnUpdateMuteListEntryEvent; | 292 | public event MuteListEntryUpdate OnUpdateMuteListEntryEvent; |
293 | public event MuteListEntryRemove OnRemoveMuteListEntryEvent; | 293 | public event MuteListEntryRemove OnRemoveMuteListEntryEvent; |
294 | public event GodlikeMessage onGodlikeMessageEvent; | 294 | public event GodlikeMessage onGodlikeMessageEvent; |
295 | public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdateEvent; | 295 | public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdateEvent; |
296 | 296 | ||
297 | #pragma warning restore 67 | 297 | #pragma warning restore 67 |
298 | 298 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/ILandChannel.cs b/OpenSim/Region/Framework/Interfaces/ILandChannel.cs index 6fe6118..f71e31d 100644 --- a/OpenSim/Region/Framework/Interfaces/ILandChannel.cs +++ b/OpenSim/Region/Framework/Interfaces/ILandChannel.cs | |||
@@ -60,7 +60,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
60 | /// </summary> | 60 | /// </summary> |
61 | /// <param name="position"></param> | 61 | /// <param name="position"></param> |
62 | /// <returns></returns> | 62 | /// <returns></returns> |
63 | List<ILandObject> ParcelsNearPoint(Vector3 position); | 63 | List<ILandObject> ParcelsNearPoint(Vector3 position); |
64 | 64 | ||
65 | /// <summary> | 65 | /// <summary> |
66 | /// Get the parcel given the land's local id. | 66 | /// Get the parcel given the land's local id. |
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs b/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs index 1a8babc..991d60c 100644 --- a/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs | |||
@@ -34,7 +34,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
34 | /// Interface to region archive functionality | 34 | /// Interface to region archive functionality |
35 | /// </summary> | 35 | /// </summary> |
36 | public interface IRegionArchiverModule | 36 | public interface IRegionArchiverModule |
37 | { | 37 | { |
38 | void HandleLoadOarConsoleCommand(string module, string[] cmdparams); | 38 | void HandleLoadOarConsoleCommand(string module, string[] cmdparams); |
39 | void HandleSaveOarConsoleCommand(string module, string[] cmdparams); | 39 | void HandleSaveOarConsoleCommand(string module, string[] cmdparams); |
40 | 40 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index f322af3..a14c853 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -2054,6 +2054,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
2054 | group.Children.Count, remoteClient.AgentId, pos) | 2054 | group.Children.Count, remoteClient.AgentId, pos) |
2055 | && !attachment) | 2055 | && !attachment) |
2056 | { | 2056 | { |
2057 | // The client operates in no fail mode. It will | ||
2058 | // have already removed the item from the folder | ||
2059 | // if it's no copy. | ||
2060 | // Put it back if it's not an attachment | ||
2061 | // | ||
2062 | if (((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) && (!attachment)) | ||
2063 | remoteClient.SendBulkUpdateInventory(item); | ||
2057 | return null; | 2064 | return null; |
2058 | } | 2065 | } |
2059 | 2066 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index ae189b5..20c0622 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -400,11 +400,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
400 | { | 400 | { |
401 | get { return StatsReporter.getLastReportedSimFPS(); } | 401 | get { return StatsReporter.getLastReportedSimFPS(); } |
402 | } | 402 | } |
403 | 403 | ||
404 | public float[] SimulatorStats | 404 | public float[] SimulatorStats |
405 | { | 405 | { |
406 | get { return StatsReporter.getLastReportedSimStats(); } | 406 | get { return StatsReporter.getLastReportedSimStats(); } |
407 | } | 407 | } |
408 | 408 | ||
409 | public string DefaultScriptEngine | 409 | public string DefaultScriptEngine |
410 | { | 410 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index b50def3..22a8ca1 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -1893,11 +1893,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1893 | string data = ""; | 1893 | string data = ""; |
1894 | if (obj != null) | 1894 | if (obj != null) |
1895 | { | 1895 | { |
1896 | if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) | 1896 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) |
1897 | { | 1897 | { |
1898 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 1898 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
1899 | //If it is 1, it is to accept ONLY collisions from this object | 1899 | //If it is 1, it is to accept ONLY collisions from this object |
1900 | if(found) | 1900 | if (found) |
1901 | { | 1901 | { |
1902 | DetectedObject detobj = new DetectedObject(); | 1902 | DetectedObject detobj = new DetectedObject(); |
1903 | detobj.keyUUID = obj.UUID; | 1903 | detobj.keyUUID = obj.UUID; |
@@ -1919,7 +1919,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1919 | { | 1919 | { |
1920 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 1920 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
1921 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work | 1921 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work |
1922 | if(found) | 1922 | if (found) |
1923 | { | 1923 | { |
1924 | DetectedObject detobj = new DetectedObject(); | 1924 | DetectedObject detobj = new DetectedObject(); |
1925 | detobj.keyUUID = obj.UUID; | 1925 | detobj.keyUUID = obj.UUID; |
@@ -1944,11 +1944,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1944 | 1944 | ||
1945 | if (av.LocalId == localId) | 1945 | if (av.LocalId == localId) |
1946 | { | 1946 | { |
1947 | if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) | 1947 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) |
1948 | { | 1948 | { |
1949 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 1949 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
1950 | //If it is 1, it is to accept ONLY collisions from this avatar | 1950 | //If it is 1, it is to accept ONLY collisions from this avatar |
1951 | if(found) | 1951 | if (found) |
1952 | { | 1952 | { |
1953 | DetectedObject detobj = new DetectedObject(); | 1953 | DetectedObject detobj = new DetectedObject(); |
1954 | detobj.keyUUID = av.UUID; | 1954 | detobj.keyUUID = av.UUID; |
@@ -1970,7 +1970,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1970 | { | 1970 | { |
1971 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 1971 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
1972 | //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work | 1972 | //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work |
1973 | if(found) | 1973 | if (found) |
1974 | { | 1974 | { |
1975 | DetectedObject detobj = new DetectedObject(); | 1975 | DetectedObject detobj = new DetectedObject(); |
1976 | detobj.keyUUID = av.UUID; | 1976 | detobj.keyUUID = av.UUID; |
@@ -1998,7 +1998,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1998 | 1998 | ||
1999 | if (m_parentGroup.Scene == null) | 1999 | if (m_parentGroup.Scene == null) |
2000 | return; | 2000 | return; |
2001 | if(m_parentGroup.PassCollision == true) | 2001 | if (m_parentGroup.PassCollision == true) |
2002 | { | 2002 | { |
2003 | //TODO: Add pass to root prim! | 2003 | //TODO: Add pass to root prim! |
2004 | } | 2004 | } |
@@ -2029,11 +2029,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2029 | string data = ""; | 2029 | string data = ""; |
2030 | if (obj != null) | 2030 | if (obj != null) |
2031 | { | 2031 | { |
2032 | if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) | 2032 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) |
2033 | { | 2033 | { |
2034 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2034 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2035 | //If it is 1, it is to accept ONLY collisions from this object | 2035 | //If it is 1, it is to accept ONLY collisions from this object |
2036 | if(found) | 2036 | if (found) |
2037 | { | 2037 | { |
2038 | DetectedObject detobj = new DetectedObject(); | 2038 | DetectedObject detobj = new DetectedObject(); |
2039 | detobj.keyUUID = obj.UUID; | 2039 | detobj.keyUUID = obj.UUID; |
@@ -2055,7 +2055,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2055 | { | 2055 | { |
2056 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2056 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2057 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work | 2057 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work |
2058 | if(found) | 2058 | if (found) |
2059 | { | 2059 | { |
2060 | DetectedObject detobj = new DetectedObject(); | 2060 | DetectedObject detobj = new DetectedObject(); |
2061 | detobj.keyUUID = obj.UUID; | 2061 | detobj.keyUUID = obj.UUID; |
@@ -2080,11 +2080,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2080 | 2080 | ||
2081 | if (av.LocalId == localId) | 2081 | if (av.LocalId == localId) |
2082 | { | 2082 | { |
2083 | if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) | 2083 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) |
2084 | { | 2084 | { |
2085 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2085 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2086 | //If it is 1, it is to accept ONLY collisions from this avatar | 2086 | //If it is 1, it is to accept ONLY collisions from this avatar |
2087 | if(found) | 2087 | if (found) |
2088 | { | 2088 | { |
2089 | DetectedObject detobj = new DetectedObject(); | 2089 | DetectedObject detobj = new DetectedObject(); |
2090 | detobj.keyUUID = av.UUID; | 2090 | detobj.keyUUID = av.UUID; |
@@ -2106,7 +2106,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2106 | { | 2106 | { |
2107 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2107 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2108 | //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work | 2108 | //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work |
2109 | if(found) | 2109 | if (found) |
2110 | { | 2110 | { |
2111 | DetectedObject detobj = new DetectedObject(); | 2111 | DetectedObject detobj = new DetectedObject(); |
2112 | detobj.keyUUID = av.UUID; | 2112 | detobj.keyUUID = av.UUID; |
@@ -2160,11 +2160,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2160 | string data = ""; | 2160 | string data = ""; |
2161 | if (obj != null) | 2161 | if (obj != null) |
2162 | { | 2162 | { |
2163 | if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) | 2163 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) |
2164 | { | 2164 | { |
2165 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2165 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2166 | //If it is 1, it is to accept ONLY collisions from this object | 2166 | //If it is 1, it is to accept ONLY collisions from this object |
2167 | if(found) | 2167 | if (found) |
2168 | { | 2168 | { |
2169 | DetectedObject detobj = new DetectedObject(); | 2169 | DetectedObject detobj = new DetectedObject(); |
2170 | detobj.keyUUID = obj.UUID; | 2170 | detobj.keyUUID = obj.UUID; |
@@ -2186,7 +2186,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2186 | { | 2186 | { |
2187 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2187 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2188 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work | 2188 | //If it is 1, it is to accept ONLY collisions from this object, so this other object will not work |
2189 | if(found) | 2189 | if (found) |
2190 | { | 2190 | { |
2191 | DetectedObject detobj = new DetectedObject(); | 2191 | DetectedObject detobj = new DetectedObject(); |
2192 | detobj.keyUUID = obj.UUID; | 2192 | detobj.keyUUID = obj.UUID; |
@@ -2211,11 +2211,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2211 | 2211 | ||
2212 | if (av.LocalId == localId) | 2212 | if (av.LocalId == localId) |
2213 | { | 2213 | { |
2214 | if(m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) | 2214 | if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) |
2215 | { | 2215 | { |
2216 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2216 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2217 | //If it is 1, it is to accept ONLY collisions from this avatar | 2217 | //If it is 1, it is to accept ONLY collisions from this avatar |
2218 | if(found) | 2218 | if (found) |
2219 | { | 2219 | { |
2220 | DetectedObject detobj = new DetectedObject(); | 2220 | DetectedObject detobj = new DetectedObject(); |
2221 | detobj.keyUUID = av.UUID; | 2221 | detobj.keyUUID = av.UUID; |
@@ -2237,7 +2237,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2237 | { | 2237 | { |
2238 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); | 2238 | bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); |
2239 | //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work | 2239 | //If it is 1, it is to accept ONLY collisions from this avatar, so this other avatar will not work |
2240 | if(found) | 2240 | if (found) |
2241 | { | 2241 | { |
2242 | DetectedObject detobj = new DetectedObject(); | 2242 | DetectedObject detobj = new DetectedObject(); |
2243 | detobj.keyUUID = av.UUID; | 2243 | detobj.keyUUID = av.UUID; |
@@ -2881,8 +2881,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2881 | { | 2881 | { |
2882 | m_parentGroup.stopLookAt(); | 2882 | m_parentGroup.stopLookAt(); |
2883 | 2883 | ||
2884 | m_parentGroup.ScheduleGroupForTerseUpdate(); | 2884 | m_parentGroup.ScheduleGroupForTerseUpdate(); |
2885 | } | 2885 | } |
2886 | 2886 | ||
2887 | /// <summary> | 2887 | /// <summary> |
2888 | /// Set the text displayed for this part. | 2888 | /// Set the text displayed for this part. |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 277081a..8545425 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1851,7 +1851,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1851 | if (collisionPoint.ApproxEquals(m_requestedSitOffset + part.AbsolutePosition, 0.2f)) | 1851 | if (collisionPoint.ApproxEquals(m_requestedSitOffset + part.AbsolutePosition, 0.2f)) |
1852 | { | 1852 | { |
1853 | SitRaycastFindEdge(collisionPoint, normal); | 1853 | SitRaycastFindEdge(collisionPoint, normal); |
1854 | m_log.DebugFormat("[SIT]: Raycast Avatar Position succeeded at point: {0}, normal:{1}", collisionPoint, normal ); | 1854 | m_log.DebugFormat("[SIT]: Raycast Avatar Position succeeded at point: {0}, normal:{1}", collisionPoint, normal); |
1855 | } | 1855 | } |
1856 | else | 1856 | else |
1857 | { | 1857 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs index e368c2a..fd23294 100644 --- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs | |||
@@ -82,7 +82,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
82 | private int m_fps = 0; | 82 | private int m_fps = 0; |
83 | // saved last reported value so there is something available for llGetRegionFPS | 83 | // saved last reported value so there is something available for llGetRegionFPS |
84 | private float lastReportedSimFPS = 0; | 84 | private float lastReportedSimFPS = 0; |
85 | private float[] lastReportedSimStats = new float[21]; | 85 | private float[] lastReportedSimStats = new float[21]; |
86 | private float m_pfps = 0; | 86 | private float m_pfps = 0; |
87 | private int m_agentUpdates = 0; | 87 | private int m_agentUpdates = 0; |
88 | 88 | ||
@@ -263,11 +263,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
263 | 263 | ||
264 | sb[20].StatID = (uint)Stats.ScriptLinesPerSecond; | 264 | sb[20].StatID = (uint)Stats.ScriptLinesPerSecond; |
265 | sb[20].StatValue = m_scriptLinesPerSecond / statsUpdateFactor; | 265 | sb[20].StatValue = m_scriptLinesPerSecond / statsUpdateFactor; |
266 | 266 | ||
267 | for (int i = 0; i < 21; i++) | 267 | for (int i = 0; i < 21; i++) |
268 | { | 268 | { |
269 | lastReportedSimStats[i] = sb[i].StatValue; | 269 | lastReportedSimStats[i] = sb[i].StatValue; |
270 | } | 270 | } |
271 | 271 | ||
272 | SimStats simStats | 272 | SimStats simStats |
273 | = new SimStats( | 273 | = new SimStats( |
@@ -447,11 +447,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
447 | { | 447 | { |
448 | return lastReportedSimFPS; | 448 | return lastReportedSimFPS; |
449 | } | 449 | } |
450 | 450 | ||
451 | public float[] getLastReportedSimStats() | 451 | public float[] getLastReportedSimStats() |
452 | { | 452 | { |
453 | return lastReportedSimStats; | 453 | return lastReportedSimStats; |
454 | } | 454 | } |
455 | 455 | ||
456 | public void AddPacketsStats(int inPackets, int outPackets, int unAckedBytes) | 456 | public void AddPacketsStats(int inPackets, int outPackets, int unAckedBytes) |
457 | { | 457 | { |
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 6c2b94a..5d97a12 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -837,24 +837,24 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
837 | public event AvatarInterestUpdate OnAvatarInterestUpdate; | 837 | public event AvatarInterestUpdate OnAvatarInterestUpdate; |
838 | public event PlacesQuery OnPlacesQuery; | 838 | public event PlacesQuery OnPlacesQuery; |
839 | public event FindAgentUpdate OnFindAgentEvent; | 839 | public event FindAgentUpdate OnFindAgentEvent; |
840 | public event TrackAgentUpdate OnTrackAgentEvent; | 840 | public event TrackAgentUpdate OnTrackAgentEvent; |
841 | public event NewUserReport OnUserReportEvent; | 841 | public event NewUserReport OnUserReportEvent; |
842 | public event SaveStateHandler OnSaveStateEvent; | 842 | public event SaveStateHandler OnSaveStateEvent; |
843 | public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest; | 843 | public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest; |
844 | public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest; | 844 | public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest; |
845 | public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest; | 845 | public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest; |
846 | public event FreezeUserUpdate OnParcelFreezeUserEvent; | 846 | public event FreezeUserUpdate OnParcelFreezeUserEvent; |
847 | public event EjectUserUpdate OnParcelEjectUserEvent; | 847 | public event EjectUserUpdate OnParcelEjectUserEvent; |
848 | public event ParcelBuyPass OnParcelBuyPass; | 848 | public event ParcelBuyPass OnParcelBuyPass; |
849 | public event ParcelGodMark OnParcelGodMark; | 849 | public event ParcelGodMark OnParcelGodMark; |
850 | public event GroupActiveProposalsRequest OnGroupActiveProposalsRequest; | 850 | public event GroupActiveProposalsRequest OnGroupActiveProposalsRequest; |
851 | public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest; | 851 | public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest; |
852 | public event SimWideDeletesDelegate OnSimWideDeletes; | 852 | public event SimWideDeletesDelegate OnSimWideDeletes; |
853 | public event SendPostcard OnSendPostcard; | 853 | public event SendPostcard OnSendPostcard; |
854 | public event MuteListEntryUpdate OnUpdateMuteListEntryEvent; | 854 | public event MuteListEntryUpdate OnUpdateMuteListEntryEvent; |
855 | public event MuteListEntryRemove OnRemoveMuteListEntryEvent; | 855 | public event MuteListEntryRemove OnRemoveMuteListEntryEvent; |
856 | public event GodlikeMessage onGodlikeMessageEvent; | 856 | public event GodlikeMessage onGodlikeMessageEvent; |
857 | public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdateEvent; | 857 | public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdateEvent; |
858 | 858 | ||
859 | #pragma warning restore 67 | 859 | #pragma warning restore 67 |
860 | 860 | ||
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs index 9d64667..30580e7 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs | |||
@@ -179,8 +179,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
179 | /// </summary> | 179 | /// </summary> |
180 | /// <param name="msg">The message to send to the user</param> | 180 | /// <param name="msg">The message to send to the user</param> |
181 | void Say(string msg); | 181 | void Say(string msg); |
182 | 182 | ||
183 | void Say(string msg,int channel); | 183 | void Say(string msg,int channel); |
184 | 184 | ||
185 | //// <value> | 185 | //// <value> |
186 | /// Grants access to the objects inventory | 186 | /// Grants access to the objects inventory |
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs index 9596d13..31f28e0 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs | |||
@@ -264,7 +264,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
264 | if (CanEdit()) | 264 | if (CanEdit()) |
265 | { | 265 | { |
266 | GetSOP().SitTargetPosition = value; | 266 | GetSOP().SitTargetPosition = value; |
267 | } | 267 | } |
268 | } | 268 | } |
269 | } | 269 | } |
270 | 270 | ||
@@ -276,7 +276,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
276 | if (CanEdit()) | 276 | if (CanEdit()) |
277 | { | 277 | { |
278 | GetSOP().SitName = value; | 278 | GetSOP().SitName = value; |
279 | } | 279 | } |
280 | } | 280 | } |
281 | } | 281 | } |
282 | 282 | ||
@@ -288,7 +288,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
288 | if (CanEdit()) | 288 | if (CanEdit()) |
289 | { | 289 | { |
290 | GetSOP().TouchName = value; | 290 | GetSOP().TouchName = value; |
291 | } | 291 | } |
292 | } | 292 | } |
293 | } | 293 | } |
294 | 294 | ||
@@ -384,7 +384,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
384 | m_rootScene.SimChat(msg, ChatTypeEnum.Say, sop.AbsolutePosition, sop.Name, sop.UUID, false); | 384 | m_rootScene.SimChat(msg, ChatTypeEnum.Say, sop.AbsolutePosition, sop.Name, sop.UUID, false); |
385 | } | 385 | } |
386 | 386 | ||
387 | public void Say(string msg,int channel) | 387 | public void Say(string msg,int channel) |
388 | { | 388 | { |
389 | if (!CanEdit()) | 389 | if (!CanEdit()) |
390 | return; | 390 | return; |
@@ -392,7 +392,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
392 | SceneObjectPart sop = GetSOP(); | 392 | SceneObjectPart sop = GetSOP(); |
393 | m_rootScene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Say,channel, sop.AbsolutePosition, sop.Name, sop.UUID, false); | 393 | m_rootScene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Say,channel, sop.AbsolutePosition, sop.Name, sop.UUID, false); |
394 | } | 394 | } |
395 | 395 | ||
396 | #endregion | 396 | #endregion |
397 | 397 | ||
398 | 398 | ||
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs index 82020cb..c7cd37b 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs | |||
@@ -149,7 +149,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
149 | e.Sender = new SOPObject(m_internalScene, ((SceneObjectPart) chat.SenderObject).LocalId, m_security); | 149 | e.Sender = new SOPObject(m_internalScene, ((SceneObjectPart) chat.SenderObject).LocalId, m_security); |
150 | e.Text = chat.Message; | 150 | e.Text = chat.Message; |
151 | e.Channel = chat.Channel; | 151 | e.Channel = chat.Channel; |
152 | 152 | ||
153 | _OnChat(this, e); | 153 | _OnChat(this, e); |
154 | return; | 154 | return; |
155 | } | 155 | } |
@@ -160,7 +160,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
160 | e.Sender = new SPAvatar(m_internalScene, chat.SenderUUID, m_security); | 160 | e.Sender = new SPAvatar(m_internalScene, chat.SenderUUID, m_security); |
161 | e.Text = chat.Message; | 161 | e.Text = chat.Message; |
162 | e.Channel = chat.Channel; | 162 | e.Channel = chat.Channel; |
163 | 163 | ||
164 | _OnChat(this, e); | 164 | _OnChat(this, e); |
165 | return; | 165 | return; |
166 | } | 166 | } |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index da7f018..e3392c8 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -381,24 +381,24 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
381 | public event PlacesQuery OnPlacesQuery; | 381 | public event PlacesQuery OnPlacesQuery; |
382 | 382 | ||
383 | public event FindAgentUpdate OnFindAgentEvent; | 383 | public event FindAgentUpdate OnFindAgentEvent; |
384 | public event TrackAgentUpdate OnTrackAgentEvent; | 384 | public event TrackAgentUpdate OnTrackAgentEvent; |
385 | public event NewUserReport OnUserReportEvent; | 385 | public event NewUserReport OnUserReportEvent; |
386 | public event SaveStateHandler OnSaveStateEvent; | 386 | public event SaveStateHandler OnSaveStateEvent; |
387 | public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest; | 387 | public event GroupAccountSummaryRequest OnGroupAccountSummaryRequest; |
388 | public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest; | 388 | public event GroupAccountDetailsRequest OnGroupAccountDetailsRequest; |
389 | public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest; | 389 | public event GroupAccountTransactionsRequest OnGroupAccountTransactionsRequest; |
390 | public event FreezeUserUpdate OnParcelFreezeUserEvent; | 390 | public event FreezeUserUpdate OnParcelFreezeUserEvent; |
391 | public event EjectUserUpdate OnParcelEjectUserEvent; | 391 | public event EjectUserUpdate OnParcelEjectUserEvent; |
392 | public event ParcelBuyPass OnParcelBuyPass; | 392 | public event ParcelBuyPass OnParcelBuyPass; |
393 | public event ParcelGodMark OnParcelGodMark; | 393 | public event ParcelGodMark OnParcelGodMark; |
394 | public event GroupActiveProposalsRequest OnGroupActiveProposalsRequest; | 394 | public event GroupActiveProposalsRequest OnGroupActiveProposalsRequest; |
395 | public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest; | 395 | public event GroupVoteHistoryRequest OnGroupVoteHistoryRequest; |
396 | public event SimWideDeletesDelegate OnSimWideDeletes; | 396 | public event SimWideDeletesDelegate OnSimWideDeletes; |
397 | public event SendPostcard OnSendPostcard; | 397 | public event SendPostcard OnSendPostcard; |
398 | public event MuteListEntryUpdate OnUpdateMuteListEntryEvent; | 398 | public event MuteListEntryUpdate OnUpdateMuteListEntryEvent; |
399 | public event MuteListEntryRemove OnRemoveMuteListEntryEvent; | 399 | public event MuteListEntryRemove OnRemoveMuteListEntryEvent; |
400 | public event GodlikeMessage onGodlikeMessageEvent; | 400 | public event GodlikeMessage onGodlikeMessageEvent; |
401 | public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdateEvent; | 401 | public event GodUpdateRegionInfoUpdate OnGodUpdateRegionInfoUpdateEvent; |
402 | 402 | ||
403 | #pragma warning restore 67 | 403 | #pragma warning restore 67 |
404 | 404 | ||
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs index f411dd7..31366db 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsActor.cs | |||
@@ -305,22 +305,22 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin | |||
305 | 305 | ||
306 | public override Quaternion APIDTarget | 306 | public override Quaternion APIDTarget |
307 | { | 307 | { |
308 | set { return; } | 308 | set { return; } |
309 | } | 309 | } |
310 | 310 | ||
311 | public override bool APIDActive | 311 | public override bool APIDActive |
312 | { | 312 | { |
313 | set { return; } | 313 | set { return; } |
314 | } | 314 | } |
315 | 315 | ||
316 | public override float APIDStrength | 316 | public override float APIDStrength |
317 | { | 317 | { |
318 | set { return; } | 318 | set { return; } |
319 | } | 319 | } |
320 | 320 | ||
321 | public override float APIDDamping | 321 | public override float APIDDamping |
322 | { | 322 | { |
323 | set { return; } | 323 | set { return; } |
324 | } | 324 | } |
325 | 325 | ||
326 | public override void SubscribeEvents(int ms) | 326 | public override void SubscribeEvents(int ms) |
diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs index 02328b5..97eb6a2 100644 --- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs +++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs | |||
@@ -623,22 +623,22 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin | |||
623 | 623 | ||
624 | public override Quaternion APIDTarget | 624 | public override Quaternion APIDTarget |
625 | { | 625 | { |
626 | set { return; } | 626 | set { return; } |
627 | } | 627 | } |
628 | 628 | ||
629 | public override bool APIDActive | 629 | public override bool APIDActive |
630 | { | 630 | { |
631 | set { return; } | 631 | set { return; } |
632 | } | 632 | } |
633 | 633 | ||
634 | public override float APIDStrength | 634 | public override float APIDStrength |
635 | { | 635 | { |
636 | set { return; } | 636 | set { return; } |
637 | } | 637 | } |
638 | 638 | ||
639 | public override float APIDDamping | 639 | public override float APIDDamping |
640 | { | 640 | { |
641 | set { return; } | 641 | set { return; } |
642 | } | 642 | } |
643 | 643 | ||
644 | /// <summary> | 644 | /// <summary> |
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index 10b153d..9c192ed 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs | |||
@@ -243,7 +243,7 @@ namespace OpenSim.Region.Physics.Manager | |||
243 | public abstract PIDHoverType PIDHoverType { set;} | 243 | public abstract PIDHoverType PIDHoverType { set;} |
244 | public abstract float PIDHoverTau { set;} | 244 | public abstract float PIDHoverTau { set;} |
245 | 245 | ||
246 | // For RotLookAt | 246 | // For RotLookAt |
247 | public abstract Quaternion APIDTarget { set;} | 247 | public abstract Quaternion APIDTarget { set;} |
248 | public abstract bool APIDActive { set;} | 248 | public abstract bool APIDActive { set;} |
249 | public abstract float APIDStrength { set;} | 249 | public abstract float APIDStrength { set;} |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs b/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs index 39cdc0f..008070b 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEDynamics.cs | |||
@@ -32,11 +32,11 @@ | |||
32 | * ODEDynamics.cs contains methods dealing with Prim Physical motion | 32 | * ODEDynamics.cs contains methods dealing with Prim Physical motion |
33 | * (dynamics) and the associated settings. Old Linear and angular | 33 | * (dynamics) and the associated settings. Old Linear and angular |
34 | * motors for dynamic motion have been replace with MoveLinear() | 34 | * motors for dynamic motion have been replace with MoveLinear() |
35 | * and MoveAngular(); 'Physical' is used only to switch ODE dynamic | 35 | * and MoveAngular(); 'Physical' is used only to switch ODE dynamic |
36 | * simualtion on/off; VEHICAL_TYPE_NONE/VEHICAL_TYPE_<other> is to | 36 | * simualtion on/off; VEHICAL_TYPE_NONE/VEHICAL_TYPE_<other> is to |
37 | * switch between 'VEHICLE' parameter use and general dynamics | 37 | * switch between 'VEHICLE' parameter use and general dynamics |
38 | * settings use. | 38 | * settings use. |
39 | */ | 39 | */ |
40 | 40 | ||
41 | using System; | 41 | using System; |
42 | using System.Collections.Generic; | 42 | using System.Collections.Generic; |
@@ -53,7 +53,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
53 | public class ODEDynamics | 53 | public class ODEDynamics |
54 | { | 54 | { |
55 | public Vehicle Type | 55 | public Vehicle Type |
56 | { | 56 | { |
57 | get { return m_type; } | 57 | get { return m_type; } |
58 | } | 58 | } |
59 | 59 | ||
@@ -62,14 +62,14 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
62 | get { return m_body; } | 62 | get { return m_body; } |
63 | } | 63 | } |
64 | 64 | ||
65 | private int frcount = 0; // Used to limit dynamics debug output to | 65 | private int frcount = 0; // Used to limit dynamics debug output to |
66 | // every 100th frame | 66 | // every 100th frame |
67 | 67 | ||
68 | // private OdeScene m_parentScene = null; | 68 | // private OdeScene m_parentScene = null; |
69 | private IntPtr m_body = IntPtr.Zero; | 69 | private IntPtr m_body = IntPtr.Zero; |
70 | // private IntPtr m_jointGroup = IntPtr.Zero; | 70 | // private IntPtr m_jointGroup = IntPtr.Zero; |
71 | // private IntPtr m_aMotor = IntPtr.Zero; | 71 | // private IntPtr m_aMotor = IntPtr.Zero; |
72 | 72 | ||
73 | 73 | ||
74 | // Vehicle properties | 74 | // Vehicle properties |
75 | private Vehicle m_type = Vehicle.TYPE_NONE; // If a 'VEHICLE', and what kind | 75 | private Vehicle m_type = Vehicle.TYPE_NONE; // If a 'VEHICLE', and what kind |
@@ -82,7 +82,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
82 | // HOVER_UP_ONLY | 82 | // HOVER_UP_ONLY |
83 | // LIMIT_MOTOR_UP | 83 | // LIMIT_MOTOR_UP |
84 | // LIMIT_ROLL_ONLY | 84 | // LIMIT_ROLL_ONLY |
85 | 85 | ||
86 | // Linear properties | 86 | // Linear properties |
87 | private Vector3 m_linearMotorDirection = Vector3.Zero; // velocity requested by LSL, decayed by time | 87 | private Vector3 m_linearMotorDirection = Vector3.Zero; // velocity requested by LSL, decayed by time |
88 | private Vector3 m_linearMotorDirectionLASTSET = Vector3.Zero; // velocity requested by LSL | 88 | private Vector3 m_linearMotorDirectionLASTSET = Vector3.Zero; // velocity requested by LSL |
@@ -91,47 +91,43 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
91 | private float m_linearMotorDecayTimescale = 0; | 91 | private float m_linearMotorDecayTimescale = 0; |
92 | private float m_linearMotorTimescale = 0; | 92 | private float m_linearMotorTimescale = 0; |
93 | private Vector3 m_lastLinearVelocityVector = Vector3.Zero; | 93 | private Vector3 m_lastLinearVelocityVector = Vector3.Zero; |
94 | // private bool m_LinearMotorSetLastFrame = false; | 94 | // private bool m_LinearMotorSetLastFrame = false; |
95 | // private Vector3 m_linearMotorOffset = Vector3.Zero; | 95 | // private Vector3 m_linearMotorOffset = Vector3.Zero; |
96 | 96 | ||
97 | //Angular properties | 97 | //Angular properties |
98 | private Vector3 m_angularMotorDirection = Vector3.Zero; // angular velocity requested by LSL motor | 98 | private Vector3 m_angularMotorDirection = Vector3.Zero; // angular velocity requested by LSL motor |
99 | private int m_angularMotorApply = 0; // application frame counter | 99 | private int m_angularMotorApply = 0; // application frame counter |
100 | private Vector3 m_angularMotorVelocity = Vector3.Zero; // current angular motor velocity | 100 | private Vector3 m_angularMotorVelocity = Vector3.Zero; // current angular motor velocity |
101 | private float m_angularMotorTimescale = 0; // motor angular velocity ramp up rate | 101 | private float m_angularMotorTimescale = 0; // motor angular velocity ramp up rate |
102 | private float m_angularMotorDecayTimescale = 0; // motor angular velocity decay rate | 102 | private float m_angularMotorDecayTimescale = 0; // motor angular velocity decay rate |
103 | private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate | 103 | private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate |
104 | private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body | 104 | private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body |
105 | // private Vector3 m_lastVertAttractor = Vector3.Zero; // what VA was last applied to body | 105 | // private Vector3 m_lastVertAttractor = Vector3.Zero; // what VA was last applied to body |
106 | 106 | ||
107 | //Deflection properties | 107 | //Deflection properties |
108 | // private float m_angularDeflectionEfficiency = 0; | 108 | // private float m_angularDeflectionEfficiency = 0; |
109 | // private float m_angularDeflectionTimescale = 0; | 109 | // private float m_angularDeflectionTimescale = 0; |
110 | // private float m_linearDeflectionEfficiency = 0; | 110 | // private float m_linearDeflectionEfficiency = 0; |
111 | // private float m_linearDeflectionTimescale = 0; | 111 | // private float m_linearDeflectionTimescale = 0; |
112 | 112 | ||
113 | //Banking properties | 113 | //Banking properties |
114 | // private float m_bankingEfficiency = 0; | 114 | // private float m_bankingEfficiency = 0; |
115 | // private float m_bankingMix = 0; | 115 | // private float m_bankingMix = 0; |
116 | // private float m_bankingTimescale = 0; | 116 | // private float m_bankingTimescale = 0; |
117 | 117 | ||
118 | //Hover and Buoyancy properties | 118 | //Hover and Buoyancy properties |
119 | private float m_VhoverHeight = 0f; | 119 | private float m_VhoverHeight = 0f; |
120 | // private float m_VhoverEfficiency = 0f; | 120 | // private float m_VhoverEfficiency = 0f; |
121 | private float m_VhoverTimescale = 0f; | 121 | private float m_VhoverTimescale = 0f; |
122 | private float m_VhoverTargetHeight = -1.0f; // if <0 then no hover, else its the current target height | 122 | private float m_VhoverTargetHeight = -1.0f; // if <0 then no hover, else its the current target height |
123 | private float m_VehicleBuoyancy = 0f; //KF: m_VehicleBuoyancy is set by VEHICLE_BUOYANCY for a vehicle. | 123 | private float m_VehicleBuoyancy = 0f; //KF: m_VehicleBuoyancy is set by VEHICLE_BUOYANCY for a vehicle. |
124 | // Modifies gravity. Slider between -1 (double-gravity) and 1 (full anti-gravity) | 124 | // Modifies gravity. Slider between -1 (double-gravity) and 1 (full anti-gravity) |
125 | // KF: So far I have found no good method to combine a script-requested .Z velocity and gravity. | 125 | // KF: So far I have found no good method to combine a script-requested .Z velocity and gravity. |
126 | // Therefore only m_VehicleBuoyancy=1 (0g) will use the script-requested .Z velocity. | 126 | // Therefore only m_VehicleBuoyancy=1 (0g) will use the script-requested .Z velocity. |
127 | 127 | ||
128 | //Attractor properties | 128 | //Attractor properties |
129 | private float m_verticalAttractionEfficiency = 1.0f; // damped | 129 | private float m_verticalAttractionEfficiency = 1.0f; // damped |
130 | private float m_verticalAttractionTimescale = 500f; // Timescale > 300 means no vert attractor. | 130 | private float m_verticalAttractionTimescale = 500f; // Timescale > 300 means no vert attractor. |
131 | |||
132 | |||
133 | |||
134 | |||
135 | 131 | ||
136 | internal void ProcessFloatVehicleParam(Vehicle pParam, float pValue) | 132 | internal void ProcessFloatVehicleParam(Vehicle pParam, float pValue) |
137 | { | 133 | { |
@@ -166,13 +162,13 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
166 | // m_bankingTimescale = pValue; | 162 | // m_bankingTimescale = pValue; |
167 | break; | 163 | break; |
168 | case Vehicle.BUOYANCY: | 164 | case Vehicle.BUOYANCY: |
169 | if (pValue < -1f) pValue = -1f; | 165 | if (pValue < -1f) pValue = -1f; |
170 | if (pValue > 1f) pValue = 1f; | 166 | if (pValue > 1f) pValue = 1f; |
171 | m_VehicleBuoyancy = pValue; | 167 | m_VehicleBuoyancy = pValue; |
172 | break; | 168 | break; |
173 | // case Vehicle.HOVER_EFFICIENCY: | 169 | // case Vehicle.HOVER_EFFICIENCY: |
174 | // if (pValue < 0f) pValue = 0f; | 170 | // if (pValue < 0f) pValue = 0f; |
175 | // if (pValue > 1f) pValue = 1f; | 171 | // if (pValue > 1f) pValue = 1f; |
176 | // m_VhoverEfficiency = pValue; | 172 | // m_VhoverEfficiency = pValue; |
177 | // break; | 173 | // break; |
178 | case Vehicle.HOVER_HEIGHT: | 174 | case Vehicle.HOVER_HEIGHT: |
@@ -199,7 +195,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
199 | m_linearMotorTimescale = pValue; | 195 | m_linearMotorTimescale = pValue; |
200 | break; | 196 | break; |
201 | case Vehicle.VERTICAL_ATTRACTION_EFFICIENCY: | 197 | case Vehicle.VERTICAL_ATTRACTION_EFFICIENCY: |
202 | if (pValue < 0.1f) pValue = 0.1f; // Less goes unstable | 198 | if (pValue < 0.1f) pValue = 0.1f; // Less goes unstable |
203 | if (pValue > 1.0f) pValue = 1.0f; | 199 | if (pValue > 1.0f) pValue = 1.0f; |
204 | m_verticalAttractionEfficiency = pValue; | 200 | m_verticalAttractionEfficiency = pValue; |
205 | break; | 201 | break; |
@@ -207,8 +203,8 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
207 | if (pValue < 0.01f) pValue = 0.01f; | 203 | if (pValue < 0.01f) pValue = 0.01f; |
208 | m_verticalAttractionTimescale = pValue; | 204 | m_verticalAttractionTimescale = pValue; |
209 | break; | 205 | break; |
210 | 206 | ||
211 | // These are vector properties but the engine lets you use a single float value to | 207 | // These are vector properties but the engine lets you use a single float value to |
212 | // set all of the components to the same value | 208 | // set all of the components to the same value |
213 | case Vehicle.ANGULAR_FRICTION_TIMESCALE: | 209 | case Vehicle.ANGULAR_FRICTION_TIMESCALE: |
214 | m_angularFrictionTimescale = new Vector3(pValue, pValue, pValue); | 210 | m_angularFrictionTimescale = new Vector3(pValue, pValue, pValue); |
@@ -229,7 +225,6 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
229 | break; | 225 | break; |
230 | 226 | ||
231 | } | 227 | } |
232 | |||
233 | }//end ProcessFloatVehicleParam | 228 | }//end ProcessFloatVehicleParam |
234 | 229 | ||
235 | internal void ProcessVectorVehicleParam(Vehicle pParam, Vector3 pValue) | 230 | internal void ProcessVectorVehicleParam(Vehicle pParam, Vector3 pValue) |
@@ -242,12 +237,12 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
242 | case Vehicle.ANGULAR_MOTOR_DIRECTION: | 237 | case Vehicle.ANGULAR_MOTOR_DIRECTION: |
243 | m_angularMotorDirection = new Vector3(pValue.X, pValue.Y, pValue.Z); | 238 | m_angularMotorDirection = new Vector3(pValue.X, pValue.Y, pValue.Z); |
244 | // Limit requested angular speed to 2 rps= 4 pi rads/sec | 239 | // Limit requested angular speed to 2 rps= 4 pi rads/sec |
245 | if(m_angularMotorDirection.X > 12.56f) m_angularMotorDirection.X = 12.56f; | 240 | if (m_angularMotorDirection.X > 12.56f) m_angularMotorDirection.X = 12.56f; |
246 | if(m_angularMotorDirection.X < - 12.56f) m_angularMotorDirection.X = - 12.56f; | 241 | if (m_angularMotorDirection.X < - 12.56f) m_angularMotorDirection.X = - 12.56f; |
247 | if(m_angularMotorDirection.Y > 12.56f) m_angularMotorDirection.Y = 12.56f; | 242 | if (m_angularMotorDirection.Y > 12.56f) m_angularMotorDirection.Y = 12.56f; |
248 | if(m_angularMotorDirection.Y < - 12.56f) m_angularMotorDirection.Y = - 12.56f; | 243 | if (m_angularMotorDirection.Y < - 12.56f) m_angularMotorDirection.Y = - 12.56f; |
249 | if(m_angularMotorDirection.Z > 12.56f) m_angularMotorDirection.Z = 12.56f; | 244 | if (m_angularMotorDirection.Z > 12.56f) m_angularMotorDirection.Z = 12.56f; |
250 | if(m_angularMotorDirection.Z < - 12.56f) m_angularMotorDirection.Z = - 12.56f; | 245 | if (m_angularMotorDirection.Z < - 12.56f) m_angularMotorDirection.Z = - 12.56f; |
251 | m_angularMotorApply = 10; | 246 | m_angularMotorApply = 10; |
252 | break; | 247 | break; |
253 | case Vehicle.LINEAR_FRICTION_TIMESCALE: | 248 | case Vehicle.LINEAR_FRICTION_TIMESCALE: |
@@ -261,7 +256,6 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
261 | // m_linearMotorOffset = new Vector3(pValue.X, pValue.Y, pValue.Z); | 256 | // m_linearMotorOffset = new Vector3(pValue.X, pValue.Y, pValue.Z); |
262 | break; | 257 | break; |
263 | } | 258 | } |
264 | |||
265 | }//end ProcessVectorVehicleParam | 259 | }//end ProcessVectorVehicleParam |
266 | 260 | ||
267 | internal void ProcessRotationVehicleParam(Vehicle pParam, Quaternion pValue) | 261 | internal void ProcessRotationVehicleParam(Vehicle pParam, Quaternion pValue) |
@@ -272,12 +266,11 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
272 | // m_referenceFrame = pValue; | 266 | // m_referenceFrame = pValue; |
273 | break; | 267 | break; |
274 | } | 268 | } |
275 | |||
276 | }//end ProcessRotationVehicleParam | 269 | }//end ProcessRotationVehicleParam |
277 | 270 | ||
278 | internal void ProcessTypeChange(Vehicle pType) | 271 | internal void ProcessTypeChange(Vehicle pType) |
279 | { | 272 | { |
280 | // Set Defaults For Type | 273 | // Set Defaults For Type |
281 | m_type = pType; | 274 | m_type = pType; |
282 | switch (pType) | 275 | switch (pType) |
283 | { | 276 | { |
@@ -357,8 +350,8 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
357 | // m_bankingMix = 0.8f; | 350 | // m_bankingMix = 0.8f; |
358 | // m_bankingTimescale = 1; | 351 | // m_bankingTimescale = 1; |
359 | // m_referenceFrame = Quaternion.Identity; | 352 | // m_referenceFrame = Quaternion.Identity; |
360 | m_flags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.LIMIT_ROLL_ONLY | | 353 | m_flags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.LIMIT_ROLL_ONLY | |
361 | VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY); | 354 | VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY); |
362 | m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.HOVER_WATER_ONLY | | 355 | m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.HOVER_WATER_ONLY | |
363 | VehicleFlag.LIMIT_MOTOR_UP); | 356 | VehicleFlag.LIMIT_MOTOR_UP); |
364 | break; | 357 | break; |
@@ -432,24 +425,25 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
432 | { | 425 | { |
433 | if (m_body == IntPtr.Zero || m_type == Vehicle.TYPE_NONE) | 426 | if (m_body == IntPtr.Zero || m_type == Vehicle.TYPE_NONE) |
434 | return; | 427 | return; |
435 | frcount++; // used to limit debug comment output | 428 | frcount++; // used to limit debug comment output |
436 | if (frcount > 100) | 429 | if (frcount > 100) |
437 | frcount = 0; | 430 | frcount = 0; |
438 | 431 | ||
439 | MoveLinear(pTimestep, pParentScene); | 432 | MoveLinear(pTimestep, pParentScene); |
440 | MoveAngular(pTimestep); | 433 | MoveAngular(pTimestep); |
441 | }// end Step | 434 | }// end Step |
442 | 435 | ||
443 | private void MoveLinear(float pTimestep, OdeScene _pParentScene) | 436 | private void MoveLinear(float pTimestep, OdeScene _pParentScene) |
444 | { | 437 | { |
445 | if (!m_linearMotorDirection.ApproxEquals(Vector3.Zero, 0.01f)) // requested m_linearMotorDirection is significant | 438 | if (!m_linearMotorDirection.ApproxEquals(Vector3.Zero, 0.01f)) // requested m_linearMotorDirection is significant |
446 | { | 439 | { |
447 | if(!d.BodyIsEnabled (Body)) d.BodyEnable (Body); | 440 | if (!d.BodyIsEnabled(Body)) |
441 | d.BodyEnable(Body); | ||
448 | 442 | ||
449 | // add drive to body | 443 | // add drive to body |
450 | Vector3 addAmount = m_linearMotorDirection/(m_linearMotorTimescale/pTimestep); | 444 | Vector3 addAmount = m_linearMotorDirection/(m_linearMotorTimescale/pTimestep); |
451 | m_lastLinearVelocityVector += (addAmount*10); // lastLinearVelocityVector is the current body velocity vector? | 445 | m_lastLinearVelocityVector += (addAmount*10); // lastLinearVelocityVector is the current body velocity vector? |
452 | 446 | ||
453 | // This will work temporarily, but we really need to compare speed on an axis | 447 | // This will work temporarily, but we really need to compare speed on an axis |
454 | // KF: Limit body velocity to applied velocity? | 448 | // KF: Limit body velocity to applied velocity? |
455 | if (Math.Abs(m_lastLinearVelocityVector.X) > Math.Abs(m_linearMotorDirectionLASTSET.X)) | 449 | if (Math.Abs(m_lastLinearVelocityVector.X) > Math.Abs(m_linearMotorDirectionLASTSET.X)) |
@@ -458,7 +452,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
458 | m_lastLinearVelocityVector.Y = m_linearMotorDirectionLASTSET.Y; | 452 | m_lastLinearVelocityVector.Y = m_linearMotorDirectionLASTSET.Y; |
459 | if (Math.Abs(m_lastLinearVelocityVector.Z) > Math.Abs(m_linearMotorDirectionLASTSET.Z)) | 453 | if (Math.Abs(m_lastLinearVelocityVector.Z) > Math.Abs(m_linearMotorDirectionLASTSET.Z)) |
460 | m_lastLinearVelocityVector.Z = m_linearMotorDirectionLASTSET.Z; | 454 | m_lastLinearVelocityVector.Z = m_linearMotorDirectionLASTSET.Z; |
461 | 455 | ||
462 | // decay applied velocity | 456 | // decay applied velocity |
463 | Vector3 decayfraction = ((Vector3.One/(m_linearMotorDecayTimescale/pTimestep))); | 457 | Vector3 decayfraction = ((Vector3.One/(m_linearMotorDecayTimescale/pTimestep))); |
464 | //Console.WriteLine("decay: " + decayfraction); | 458 | //Console.WriteLine("decay: " + decayfraction); |
@@ -466,194 +460,192 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
466 | //Console.WriteLine("actual: " + m_linearMotorDirection); | 460 | //Console.WriteLine("actual: " + m_linearMotorDirection); |
467 | } | 461 | } |
468 | else | 462 | else |
469 | { // requested is not significant | 463 | { // requested is not significant |
470 | // if what remains of applied is small, zero it. | 464 | // if what remains of applied is small, zero it. |
471 | if (m_lastLinearVelocityVector.ApproxEquals(Vector3.Zero, 0.01f)) | 465 | if (m_lastLinearVelocityVector.ApproxEquals(Vector3.Zero, 0.01f)) |
472 | m_lastLinearVelocityVector = Vector3.Zero; | 466 | m_lastLinearVelocityVector = Vector3.Zero; |
473 | } | 467 | } |
474 | 468 | ||
475 | 469 | // convert requested object velocity to world-referenced vector | |
476 | // convert requested object velocity to world-referenced vector | ||
477 | m_dir = m_lastLinearVelocityVector; | 470 | m_dir = m_lastLinearVelocityVector; |
478 | d.Quaternion rot = d.BodyGetQuaternion(Body); | 471 | d.Quaternion rot = d.BodyGetQuaternion(Body); |
479 | Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W); // rotq = rotation of object | 472 | Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W); // rotq = rotation of object |
480 | m_dir *= rotq; // apply obj rotation to velocity vector | 473 | m_dir *= rotq; // apply obj rotation to velocity vector |
481 | 474 | ||
482 | // add Gravity andBuoyancy | 475 | // add Gravity andBuoyancy |
483 | // KF: So far I have found no good method to combine a script-requested | 476 | // KF: So far I have found no good method to combine a script-requested |
484 | // .Z velocity and gravity. Therefore only 0g will used script-requested | 477 | // .Z velocity and gravity. Therefore only 0g will used script-requested |
485 | // .Z velocity. >0g (m_VehicleBuoyancy < 1) will used modified gravity only. | 478 | // .Z velocity. >0g (m_VehicleBuoyancy < 1) will used modified gravity only. |
486 | Vector3 grav = Vector3.Zero; | 479 | Vector3 grav = Vector3.Zero; |
487 | if(m_VehicleBuoyancy < 1.0f) | 480 | if (m_VehicleBuoyancy < 1.0f) |
488 | { | 481 | { |
489 | // There is some gravity, make a gravity force vector | 482 | // There is some gravity, make a gravity force vector |
490 | // that is applied after object velocity. | 483 | // that is applied after object velocity. |
491 | d.Mass objMass; | 484 | d.Mass objMass; |
492 | d.BodyGetMass(Body, out objMass); | 485 | d.BodyGetMass(Body, out objMass); |
493 | // m_VehicleBuoyancy: -1=2g; 0=1g; 1=0g; | 486 | // m_VehicleBuoyancy: -1=2g; 0=1g; 1=0g; |
494 | grav.Z = _pParentScene.gravityz * objMass.mass * (1f - m_VehicleBuoyancy); | 487 | grav.Z = _pParentScene.gravityz * objMass.mass * (1f - m_VehicleBuoyancy); |
495 | // Preserve the current Z velocity | 488 | // Preserve the current Z velocity |
496 | d.Vector3 vel_now = d.BodyGetLinearVel(Body); | 489 | d.Vector3 vel_now = d.BodyGetLinearVel(Body); |
497 | m_dir.Z = vel_now.Z; // Preserve the accumulated falling velocity | 490 | m_dir.Z = vel_now.Z; // Preserve the accumulated falling velocity |
498 | } // else its 1.0, no gravity. | 491 | } // else its 1.0, no gravity. |
499 | 492 | ||
500 | // Check if hovering | 493 | // Check if hovering |
501 | if( (m_flags & (VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT)) != 0) | 494 | if ((m_flags & (VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT)) != 0) |
502 | { | 495 | { |
503 | // We should hover, get the target height | 496 | // We should hover, get the target height |
504 | d.Vector3 pos = d.BodyGetPosition(Body); | 497 | d.Vector3 pos = d.BodyGetPosition(Body); |
505 | if((m_flags & VehicleFlag.HOVER_WATER_ONLY) == VehicleFlag.HOVER_WATER_ONLY) | 498 | if ((m_flags & VehicleFlag.HOVER_WATER_ONLY) == VehicleFlag.HOVER_WATER_ONLY) |
506 | { | 499 | { |
507 | m_VhoverTargetHeight = _pParentScene.GetWaterLevel() + m_VhoverHeight; | 500 | m_VhoverTargetHeight = _pParentScene.GetWaterLevel() + m_VhoverHeight; |
508 | } | 501 | } |
509 | else if((m_flags & VehicleFlag.HOVER_TERRAIN_ONLY) == VehicleFlag.HOVER_TERRAIN_ONLY) | 502 | else if ((m_flags & VehicleFlag.HOVER_TERRAIN_ONLY) == VehicleFlag.HOVER_TERRAIN_ONLY) |
510 | { | 503 | { |
511 | m_VhoverTargetHeight = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y) + m_VhoverHeight; | 504 | m_VhoverTargetHeight = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y) + m_VhoverHeight; |
512 | } | 505 | } |
513 | else if((m_flags & VehicleFlag.HOVER_GLOBAL_HEIGHT) == VehicleFlag.HOVER_GLOBAL_HEIGHT) | 506 | else if ((m_flags & VehicleFlag.HOVER_GLOBAL_HEIGHT) == VehicleFlag.HOVER_GLOBAL_HEIGHT) |
514 | { | 507 | { |
515 | m_VhoverTargetHeight = m_VhoverHeight; | 508 | m_VhoverTargetHeight = m_VhoverHeight; |
516 | } | 509 | } |
517 | 510 | ||
518 | if((m_flags & VehicleFlag.HOVER_UP_ONLY) == VehicleFlag.HOVER_UP_ONLY) | 511 | if ((m_flags & VehicleFlag.HOVER_UP_ONLY) == VehicleFlag.HOVER_UP_ONLY) |
519 | { | 512 | { |
520 | // If body is aready heigher, use its height as target height | 513 | // If body is aready heigher, use its height as target height |
521 | if(pos.Z > m_VhoverTargetHeight) m_VhoverTargetHeight = pos.Z; | 514 | if (pos.Z > m_VhoverTargetHeight) m_VhoverTargetHeight = pos.Z; |
522 | } | 515 | } |
523 | 516 | ||
524 | // m_VhoverEfficiency = 0f; // 0=boucy, 1=Crit.damped | 517 | // m_VhoverEfficiency = 0f; // 0=boucy, 1=Crit.damped |
525 | // m_VhoverTimescale = 0f; // time to acheive height | 518 | // m_VhoverTimescale = 0f; // time to acheive height |
526 | // pTimestep is time since last frame,in secs | 519 | // pTimestep is time since last frame,in secs |
527 | float herr0 = pos.Z - m_VhoverTargetHeight; | 520 | float herr0 = pos.Z - m_VhoverTargetHeight; |
528 | // Replace Vertical speed with correction figure if significant | 521 | // Replace Vertical speed with correction figure if significant |
529 | if(Math.Abs(herr0) > 0.01f ) | 522 | if (Math.Abs(herr0) > 0.01f) |
530 | { | 523 | { |
531 | d.Mass objMass; | 524 | d.Mass objMass; |
532 | d.BodyGetMass(Body, out objMass); | 525 | d.BodyGetMass(Body, out objMass); |
533 | m_dir.Z = - ( (herr0 * pTimestep * 50.0f) / m_VhoverTimescale); | 526 | m_dir.Z = - ((herr0 * pTimestep * 50.0f) / m_VhoverTimescale); |
534 | //KF: m_VhoverEfficiency is not yet implemented | 527 | //KF: m_VhoverEfficiency is not yet implemented |
535 | } | 528 | } |
536 | else | 529 | else |
537 | { | 530 | { |
538 | m_dir.Z = 0f; | 531 | m_dir.Z = 0f; |
539 | } | 532 | } |
540 | } | 533 | } |
541 | 534 | ||
542 | // Apply velocity | 535 | // Apply velocity |
543 | d.BodySetLinearVel(Body, m_dir.X, m_dir.Y, m_dir.Z); | 536 | d.BodySetLinearVel(Body, m_dir.X, m_dir.Y, m_dir.Z); |
544 | // apply gravity force | 537 | // apply gravity force |
545 | d.BodyAddForce(Body, grav.X, grav.Y, grav.Z); | 538 | d.BodyAddForce(Body, grav.X, grav.Y, grav.Z); |
546 | 539 | ||
547 | 540 | ||
548 | // apply friction | 541 | // apply friction |
549 | Vector3 decayamount = Vector3.One / (m_linearFrictionTimescale / pTimestep); | 542 | Vector3 decayamount = Vector3.One / (m_linearFrictionTimescale / pTimestep); |
550 | m_lastLinearVelocityVector -= m_lastLinearVelocityVector * decayamount; | 543 | m_lastLinearVelocityVector -= m_lastLinearVelocityVector * decayamount; |
551 | } // end MoveLinear() | 544 | } // end MoveLinear() |
552 | 545 | ||
553 | private void MoveAngular(float pTimestep) | 546 | private void MoveAngular(float pTimestep) |
554 | { | 547 | { |
555 | /* | 548 | /* |
556 | private Vector3 m_angularMotorDirection = Vector3.Zero; // angular velocity requested by LSL motor | 549 | private Vector3 m_angularMotorDirection = Vector3.Zero; // angular velocity requested by LSL motor |
557 | private int m_angularMotorApply = 0; // application frame counter | 550 | private int m_angularMotorApply = 0; // application frame counter |
558 | private float m_angularMotorVelocity = 0; // current angular motor velocity (ramps up and down) | 551 | private float m_angularMotorVelocity = 0; // current angular motor velocity (ramps up and down) |
559 | private float m_angularMotorTimescale = 0; // motor angular velocity ramp up rate | 552 | private float m_angularMotorTimescale = 0; // motor angular velocity ramp up rate |
560 | private float m_angularMotorDecayTimescale = 0; // motor angular velocity decay rate | 553 | private float m_angularMotorDecayTimescale = 0; // motor angular velocity decay rate |
561 | private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate | 554 | private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate |
562 | private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body | 555 | private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body |
563 | */ | 556 | */ |
564 | 557 | ||
565 | // Get what the body is doing, this includes 'external' influences | 558 | // Get what the body is doing, this includes 'external' influences |
566 | d.Vector3 angularVelocity = d.BodyGetAngularVel(Body); | 559 | d.Vector3 angularVelocity = d.BodyGetAngularVel(Body); |
567 | // Vector3 angularVelocity = Vector3.Zero; | 560 | // Vector3 angularVelocity = Vector3.Zero; |
568 | 561 | ||
569 | if (m_angularMotorApply > 0) | 562 | if (m_angularMotorApply > 0) |
570 | { | 563 | { |
571 | // ramp up to new value | 564 | // ramp up to new value |
572 | // current velocity += error / ( time to get there / step interval ) | 565 | // current velocity += error / (time to get there / step interval) |
573 | // requested speed - last motor speed | 566 | // requested speed - last motor speed |
574 | m_angularMotorVelocity.X += (m_angularMotorDirection.X - m_angularMotorVelocity.X) / (m_angularMotorTimescale / pTimestep); | 567 | m_angularMotorVelocity.X += (m_angularMotorDirection.X - m_angularMotorVelocity.X) / (m_angularMotorTimescale / pTimestep); |
575 | m_angularMotorVelocity.Y += (m_angularMotorDirection.Y - m_angularMotorVelocity.Y) / (m_angularMotorTimescale / pTimestep); | 568 | m_angularMotorVelocity.Y += (m_angularMotorDirection.Y - m_angularMotorVelocity.Y) / (m_angularMotorTimescale / pTimestep); |
576 | m_angularMotorVelocity.Z += (m_angularMotorDirection.Z - m_angularMotorVelocity.Z) / (m_angularMotorTimescale / pTimestep); | 569 | m_angularMotorVelocity.Z += (m_angularMotorDirection.Z - m_angularMotorVelocity.Z) / (m_angularMotorTimescale / pTimestep); |
577 | 570 | ||
578 | m_angularMotorApply--; // This is done so that if script request rate is less than phys frame rate the expected | 571 | m_angularMotorApply--; // This is done so that if script request rate is less than phys frame rate the expected |
579 | // velocity may still be acheived. | 572 | // velocity may still be acheived. |
580 | } | 573 | } |
581 | else | 574 | else |
582 | { | 575 | { |
583 | // no motor recently applied, keep the body velocity | 576 | // no motor recently applied, keep the body velocity |
584 | /* m_angularMotorVelocity.X = angularVelocity.X; | 577 | /* m_angularMotorVelocity.X = angularVelocity.X; |
585 | m_angularMotorVelocity.Y = angularVelocity.Y; | 578 | m_angularMotorVelocity.Y = angularVelocity.Y; |
586 | m_angularMotorVelocity.Z = angularVelocity.Z; */ | 579 | m_angularMotorVelocity.Z = angularVelocity.Z; */ |
587 | 580 | ||
588 | // and decay the velocity | 581 | // and decay the velocity |
589 | m_angularMotorVelocity -= m_angularMotorVelocity / (m_angularMotorDecayTimescale / pTimestep); | 582 | m_angularMotorVelocity -= m_angularMotorVelocity / (m_angularMotorDecayTimescale / pTimestep); |
590 | } // end motor section | 583 | } // end motor section |
591 | |||
592 | 584 | ||
593 | // Vertical attractor section | 585 | // Vertical attractor section |
594 | Vector3 vertattr = Vector3.Zero; | 586 | Vector3 vertattr = Vector3.Zero; |
595 | 587 | ||
596 | if(m_verticalAttractionTimescale < 300) | 588 | if (m_verticalAttractionTimescale < 300) |
597 | { | ||
598 | float VAservo = 0.2f / (m_verticalAttractionTimescale * pTimestep); | ||
599 | // get present body rotation | ||
600 | d.Quaternion rot = d.BodyGetQuaternion(Body); | ||
601 | Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W); | ||
602 | // make a vector pointing up | ||
603 | Vector3 verterr = Vector3.Zero; | ||
604 | verterr.Z = 1.0f; | ||
605 | // rotate it to Body Angle | ||
606 | verterr = verterr * rotq; | ||
607 | // verterr.X and .Y are the World error ammounts. They are 0 when there is no error (Vehicle Body is 'vertical'), and .Z will be 1. | ||
608 | // As the body leans to its side |.X| will increase to 1 and .Z fall to 0. As body inverts |.X| will fall and .Z will go | ||
609 | // negative. Similar for tilt and |.Y|. .X and .Y must be modulated to prevent a stable inverted body. | ||
610 | if (verterr.Z < 0.0f) | ||
611 | { | ||
612 | verterr.X = 2.0f - verterr.X; | ||
613 | verterr.Y = 2.0f - verterr.Y; | ||
614 | } | ||
615 | // Error is 0 (no error) to +/- 2 (max error) | ||
616 | // scale it by VAservo | ||
617 | verterr = verterr * VAservo; | ||
618 | //if(frcount == 0) Console.WriteLine("VAerr=" + verterr); | ||
619 | |||
620 | // As the body rotates around the X axis, then verterr.Y increases; Rotated around Y then .X increases, so | ||
621 | // Change Body angular velocity X based on Y, and Y based on X. Z is not changed. | ||
622 | vertattr.X = verterr.Y; | ||
623 | vertattr.Y = - verterr.X; | ||
624 | vertattr.Z = 0f; | ||
625 | |||
626 | // scaling appears better usingsquare-law | ||
627 | float bounce = 1.0f - (m_verticalAttractionEfficiency * m_verticalAttractionEfficiency); | ||
628 | vertattr.X += bounce * angularVelocity.X; | ||
629 | vertattr.Y += bounce * angularVelocity.Y; | ||
630 | |||
631 | } // else vertical attractor is off | ||
632 | |||
633 | // m_lastVertAttractor = vertattr; | ||
634 | |||
635 | // Bank section tba | ||
636 | // Deflection section tba | ||
637 | |||
638 | // Sum velocities | ||
639 | m_lastAngularVelocity = m_angularMotorVelocity + vertattr; // + bank + deflection | ||
640 | |||
641 | if (!m_lastAngularVelocity.ApproxEquals(Vector3.Zero, 0.01f)) | ||
642 | { | 589 | { |
643 | if(!d.BodyIsEnabled (Body)) d.BodyEnable (Body); | 590 | float VAservo = 0.2f / (m_verticalAttractionTimescale * pTimestep); |
644 | } | 591 | // get present body rotation |
645 | else | 592 | d.Quaternion rot = d.BodyGetQuaternion(Body); |
646 | { | 593 | Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W); |
647 | m_lastAngularVelocity = Vector3.Zero; // Reduce small value to zero. | 594 | // make a vector pointing up |
648 | } | 595 | Vector3 verterr = Vector3.Zero; |
649 | 596 | verterr.Z = 1.0f; | |
650 | // apply friction | 597 | // rotate it to Body Angle |
598 | verterr = verterr * rotq; | ||
599 | // verterr.X and .Y are the World error ammounts. They are 0 when there is no error (Vehicle Body is 'vertical'), and .Z will be 1. | ||
600 | // As the body leans to its side |.X| will increase to 1 and .Z fall to 0. As body inverts |.X| will fall and .Z will go | ||
601 | // negative. Similar for tilt and |.Y|. .X and .Y must be modulated to prevent a stable inverted body. | ||
602 | if (verterr.Z < 0.0f) | ||
603 | { | ||
604 | verterr.X = 2.0f - verterr.X; | ||
605 | verterr.Y = 2.0f - verterr.Y; | ||
606 | } | ||
607 | // Error is 0 (no error) to +/- 2 (max error) | ||
608 | // scale it by VAservo | ||
609 | verterr = verterr * VAservo; | ||
610 | //if (frcount == 0) Console.WriteLine("VAerr=" + verterr); | ||
611 | |||
612 | // As the body rotates around the X axis, then verterr.Y increases; Rotated around Y then .X increases, so | ||
613 | // Change Body angular velocity X based on Y, and Y based on X. Z is not changed. | ||
614 | vertattr.X = verterr.Y; | ||
615 | vertattr.Y = - verterr.X; | ||
616 | vertattr.Z = 0f; | ||
617 | |||
618 | // scaling appears better usingsquare-law | ||
619 | float bounce = 1.0f - (m_verticalAttractionEfficiency * m_verticalAttractionEfficiency); | ||
620 | vertattr.X += bounce * angularVelocity.X; | ||
621 | vertattr.Y += bounce * angularVelocity.Y; | ||
622 | |||
623 | } // else vertical attractor is off | ||
624 | |||
625 | // m_lastVertAttractor = vertattr; | ||
626 | |||
627 | // Bank section tba | ||
628 | // Deflection section tba | ||
629 | |||
630 | // Sum velocities | ||
631 | m_lastAngularVelocity = m_angularMotorVelocity + vertattr; // + bank + deflection | ||
632 | |||
633 | if (!m_lastAngularVelocity.ApproxEquals(Vector3.Zero, 0.01f)) | ||
634 | { | ||
635 | if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body); | ||
636 | } | ||
637 | else | ||
638 | { | ||
639 | m_lastAngularVelocity = Vector3.Zero; // Reduce small value to zero. | ||
640 | } | ||
641 | |||
642 | // apply friction | ||
651 | Vector3 decayamount = Vector3.One / (m_angularFrictionTimescale / pTimestep); | 643 | Vector3 decayamount = Vector3.One / (m_angularFrictionTimescale / pTimestep); |
652 | m_lastAngularVelocity -= m_lastAngularVelocity * decayamount; | 644 | m_lastAngularVelocity -= m_lastAngularVelocity * decayamount; |
653 | 645 | ||
654 | // Apply to the body | 646 | // Apply to the body |
655 | d.BodySetAngularVel (Body, m_lastAngularVelocity.X, m_lastAngularVelocity.Y, m_lastAngularVelocity.Z); | 647 | d.BodySetAngularVel (Body, m_lastAngularVelocity.X, m_lastAngularVelocity.Y, m_lastAngularVelocity.Z); |
656 | 648 | ||
657 | } //end MoveAngular | 649 | } //end MoveAngular |
658 | } | 650 | } |
659 | } | 651 | } |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 3eb3b28..973aa84 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | |||
@@ -1,5 +1,7 @@ | |||
1 | /* Copyright (c) Contributors, http://opensimulator.org/ | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
2 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | 3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. |
4 | * | ||
3 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
4 | * modification, are permitted provided that the following conditions are met: | 6 | * modification, are permitted provided that the following conditions are met: |
5 | * * Redistributions of source code must retain the above copyright | 7 | * * Redistributions of source code must retain the above copyright |
@@ -93,7 +95,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
93 | private float m_targetHoverHeight; | 95 | private float m_targetHoverHeight; |
94 | private float m_groundHeight; | 96 | private float m_groundHeight; |
95 | private float m_waterHeight; | 97 | private float m_waterHeight; |
96 | private float m_buoyancy; //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle. | 98 | private float m_buoyancy; //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle. |
97 | 99 | ||
98 | // private float m_tensor = 5f; | 100 | // private float m_tensor = 5f; |
99 | private int body_autodisable_frames = 20; | 101 | private int body_autodisable_frames = 20; |
@@ -294,7 +296,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
294 | m_taintselected = value; | 296 | m_taintselected = value; |
295 | m_isSelected = value; | 297 | m_isSelected = value; |
296 | } | 298 | } |
297 | if(m_isSelected) disableBodySoft(); | 299 | if (m_isSelected) disableBodySoft(); |
298 | } | 300 | } |
299 | } | 301 | } |
300 | 302 | ||
@@ -302,7 +304,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
302 | { | 304 | { |
303 | prev_geom = prim_geom; | 305 | prev_geom = prim_geom; |
304 | prim_geom = geom; | 306 | prim_geom = geom; |
305 | //Console.WriteLine("SetGeom to " + prim_geom + " for " + m_primName); | 307 | //Console.WriteLine("SetGeom to " + prim_geom + " for " + m_primName); |
306 | if (prim_geom != IntPtr.Zero) | 308 | if (prim_geom != IntPtr.Zero) |
307 | { | 309 | { |
308 | d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); | 310 | d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); |
@@ -314,7 +316,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
314 | if (_parent != null && _parent is OdePrim) | 316 | if (_parent != null && _parent is OdePrim) |
315 | { | 317 | { |
316 | OdePrim parent = (OdePrim)_parent; | 318 | OdePrim parent = (OdePrim)_parent; |
317 | //Console.WriteLine("SetGeom calls ChildSetGeom"); | 319 | //Console.WriteLine("SetGeom calls ChildSetGeom"); |
318 | parent.ChildSetGeom(this); | 320 | parent.ChildSetGeom(this); |
319 | } | 321 | } |
320 | } | 322 | } |
@@ -331,7 +333,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
331 | { | 333 | { |
332 | d.BodyEnable(Body); | 334 | d.BodyEnable(Body); |
333 | if (m_vehicle.Type != Vehicle.TYPE_NONE) | 335 | if (m_vehicle.Type != Vehicle.TYPE_NONE) |
334 | m_vehicle.Enable(Body, _parent_scene); | 336 | m_vehicle.Enable(Body, _parent_scene); |
335 | } | 337 | } |
336 | 338 | ||
337 | m_disabled = false; | 339 | m_disabled = false; |
@@ -376,7 +378,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
376 | d.BodySetAutoDisableSteps(Body, body_autodisable_frames); | 378 | d.BodySetAutoDisableSteps(Body, body_autodisable_frames); |
377 | 379 | ||
378 | // disconnect from world gravity so we can apply buoyancy | 380 | // disconnect from world gravity so we can apply buoyancy |
379 | d.BodySetGravityMode (Body, false); | 381 | d.BodySetGravityMode (Body, false); |
380 | 382 | ||
381 | m_interpenetrationcount = 0; | 383 | m_interpenetrationcount = 0; |
382 | m_collisionscore = 0; | 384 | m_collisionscore = 0; |
@@ -872,7 +874,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
872 | 874 | ||
873 | public void ProcessTaints(float timestep) | 875 | public void ProcessTaints(float timestep) |
874 | { | 876 | { |
875 | //Console.WriteLine("ProcessTaints for " + m_primName ); | 877 | //Console.WriteLine("ProcessTaints for " + m_primName); |
876 | if (m_taintadd) | 878 | if (m_taintadd) |
877 | { | 879 | { |
878 | changeadd(timestep); | 880 | changeadd(timestep); |
@@ -880,24 +882,24 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
880 | 882 | ||
881 | if (prim_geom != IntPtr.Zero) | 883 | if (prim_geom != IntPtr.Zero) |
882 | { | 884 | { |
883 | if (!_position.ApproxEquals(m_taintposition, 0f)) | 885 | if (!_position.ApproxEquals(m_taintposition, 0f)) |
884 | changemove(timestep); | 886 | changemove(timestep); |
885 | 887 | ||
886 | if (m_taintrot != _orientation) | 888 | if (m_taintrot != _orientation) |
887 | { | 889 | { |
888 | if(childPrim && IsPhysical) // For physical child prim... | 890 | if (childPrim && IsPhysical) // For physical child prim... |
889 | { | 891 | { |
890 | rotate(timestep); | 892 | rotate(timestep); |
891 | // KF: ODE will also rotate the parent prim! | 893 | // KF: ODE will also rotate the parent prim! |
892 | // so rotate the root back to where it was | 894 | // so rotate the root back to where it was |
893 | OdePrim parent = (OdePrim)_parent; | 895 | OdePrim parent = (OdePrim)_parent; |
894 | parent.rotate(timestep); | 896 | parent.rotate(timestep); |
895 | } | 897 | } |
896 | else | 898 | else |
897 | { | 899 | { |
898 | //Just rotate the prim | 900 | //Just rotate the prim |
899 | rotate(timestep); | 901 | rotate(timestep); |
900 | } | 902 | } |
901 | } | 903 | } |
902 | // | 904 | // |
903 | 905 | ||
@@ -1006,7 +1008,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1006 | // destroy link | 1008 | // destroy link |
1007 | else if (_parent != null && m_taintparent == null) | 1009 | else if (_parent != null && m_taintparent == null) |
1008 | { | 1010 | { |
1009 | //Console.WriteLine(" changelink B"); | 1011 | //Console.WriteLine(" changelink B"); |
1010 | 1012 | ||
1011 | if (_parent is OdePrim) | 1013 | if (_parent is OdePrim) |
1012 | { | 1014 | { |
@@ -1033,7 +1035,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1033 | // prim is the child | 1035 | // prim is the child |
1034 | public void ParentPrim(OdePrim prim) | 1036 | public void ParentPrim(OdePrim prim) |
1035 | { | 1037 | { |
1036 | //Console.WriteLine("ParentPrim " + m_primName); | 1038 | //Console.WriteLine("ParentPrim " + m_primName); |
1037 | if (this.m_localID != prim.m_localID) | 1039 | if (this.m_localID != prim.m_localID) |
1038 | { | 1040 | { |
1039 | if (Body == IntPtr.Zero) | 1041 | if (Body == IntPtr.Zero) |
@@ -1047,7 +1049,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1047 | { | 1049 | { |
1048 | if (!childrenPrim.Contains(prim)) | 1050 | if (!childrenPrim.Contains(prim)) |
1049 | { | 1051 | { |
1050 | //Console.WriteLine("childrenPrim.Add " + prim); | 1052 | //Console.WriteLine("childrenPrim.Add " + prim); |
1051 | childrenPrim.Add(prim); | 1053 | childrenPrim.Add(prim); |
1052 | 1054 | ||
1053 | foreach (OdePrim prm in childrenPrim) | 1055 | foreach (OdePrim prm in childrenPrim) |
@@ -1080,7 +1082,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1080 | m_log.Warn("[PHYSICS]: Unable to link one of the linkset elements. No geom yet"); | 1082 | m_log.Warn("[PHYSICS]: Unable to link one of the linkset elements. No geom yet"); |
1081 | continue; | 1083 | continue; |
1082 | } | 1084 | } |
1083 | //Console.WriteLine(" GeomSetCategoryBits 1: " + prm.prim_geom + " - " + (int)prm.m_collisionCategories + " for " + m_primName); | 1085 | //Console.WriteLine(" GeomSetCategoryBits 1: " + prm.prim_geom + " - " + (int)prm.m_collisionCategories + " for " + m_primName); |
1084 | d.GeomSetCategoryBits(prm.prim_geom, (int)prm.m_collisionCategories); | 1086 | d.GeomSetCategoryBits(prm.prim_geom, (int)prm.m_collisionCategories); |
1085 | d.GeomSetCollideBits(prm.prim_geom, (int)prm.m_collisionFlags); | 1087 | d.GeomSetCollideBits(prm.prim_geom, (int)prm.m_collisionFlags); |
1086 | 1088 | ||
@@ -1128,7 +1130,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1128 | m_collisionCategories |= CollisionCategories.Body; | 1130 | m_collisionCategories |= CollisionCategories.Body; |
1129 | m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind); | 1131 | m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind); |
1130 | 1132 | ||
1131 | //Console.WriteLine("GeomSetCategoryBits 2: " + prim_geom + " - " + (int)m_collisionCategories + " for " + m_primName); | 1133 | //Console.WriteLine("GeomSetCategoryBits 2: " + prim_geom + " - " + (int)m_collisionCategories + " for " + m_primName); |
1132 | d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); | 1134 | d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); |
1133 | //Console.WriteLine(" Post GeomSetCategoryBits 2"); | 1135 | //Console.WriteLine(" Post GeomSetCategoryBits 2"); |
1134 | d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); | 1136 | d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); |
@@ -1203,7 +1205,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1203 | { | 1205 | { |
1204 | foreach (OdePrim prm in childrenPrim) | 1206 | foreach (OdePrim prm in childrenPrim) |
1205 | { | 1207 | { |
1206 | //Console.WriteLine("ChildSetGeom calls ParentPrim"); | 1208 | //Console.WriteLine("ChildSetGeom calls ParentPrim"); |
1207 | ParentPrim(prm); | 1209 | ParentPrim(prm); |
1208 | } | 1210 | } |
1209 | } | 1211 | } |
@@ -1230,7 +1232,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1230 | 1232 | ||
1231 | lock (childrenPrim) | 1233 | lock (childrenPrim) |
1232 | { | 1234 | { |
1233 | //Console.WriteLine("childrenPrim.Remove " + odePrim); | 1235 | //Console.WriteLine("childrenPrim.Remove " + odePrim); |
1234 | childrenPrim.Remove(odePrim); | 1236 | childrenPrim.Remove(odePrim); |
1235 | } | 1237 | } |
1236 | 1238 | ||
@@ -1248,7 +1250,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1248 | { | 1250 | { |
1249 | foreach (OdePrim prm in childrenPrim) | 1251 | foreach (OdePrim prm in childrenPrim) |
1250 | { | 1252 | { |
1251 | //Console.WriteLine("ChildDelink calls ParentPrim"); | 1253 | //Console.WriteLine("ChildDelink calls ParentPrim"); |
1252 | ParentPrim(prm); | 1254 | ParentPrim(prm); |
1253 | } | 1255 | } |
1254 | } | 1256 | } |
@@ -1350,7 +1352,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1350 | 1352 | ||
1351 | public void CreateGeom(IntPtr m_targetSpace, IMesh _mesh) | 1353 | public void CreateGeom(IntPtr m_targetSpace, IMesh _mesh) |
1352 | { | 1354 | { |
1353 | //Console.WriteLine("CreateGeom:"); | 1355 | //Console.WriteLine("CreateGeom:"); |
1354 | if (_mesh != null) | 1356 | if (_mesh != null) |
1355 | { | 1357 | { |
1356 | setMesh(_parent_scene, _mesh); | 1358 | setMesh(_parent_scene, _mesh); |
@@ -1381,7 +1383,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1381 | _parent_scene.waitForSpaceUnlock(m_targetSpace); | 1383 | _parent_scene.waitForSpaceUnlock(m_targetSpace); |
1382 | try | 1384 | try |
1383 | { | 1385 | { |
1384 | //Console.WriteLine(" CreateGeom 2"); | 1386 | //Console.WriteLine(" CreateGeom 2"); |
1385 | SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); | 1387 | SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); |
1386 | } | 1388 | } |
1387 | catch (AccessViolationException) | 1389 | catch (AccessViolationException) |
@@ -1397,7 +1399,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1397 | _parent_scene.waitForSpaceUnlock(m_targetSpace); | 1399 | _parent_scene.waitForSpaceUnlock(m_targetSpace); |
1398 | try | 1400 | try |
1399 | { | 1401 | { |
1400 | //Console.WriteLine(" CreateGeom 3"); | 1402 | //Console.WriteLine(" CreateGeom 3"); |
1401 | SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); | 1403 | SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); |
1402 | } | 1404 | } |
1403 | catch (AccessViolationException) | 1405 | catch (AccessViolationException) |
@@ -1414,7 +1416,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1414 | _parent_scene.waitForSpaceUnlock(m_targetSpace); | 1416 | _parent_scene.waitForSpaceUnlock(m_targetSpace); |
1415 | try | 1417 | try |
1416 | { | 1418 | { |
1417 | //Console.WriteLine(" CreateGeom 4"); | 1419 | //Console.WriteLine(" CreateGeom 4"); |
1418 | SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); | 1420 | SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); |
1419 | } | 1421 | } |
1420 | catch (AccessViolationException) | 1422 | catch (AccessViolationException) |
@@ -1451,7 +1453,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1451 | 1453 | ||
1452 | lock (_parent_scene.OdeLock) | 1454 | lock (_parent_scene.OdeLock) |
1453 | { | 1455 | { |
1454 | //Console.WriteLine("changeadd 1"); | 1456 | //Console.WriteLine("changeadd 1"); |
1455 | CreateGeom(m_targetSpace, _mesh); | 1457 | CreateGeom(m_targetSpace, _mesh); |
1456 | 1458 | ||
1457 | if (prim_geom != IntPtr.Zero) | 1459 | if (prim_geom != IntPtr.Zero) |
@@ -1508,7 +1510,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1508 | if (Body != (IntPtr)0 && odParent.Body != (IntPtr)0 && Body != odParent.Body) | 1510 | if (Body != (IntPtr)0 && odParent.Body != (IntPtr)0 && Body != odParent.Body) |
1509 | { | 1511 | { |
1510 | // KF: Fixed Joints were removed? Anyway - this Console.WriteLine does not show up, so routine is not used?? | 1512 | // KF: Fixed Joints were removed? Anyway - this Console.WriteLine does not show up, so routine is not used?? |
1511 | Console.WriteLine(" JointCreateFixed"); | 1513 | Console.WriteLine(" JointCreateFixed"); |
1512 | m_linkJoint = d.JointCreateFixed(_parent_scene.world, _linkJointGroup); | 1514 | m_linkJoint = d.JointCreateFixed(_parent_scene.world, _linkJointGroup); |
1513 | d.JointAttach(m_linkJoint, Body, odParent.Body); | 1515 | d.JointAttach(m_linkJoint, Body, odParent.Body); |
1514 | d.JointSetFixed(m_linkJoint); | 1516 | d.JointSetFixed(m_linkJoint); |
@@ -1562,244 +1564,244 @@ Console.WriteLine(" JointCreateFixed"); | |||
1562 | float fz = 0; | 1564 | float fz = 0; |
1563 | 1565 | ||
1564 | 1566 | ||
1565 | if (IsPhysical && (Body != IntPtr.Zero) && !m_isSelected && !childPrim) // KF: Only move root prims. | 1567 | if (IsPhysical && (Body != IntPtr.Zero) && !m_isSelected && !childPrim) // KF: Only move root prims. |
1566 | { | 1568 | { |
1567 | if (m_vehicle.Type != Vehicle.TYPE_NONE) | 1569 | if (m_vehicle.Type != Vehicle.TYPE_NONE) |
1568 | { | 1570 | { |
1569 | // 'VEHICLES' are dealt with in ODEDynamics.cs | 1571 | // 'VEHICLES' are dealt with in ODEDynamics.cs |
1570 | m_vehicle.Step(timestep, _parent_scene); | 1572 | m_vehicle.Step(timestep, _parent_scene); |
1571 | } | 1573 | } |
1572 | else | 1574 | else |
1573 | { | 1575 | { |
1574 | //Console.WriteLine("Move " + m_primName); | 1576 | //Console.WriteLine("Move " + m_primName); |
1575 | if(!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009 | 1577 | if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009 |
1576 | // NON-'VEHICLES' are dealt with here | 1578 | // NON-'VEHICLES' are dealt with here |
1577 | if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f)) | 1579 | if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f)) |
1578 | { | 1580 | { |
1579 | d.Vector3 avel2 = d.BodyGetAngularVel(Body); | 1581 | d.Vector3 avel2 = d.BodyGetAngularVel(Body); |
1580 | if (m_angularlock.X == 1) | 1582 | if (m_angularlock.X == 1) |
1581 | avel2.X = 0; | 1583 | avel2.X = 0; |
1582 | if (m_angularlock.Y == 1) | 1584 | if (m_angularlock.Y == 1) |
1583 | avel2.Y = 0; | 1585 | avel2.Y = 0; |
1584 | if (m_angularlock.Z == 1) | 1586 | if (m_angularlock.Z == 1) |
1585 | avel2.Z = 0; | 1587 | avel2.Z = 0; |
1586 | d.BodySetAngularVel(Body, avel2.X, avel2.Y, avel2.Z); | 1588 | d.BodySetAngularVel(Body, avel2.X, avel2.Y, avel2.Z); |
1587 | } | 1589 | } |
1588 | //float PID_P = 900.0f; | 1590 | //float PID_P = 900.0f; |
1589 | 1591 | ||
1590 | float m_mass = CalculateMass(); | 1592 | float m_mass = CalculateMass(); |
1591 | 1593 | ||
1592 | // fz = 0f; | 1594 | // fz = 0f; |
1593 | //m_log.Info(m_collisionFlags.ToString()); | 1595 | //m_log.Info(m_collisionFlags.ToString()); |
1594 | 1596 | ||
1595 | 1597 | ||
1596 | //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle. | 1598 | //KF: m_buoyancy should be set by llSetBuoyancy() for non-vehicle. |
1597 | // would come from SceneObjectPart.cs, public void SetBuoyancy(float fvalue) , PhysActor.Buoyancy = fvalue; ?? | 1599 | // would come from SceneObjectPart.cs, public void SetBuoyancy(float fvalue) , PhysActor.Buoyancy = fvalue; ?? |
1598 | // m_buoyancy: (unlimited value) <0=Falls fast; 0=1g; 1=0g; >1 = floats up | 1600 | // m_buoyancy: (unlimited value) <0=Falls fast; 0=1g; 1=0g; >1 = floats up |
1599 | // gravityz multiplier = 1 - m_buoyancy | 1601 | // gravityz multiplier = 1 - m_buoyancy |
1600 | fz = _parent_scene.gravityz * (1.0f - m_buoyancy) * m_mass; | 1602 | fz = _parent_scene.gravityz * (1.0f - m_buoyancy) * m_mass; |
1601 | 1603 | ||
1602 | if (m_usePID) | 1604 | if (m_usePID) |
1603 | { | 1605 | { |
1604 | //Console.WriteLine("PID " + m_primName); | 1606 | //Console.WriteLine("PID " + m_primName); |
1605 | // KF - this is for object move? eg. llSetPos() ? | 1607 | // KF - this is for object move? eg. llSetPos() ? |
1606 | //if (!d.BodyIsEnabled(Body)) | 1608 | //if (!d.BodyIsEnabled(Body)) |
1607 | //d.BodySetForce(Body, 0f, 0f, 0f); | 1609 | //d.BodySetForce(Body, 0f, 0f, 0f); |
1608 | // If we're using the PID controller, then we have no gravity | 1610 | // If we're using the PID controller, then we have no gravity |
1609 | //fz = (-1 * _parent_scene.gravityz) * m_mass; //KF: ?? Prims have no global gravity,so simply... | 1611 | //fz = (-1 * _parent_scene.gravityz) * m_mass; //KF: ?? Prims have no global gravity,so simply... |
1610 | fz = 0f; | 1612 | fz = 0f; |
1611 | 1613 | ||
1612 | // no lock; for now it's only called from within Simulate() | 1614 | // no lock; for now it's only called from within Simulate() |
1613 | 1615 | ||
1614 | // If the PID Controller isn't active then we set our force | 1616 | // If the PID Controller isn't active then we set our force |
1615 | // calculating base velocity to the current position | 1617 | // calculating base velocity to the current position |
1616 | 1618 | ||
1617 | if ((m_PIDTau < 1) && (m_PIDTau != 0)) | 1619 | if ((m_PIDTau < 1) && (m_PIDTau != 0)) |
1618 | { | 1620 | { |
1619 | //PID_G = PID_G / m_PIDTau; | 1621 | //PID_G = PID_G / m_PIDTau; |
1620 | m_PIDTau = 1; | 1622 | m_PIDTau = 1; |
1621 | } | 1623 | } |
1622 | 1624 | ||
1623 | if ((PID_G - m_PIDTau) <= 0) | 1625 | if ((PID_G - m_PIDTau) <= 0) |
1624 | { | 1626 | { |
1625 | PID_G = m_PIDTau + 1; | 1627 | PID_G = m_PIDTau + 1; |
1626 | } | 1628 | } |
1627 | //PidStatus = true; | 1629 | //PidStatus = true; |
1628 | 1630 | ||
1629 | // PhysicsVector vec = new PhysicsVector(); | 1631 | // PhysicsVector vec = new PhysicsVector(); |
1630 | d.Vector3 vel = d.BodyGetLinearVel(Body); | 1632 | d.Vector3 vel = d.BodyGetLinearVel(Body); |
1631 | 1633 | ||
1632 | d.Vector3 pos = d.BodyGetPosition(Body); | 1634 | d.Vector3 pos = d.BodyGetPosition(Body); |
1633 | _target_velocity = | 1635 | _target_velocity = |
1634 | new Vector3( | 1636 | new Vector3( |
1635 | (m_PIDTarget.X - pos.X) * ((PID_G - m_PIDTau) * timestep), | 1637 | (m_PIDTarget.X - pos.X) * ((PID_G - m_PIDTau) * timestep), |
1636 | (m_PIDTarget.Y - pos.Y) * ((PID_G - m_PIDTau) * timestep), | 1638 | (m_PIDTarget.Y - pos.Y) * ((PID_G - m_PIDTau) * timestep), |
1637 | (m_PIDTarget.Z - pos.Z) * ((PID_G - m_PIDTau) * timestep) | 1639 | (m_PIDTarget.Z - pos.Z) * ((PID_G - m_PIDTau) * timestep) |
1638 | ); | 1640 | ); |
1639 | 1641 | ||
1640 | // if velocity is zero, use position control; otherwise, velocity control | 1642 | // if velocity is zero, use position control; otherwise, velocity control |
1641 | 1643 | ||
1642 | if (_target_velocity.ApproxEquals(Vector3.Zero,0.1f)) | 1644 | if (_target_velocity.ApproxEquals(Vector3.Zero,0.1f)) |
1643 | { | 1645 | { |
1644 | // keep track of where we stopped. No more slippin' & slidin' | 1646 | // keep track of where we stopped. No more slippin' & slidin' |
1645 | 1647 | ||
1646 | // We only want to deactivate the PID Controller if we think we want to have our surrogate | 1648 | // We only want to deactivate the PID Controller if we think we want to have our surrogate |
1647 | // react to the physics scene by moving it's position. | 1649 | // react to the physics scene by moving it's position. |
1648 | // Avatar to Avatar collisions | 1650 | // Avatar to Avatar collisions |
1649 | // Prim to avatar collisions | 1651 | // Prim to avatar collisions |
1650 | 1652 | ||
1651 | //fx = (_target_velocity.X - vel.X) * (PID_D) + (_zeroPosition.X - pos.X) * (PID_P * 2); | 1653 | //fx = (_target_velocity.X - vel.X) * (PID_D) + (_zeroPosition.X - pos.X) * (PID_P * 2); |
1652 | //fy = (_target_velocity.Y - vel.Y) * (PID_D) + (_zeroPosition.Y - pos.Y) * (PID_P * 2); | 1654 | //fy = (_target_velocity.Y - vel.Y) * (PID_D) + (_zeroPosition.Y - pos.Y) * (PID_P * 2); |
1653 | //fz = fz + (_target_velocity.Z - vel.Z) * (PID_D) + (_zeroPosition.Z - pos.Z) * PID_P; | 1655 | //fz = fz + (_target_velocity.Z - vel.Z) * (PID_D) + (_zeroPosition.Z - pos.Z) * PID_P; |
1654 | d.BodySetPosition(Body, m_PIDTarget.X, m_PIDTarget.Y, m_PIDTarget.Z); | 1656 | d.BodySetPosition(Body, m_PIDTarget.X, m_PIDTarget.Y, m_PIDTarget.Z); |
1655 | d.BodySetLinearVel(Body, 0, 0, 0); | 1657 | d.BodySetLinearVel(Body, 0, 0, 0); |
1656 | d.BodyAddForce(Body, 0, 0, fz); | 1658 | d.BodyAddForce(Body, 0, 0, fz); |
1657 | return; | 1659 | return; |
1658 | } | 1660 | } |
1659 | else | 1661 | else |
1660 | { | 1662 | { |
1661 | _zeroFlag = false; | 1663 | _zeroFlag = false; |
1662 | 1664 | ||
1663 | // We're flying and colliding with something | 1665 | // We're flying and colliding with something |
1664 | fx = ((_target_velocity.X) - vel.X) * (PID_D); | 1666 | fx = ((_target_velocity.X) - vel.X) * (PID_D); |
1665 | fy = ((_target_velocity.Y) - vel.Y) * (PID_D); | 1667 | fy = ((_target_velocity.Y) - vel.Y) * (PID_D); |
1666 | 1668 | ||
1667 | // vec.Z = (_target_velocity.Z - vel.Z) * PID_D + (_zeroPosition.Z - pos.Z) * PID_P; | 1669 | // vec.Z = (_target_velocity.Z - vel.Z) * PID_D + (_zeroPosition.Z - pos.Z) * PID_P; |
1668 | 1670 | ||
1669 | fz = fz + ((_target_velocity.Z - vel.Z) * (PID_D) * m_mass); | 1671 | fz = fz + ((_target_velocity.Z - vel.Z) * (PID_D) * m_mass); |
1670 | } | 1672 | } |
1671 | } // end if (m_usePID) | 1673 | } // end if (m_usePID) |
1672 | 1674 | ||
1673 | // Hover PID Controller needs to be mutually exlusive to MoveTo PID controller | 1675 | // Hover PID Controller needs to be mutually exlusive to MoveTo PID controller |
1674 | if (m_useHoverPID && !m_usePID) | 1676 | if (m_useHoverPID && !m_usePID) |
1675 | { | 1677 | { |
1676 | //Console.WriteLine("Hover " + m_primName); | 1678 | //Console.WriteLine("Hover " + m_primName); |
1677 | |||
1678 | // If we're using the PID controller, then we have no gravity | ||
1679 | fz = (-1 * _parent_scene.gravityz) * m_mass; | ||
1680 | |||
1681 | // no lock; for now it's only called from within Simulate() | ||
1682 | |||
1683 | // If the PID Controller isn't active then we set our force | ||
1684 | // calculating base velocity to the current position | ||
1685 | |||
1686 | if ((m_PIDTau < 1)) | ||
1687 | { | ||
1688 | PID_G = PID_G / m_PIDTau; | ||
1689 | } | ||
1690 | |||
1691 | if ((PID_G - m_PIDTau) <= 0) | ||
1692 | { | ||
1693 | PID_G = m_PIDTau + 1; | ||
1694 | } | ||
1695 | 1679 | ||
1680 | // If we're using the PID controller, then we have no gravity | ||
1681 | fz = (-1 * _parent_scene.gravityz) * m_mass; | ||
1682 | |||
1683 | // no lock; for now it's only called from within Simulate() | ||
1696 | 1684 | ||
1697 | // Where are we, and where are we headed? | 1685 | // If the PID Controller isn't active then we set our force |
1698 | d.Vector3 pos = d.BodyGetPosition(Body); | 1686 | // calculating base velocity to the current position |
1699 | d.Vector3 vel = d.BodyGetLinearVel(Body); | 1687 | |
1700 | 1688 | if ((m_PIDTau < 1)) | |
1701 | 1689 | { | |
1702 | // Non-Vehicles have a limited set of Hover options. | 1690 | PID_G = PID_G / m_PIDTau; |
1703 | // determine what our target height really is based on HoverType | 1691 | } |
1704 | switch (m_PIDHoverType) | 1692 | |
1705 | { | 1693 | if ((PID_G - m_PIDTau) <= 0) |
1706 | case PIDHoverType.Ground: | 1694 | { |
1707 | m_groundHeight = _parent_scene.GetTerrainHeightAtXY(pos.X, pos.Y); | 1695 | PID_G = m_PIDTau + 1; |
1708 | m_targetHoverHeight = m_groundHeight + m_PIDHoverHeight; | 1696 | } |
1709 | break; | 1697 | |
1710 | case PIDHoverType.GroundAndWater: | 1698 | |
1711 | m_groundHeight = _parent_scene.GetTerrainHeightAtXY(pos.X, pos.Y); | 1699 | // Where are we, and where are we headed? |
1712 | m_waterHeight = _parent_scene.GetWaterLevel(); | 1700 | d.Vector3 pos = d.BodyGetPosition(Body); |
1713 | if (m_groundHeight > m_waterHeight) | 1701 | d.Vector3 vel = d.BodyGetLinearVel(Body); |
1714 | { | 1702 | |
1715 | m_targetHoverHeight = m_groundHeight + m_PIDHoverHeight; | 1703 | |
1716 | } | 1704 | // Non-Vehicles have a limited set of Hover options. |
1717 | else | 1705 | // determine what our target height really is based on HoverType |
1718 | { | 1706 | switch (m_PIDHoverType) |
1719 | m_targetHoverHeight = m_waterHeight + m_PIDHoverHeight; | 1707 | { |
1720 | } | 1708 | case PIDHoverType.Ground: |
1721 | break; | 1709 | m_groundHeight = _parent_scene.GetTerrainHeightAtXY(pos.X, pos.Y); |
1722 | 1710 | m_targetHoverHeight = m_groundHeight + m_PIDHoverHeight; | |
1723 | } // end switch (m_PIDHoverType) | 1711 | break; |
1724 | 1712 | case PIDHoverType.GroundAndWater: | |
1725 | 1713 | m_groundHeight = _parent_scene.GetTerrainHeightAtXY(pos.X, pos.Y); | |
1726 | _target_velocity = | 1714 | m_waterHeight = _parent_scene.GetWaterLevel(); |
1715 | if (m_groundHeight > m_waterHeight) | ||
1716 | { | ||
1717 | m_targetHoverHeight = m_groundHeight + m_PIDHoverHeight; | ||
1718 | } | ||
1719 | else | ||
1720 | { | ||
1721 | m_targetHoverHeight = m_waterHeight + m_PIDHoverHeight; | ||
1722 | } | ||
1723 | break; | ||
1724 | |||
1725 | } // end switch (m_PIDHoverType) | ||
1726 | |||
1727 | |||
1728 | _target_velocity = | ||
1727 | new Vector3(0.0f, 0.0f, | 1729 | new Vector3(0.0f, 0.0f, |
1728 | (m_targetHoverHeight - pos.Z) * ((PID_G - m_PIDHoverTau) * timestep) | 1730 | (m_targetHoverHeight - pos.Z) * ((PID_G - m_PIDHoverTau) * timestep) |
1729 | ); | 1731 | ); |
1730 | 1732 | ||
1731 | // if velocity is zero, use position control; otherwise, velocity control | 1733 | // if velocity is zero, use position control; otherwise, velocity control |
1732 | 1734 | ||
1733 | if (_target_velocity.ApproxEquals(Vector3.Zero, 0.1f)) | 1735 | if (_target_velocity.ApproxEquals(Vector3.Zero, 0.1f)) |
1734 | { | 1736 | { |
1735 | // keep track of where we stopped. No more slippin' & slidin' | 1737 | // keep track of where we stopped. No more slippin' & slidin' |
1736 | 1738 | ||
1737 | // We only want to deactivate the PID Controller if we think we want to have our surrogate | 1739 | // We only want to deactivate the PID Controller if we think we want to have our surrogate |
1738 | // react to the physics scene by moving it's position. | 1740 | // react to the physics scene by moving it's position. |
1739 | // Avatar to Avatar collisions | 1741 | // Avatar to Avatar collisions |
1740 | // Prim to avatar collisions | 1742 | // Prim to avatar collisions |
1741 | 1743 | ||
1742 | d.BodySetPosition(Body, pos.X, pos.Y, m_targetHoverHeight); | 1744 | d.BodySetPosition(Body, pos.X, pos.Y, m_targetHoverHeight); |
1743 | d.BodySetLinearVel(Body, vel.X, vel.Y, 0); | 1745 | d.BodySetLinearVel(Body, vel.X, vel.Y, 0); |
1744 | d.BodyAddForce(Body, 0, 0, fz); | 1746 | d.BodyAddForce(Body, 0, 0, fz); |
1745 | return; | 1747 | return; |
1746 | } | 1748 | } |
1747 | else | 1749 | else |
1748 | { | 1750 | { |
1749 | _zeroFlag = false; | 1751 | _zeroFlag = false; |
1750 | 1752 | ||
1751 | // We're flying and colliding with something | 1753 | // We're flying and colliding with something |
1752 | fz = fz + ((_target_velocity.Z - vel.Z) * (PID_D) * m_mass); | 1754 | fz = fz + ((_target_velocity.Z - vel.Z) * (PID_D) * m_mass); |
1753 | } | 1755 | } |
1754 | } | 1756 | } |
1755 | 1757 | ||
1756 | fx *= m_mass; | 1758 | fx *= m_mass; |
1757 | fy *= m_mass; | 1759 | fy *= m_mass; |
1758 | //fz *= m_mass; | 1760 | //fz *= m_mass; |
1759 | 1761 | ||
1760 | fx += m_force.X; | 1762 | fx += m_force.X; |
1761 | fy += m_force.Y; | 1763 | fy += m_force.Y; |
1762 | fz += m_force.Z; | 1764 | fz += m_force.Z; |
1763 | 1765 | ||
1764 | //m_log.Info("[OBJPID]: X:" + fx.ToString() + " Y:" + fy.ToString() + " Z:" + fz.ToString()); | 1766 | //m_log.Info("[OBJPID]: X:" + fx.ToString() + " Y:" + fy.ToString() + " Z:" + fz.ToString()); |
1765 | if (fx != 0 || fy != 0 || fz != 0) | 1767 | if (fx != 0 || fy != 0 || fz != 0) |
1766 | { | 1768 | { |
1767 | //m_taintdisable = true; | 1769 | //m_taintdisable = true; |
1768 | //base.RaiseOutOfBounds(Position); | 1770 | //base.RaiseOutOfBounds(Position); |
1769 | //d.BodySetLinearVel(Body, fx, fy, 0f); | 1771 | //d.BodySetLinearVel(Body, fx, fy, 0f); |
1770 | if (!d.BodyIsEnabled(Body)) | 1772 | if (!d.BodyIsEnabled(Body)) |
1771 | { | 1773 | { |
1772 | // A physical body at rest on a surface will auto-disable after a while, | 1774 | // A physical body at rest on a surface will auto-disable after a while, |
1773 | // this appears to re-enable it incase the surface it is upon vanishes, | 1775 | // this appears to re-enable it incase the surface it is upon vanishes, |
1774 | // and the body should fall again. | 1776 | // and the body should fall again. |
1775 | d.BodySetLinearVel(Body, 0f, 0f, 0f); | 1777 | d.BodySetLinearVel(Body, 0f, 0f, 0f); |
1776 | d.BodySetForce(Body, 0, 0, 0); | 1778 | d.BodySetForce(Body, 0, 0, 0); |
1777 | enableBodySoft(); | 1779 | enableBodySoft(); |
1778 | } | 1780 | } |
1779 | 1781 | ||
1780 | // 35x10 = 350n times the mass per second applied maximum. | 1782 | // 35x10 = 350n times the mass per second applied maximum. |
1781 | float nmax = 35f * m_mass; | 1783 | float nmax = 35f * m_mass; |
1782 | float nmin = -35f * m_mass; | 1784 | float nmin = -35f * m_mass; |
1783 | 1785 | ||
1784 | 1786 | ||
1785 | if (fx > nmax) | 1787 | if (fx > nmax) |
1786 | fx = nmax; | 1788 | fx = nmax; |
1787 | if (fx < nmin) | 1789 | if (fx < nmin) |
1788 | fx = nmin; | 1790 | fx = nmin; |
1789 | if (fy > nmax) | 1791 | if (fy > nmax) |
1790 | fy = nmax; | 1792 | fy = nmax; |
1791 | if (fy < nmin) | 1793 | if (fy < nmin) |
1792 | fy = nmin; | 1794 | fy = nmin; |
1793 | d.BodyAddForce(Body, fx, fy, fz); | 1795 | d.BodyAddForce(Body, fx, fy, fz); |
1794 | //Console.WriteLine("AddForce " + fx + "," + fy + "," + fz); | 1796 | //Console.WriteLine("AddForce " + fx + "," + fy + "," + fz); |
1795 | } | 1797 | } |
1796 | } | 1798 | } |
1797 | } | 1799 | } |
1798 | else | 1800 | else |
1799 | { // is not physical, or is not a body or is selected | 1801 | { // is not physical, or is not a body or is selected |
1800 | // _zeroPosition = d.BodyGetPosition(Body); | 1802 | // _zeroPosition = d.BodyGetPosition(Body); |
1801 | return; | 1803 | return; |
1802 | //Console.WriteLine("Nothing " + m_primName); | 1804 | //Console.WriteLine("Nothing " + m_primName); |
1803 | 1805 | ||
1804 | } | 1806 | } |
1805 | } | 1807 | } |
@@ -1815,18 +1817,18 @@ Console.WriteLine(" JointCreateFixed"); | |||
1815 | myrot.W = _orientation.W; | 1817 | myrot.W = _orientation.W; |
1816 | if (Body != IntPtr.Zero) | 1818 | if (Body != IntPtr.Zero) |
1817 | { | 1819 | { |
1818 | // KF: If this is a root prim do BodySet | 1820 | // KF: If this is a root prim do BodySet |
1819 | d.BodySetQuaternion(Body, ref myrot); | 1821 | d.BodySetQuaternion(Body, ref myrot); |
1820 | if (m_isphysical) | 1822 | if (m_isphysical) |
1821 | { | 1823 | { |
1822 | if (!m_angularlock.ApproxEquals(Vector3.One, 0f)) | 1824 | if (!m_angularlock.ApproxEquals(Vector3.One, 0f)) |
1823 | createAMotor(m_angularlock); | 1825 | createAMotor(m_angularlock); |
1824 | } | 1826 | } |
1825 | } | 1827 | } |
1826 | else | 1828 | else |
1827 | { | 1829 | { |
1828 | // daughter prim, do Geom set | 1830 | // daughter prim, do Geom set |
1829 | d.GeomSetQuaternion(prim_geom, ref myrot); | 1831 | d.GeomSetQuaternion(prim_geom, ref myrot); |
1830 | } | 1832 | } |
1831 | 1833 | ||
1832 | resetCollisionAccounting(); | 1834 | resetCollisionAccounting(); |
@@ -1890,7 +1892,7 @@ Console.WriteLine(" JointCreateFixed"); | |||
1890 | m_log.Error("[PHYSICS]: PrimGeom dead"); | 1892 | m_log.Error("[PHYSICS]: PrimGeom dead"); |
1891 | } | 1893 | } |
1892 | } | 1894 | } |
1893 | //Console.WriteLine("changePhysicsStatus for " + m_primName ); | 1895 | //Console.WriteLine("changePhysicsStatus for " + m_primName); |
1894 | changeadd(2f); | 1896 | changeadd(2f); |
1895 | } | 1897 | } |
1896 | if (childPrim) | 1898 | if (childPrim) |
@@ -1976,7 +1978,7 @@ Console.WriteLine(" JointCreateFixed"); | |||
1976 | else | 1978 | else |
1977 | { | 1979 | { |
1978 | _mesh = null; | 1980 | _mesh = null; |
1979 | //Console.WriteLine("changesize 2"); | 1981 | //Console.WriteLine("changesize 2"); |
1980 | CreateGeom(m_targetSpace, _mesh); | 1982 | CreateGeom(m_targetSpace, _mesh); |
1981 | } | 1983 | } |
1982 | 1984 | ||
@@ -2083,7 +2085,7 @@ Console.WriteLine(" JointCreateFixed"); | |||
2083 | else | 2085 | else |
2084 | { | 2086 | { |
2085 | _mesh = null; | 2087 | _mesh = null; |
2086 | //Console.WriteLine("changeshape"); | 2088 | //Console.WriteLine("changeshape"); |
2087 | CreateGeom(m_targetSpace, null); | 2089 | CreateGeom(m_targetSpace, null); |
2088 | } | 2090 | } |
2089 | 2091 | ||
@@ -2454,7 +2456,7 @@ Console.WriteLine(" JointCreateFixed"); | |||
2454 | if (QuaternionIsFinite(value)) | 2456 | if (QuaternionIsFinite(value)) |
2455 | { | 2457 | { |
2456 | _orientation = value; | 2458 | _orientation = value; |
2457 | } | 2459 | } |
2458 | else | 2460 | else |
2459 | m_log.Warn("[PHYSICS]: Got NaN quaternion Orientation from Scene in Object"); | 2461 | m_log.Warn("[PHYSICS]: Got NaN quaternion Orientation from Scene in Object"); |
2460 | 2462 | ||
@@ -2675,8 +2677,8 @@ Console.WriteLine(" JointCreateFixed"); | |||
2675 | //outofBounds = true; | 2677 | //outofBounds = true; |
2676 | } | 2678 | } |
2677 | 2679 | ||
2678 | //float Adiff = 1.0f - Math.Abs(Quaternion.Dot(m_lastorientation, l_orientation)); | 2680 | //float Adiff = 1.0f - Math.Abs(Quaternion.Dot(m_lastorientation, l_orientation)); |
2679 | //Console.WriteLine("Adiff " + m_primName + " = " + Adiff); | 2681 | //Console.WriteLine("Adiff " + m_primName + " = " + Adiff); |
2680 | if ((Math.Abs(m_lastposition.X - l_position.X) < 0.02) | 2682 | if ((Math.Abs(m_lastposition.X - l_position.X) < 0.02) |
2681 | && (Math.Abs(m_lastposition.Y - l_position.Y) < 0.02) | 2683 | && (Math.Abs(m_lastposition.Y - l_position.Y) < 0.02) |
2682 | && (Math.Abs(m_lastposition.Z - l_position.Z) < 0.02) | 2684 | && (Math.Abs(m_lastposition.Z - l_position.Z) < 0.02) |
@@ -2684,7 +2686,7 @@ Console.WriteLine(" JointCreateFixed"); | |||
2684 | && (1.0 - Math.Abs(Quaternion.Dot(m_lastorientation, l_orientation)) < 0.0001)) // KF 0.01 is far to large | 2686 | && (1.0 - Math.Abs(Quaternion.Dot(m_lastorientation, l_orientation)) < 0.0001)) // KF 0.01 is far to large |
2685 | { | 2687 | { |
2686 | _zeroFlag = true; | 2688 | _zeroFlag = true; |
2687 | //Console.WriteLine("ZFT 2"); | 2689 | //Console.WriteLine("ZFT 2"); |
2688 | m_throttleUpdates = false; | 2690 | m_throttleUpdates = false; |
2689 | } | 2691 | } |
2690 | else | 2692 | else |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODERayCastRequestManager.cs b/OpenSim/Region/Physics/OdePlugin/ODERayCastRequestManager.cs index 7314107..ba77dae 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODERayCastRequestManager.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODERayCastRequestManager.cs | |||
@@ -110,7 +110,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
110 | for (int i = 0; i < reqs.Length; i++) | 110 | for (int i = 0; i < reqs.Length; i++) |
111 | { | 111 | { |
112 | if (reqs[i].callbackMethod != null) // quick optimization here, don't raycast | 112 | if (reqs[i].callbackMethod != null) // quick optimization here, don't raycast |
113 | RayCast(reqs[i]); // if there isn't anyone to send results | 113 | RayCast(reqs[i]); // if there isn't anyone to send results |
114 | } | 114 | } |
115 | /* | 115 | /* |
116 | foreach (ODERayCastRequest req in m_PendingRequests) | 116 | foreach (ODERayCastRequest req in m_PendingRequests) |
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index 0384d6e..7984bd9 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | |||
@@ -2152,7 +2152,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2152 | /// <param name="prim"></param> | 2152 | /// <param name="prim"></param> |
2153 | public void RemovePrimThreadLocked(OdePrim prim) | 2153 | public void RemovePrimThreadLocked(OdePrim prim) |
2154 | { | 2154 | { |
2155 | //Console.WriteLine("RemovePrimThreadLocked " + prim.m_primName); | 2155 | //Console.WriteLine("RemovePrimThreadLocked " + prim.m_primName); |
2156 | lock (prim) | 2156 | lock (prim) |
2157 | { | 2157 | { |
2158 | remCollisionEventReporting(prim); | 2158 | remCollisionEventReporting(prim); |
@@ -2603,12 +2603,12 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2603 | lock (_taintedPrimLock) | 2603 | lock (_taintedPrimLock) |
2604 | { | 2604 | { |
2605 | if (!(_taintedPrimH.Contains(taintedprim))) | 2605 | if (!(_taintedPrimH.Contains(taintedprim))) |
2606 | { | 2606 | { |
2607 | //Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.m_primName); | 2607 | //Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.m_primName); |
2608 | _taintedPrimH.Add(taintedprim); // HashSet for searching | 2608 | _taintedPrimH.Add(taintedprim); // HashSet for searching |
2609 | _taintedPrimL.Add(taintedprim); // List for ordered readout | 2609 | _taintedPrimL.Add(taintedprim); // List for ordered readout |
2610 | } | 2610 | } |
2611 | } | 2611 | } |
2612 | return; | 2612 | return; |
2613 | } | 2613 | } |
2614 | else if (prim is OdeCharacter) | 2614 | else if (prim is OdeCharacter) |
@@ -2736,12 +2736,12 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2736 | { | 2736 | { |
2737 | if (prim.m_taintremove) | 2737 | if (prim.m_taintremove) |
2738 | { | 2738 | { |
2739 | //Console.WriteLine("Simulate calls RemovePrimThreadLocked"); | 2739 | //Console.WriteLine("Simulate calls RemovePrimThreadLocked"); |
2740 | RemovePrimThreadLocked(prim); | 2740 | RemovePrimThreadLocked(prim); |
2741 | } | 2741 | } |
2742 | else | 2742 | else |
2743 | { | 2743 | { |
2744 | //Console.WriteLine("Simulate calls ProcessTaints"); | 2744 | //Console.WriteLine("Simulate calls ProcessTaints"); |
2745 | prim.ProcessTaints(timeStep); | 2745 | prim.ProcessTaints(timeStep); |
2746 | } | 2746 | } |
2747 | processedtaints = true; | 2747 | processedtaints = true; |
@@ -2937,7 +2937,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2937 | } | 2937 | } |
2938 | 2938 | ||
2939 | if (processedtaints) | 2939 | if (processedtaints) |
2940 | //Console.WriteLine("Simulate calls Clear of _taintedPrim list"); | 2940 | //Console.WriteLine("Simulate calls Clear of _taintedPrim list"); |
2941 | _taintedPrimH.Clear(); | 2941 | _taintedPrimH.Clear(); |
2942 | _taintedPrimL.Clear(); | 2942 | _taintedPrimL.Clear(); |
2943 | } | 2943 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index d242506..39b597e 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2753,7 +2753,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2753 | { | 2753 | { |
2754 | m_host.AddScriptLPS(1); | 2754 | m_host.AddScriptLPS(1); |
2755 | m_host.CollisionFilter.Clear(); | 2755 | m_host.CollisionFilter.Clear(); |
2756 | if(id != null) | 2756 | if (id != null) |
2757 | { | 2757 | { |
2758 | m_host.CollisionFilter.Add(accept,id); | 2758 | m_host.CollisionFilter.Add(accept,id); |
2759 | } | 2759 | } |
@@ -3818,6 +3818,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3818 | Util.Clip((float)color.z, 0.0f, 1.0f)); | 3818 | Util.Clip((float)color.z, 0.0f, 1.0f)); |
3819 | m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f)); | 3819 | m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f)); |
3820 | m_host.ParentGroup.HasGroupChanged = true; | 3820 | m_host.ParentGroup.HasGroupChanged = true; |
3821 | m_host.ParentGroup.ScheduleGroupForFullUpdate(); | ||
3821 | } | 3822 | } |
3822 | 3823 | ||
3823 | public LSL_Float llWater(LSL_Vector offset) | 3824 | public LSL_Float llWater(LSL_Vector offset) |
@@ -4240,7 +4241,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4240 | public void llPassCollisions(int pass) | 4241 | public void llPassCollisions(int pass) |
4241 | { | 4242 | { |
4242 | m_host.AddScriptLPS(1); | 4243 | m_host.AddScriptLPS(1); |
4243 | if(pass == 0) | 4244 | if (pass == 0) |
4244 | { | 4245 | { |
4245 | m_host.ParentGroup.PassCollision = false; | 4246 | m_host.ParentGroup.PassCollision = false; |
4246 | } | 4247 | } |
@@ -7437,7 +7438,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7437 | // makes it more difficult to determine a child prim's actual inworld position). | 7438 | // makes it more difficult to determine a child prim's actual inworld position). |
7438 | if (part.ParentID != 0) | 7439 | if (part.ParentID != 0) |
7439 | v = ((v - llGetRootPosition()) * llGetRootRotation()) + llGetRootPosition(); | 7440 | v = ((v - llGetRootPosition()) * llGetRootRotation()) + llGetRootPosition(); |
7440 | res.Add( v ); | 7441 | res.Add(v); |
7441 | break; | 7442 | break; |
7442 | 7443 | ||
7443 | case (int)ScriptBaseClass.PRIM_SIZE: | 7444 | case (int)ScriptBaseClass.PRIM_SIZE: |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 5abe4b1..d8b9159 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1948,7 +1948,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1948 | 1948 | ||
1949 | return key.ToString(); | 1949 | return key.ToString(); |
1950 | } | 1950 | } |
1951 | 1951 | ||
1952 | /// <summary> | 1952 | /// <summary> |
1953 | /// Return information regarding various simulator statistics (sim fps, physics fps, time | 1953 | /// Return information regarding various simulator statistics (sim fps, physics fps, time |
1954 | /// dilation, total number of prims, total number of active scripts, script lps, various | 1954 | /// dilation, total number of prims, total number of active scripts, script lps, various |
@@ -1956,19 +1956,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1956 | /// client's Statistics Bar (Ctrl-Shift-1) | 1956 | /// client's Statistics Bar (Ctrl-Shift-1) |
1957 | /// </summary> | 1957 | /// </summary> |
1958 | /// <returns>List of floats</returns> | 1958 | /// <returns>List of floats</returns> |
1959 | public LSL_List osGetRegionStats() | 1959 | public LSL_List osGetRegionStats() |
1960 | { | 1960 | { |
1961 | CheckThreatLevel(ThreatLevel.Moderate, "osGetRegionStats"); | 1961 | CheckThreatLevel(ThreatLevel.Moderate, "osGetRegionStats"); |
1962 | m_host.AddScriptLPS(1); | 1962 | m_host.AddScriptLPS(1); |
1963 | LSL_List ret = new LSL_List(); | 1963 | LSL_List ret = new LSL_List(); |
1964 | float[] stats = World.SimulatorStats; | 1964 | float[] stats = World.SimulatorStats; |
1965 | 1965 | ||
1966 | for (int i = 0; i < 21; i++) | 1966 | for (int i = 0; i < 21; i++) |
1967 | { | 1967 | { |
1968 | ret.Add(new LSL_Float( stats[i] )); | 1968 | ret.Add(new LSL_Float(stats[i])); |
1969 | } | 1969 | } |
1970 | return ret; | 1970 | return ret; |
1971 | } | 1971 | } |
1972 | 1972 | ||
1973 | public int osGetSimulatorMemory() | 1973 | public int osGetSimulatorMemory() |
1974 | { | 1974 | { |
@@ -1984,81 +1984,81 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1984 | return (int)pws; | 1984 | return (int)pws; |
1985 | } | 1985 | } |
1986 | public void osSetSpeed(string UUID, float SpeedModifier) | 1986 | public void osSetSpeed(string UUID, float SpeedModifier) |
1987 | { | 1987 | { |
1988 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); | 1988 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); |
1989 | m_host.AddScriptLPS(1); | 1989 | m_host.AddScriptLPS(1); |
1990 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); | 1990 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); |
1991 | avatar.SpeedModifier = SpeedModifier; | 1991 | avatar.SpeedModifier = SpeedModifier; |
1992 | } | 1992 | } |
1993 | public void osKickAvatar(string FirstName,string SurName,string alert) | 1993 | public void osKickAvatar(string FirstName,string SurName,string alert) |
1994 | { | 1994 | { |
1995 | CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); | 1995 | CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); |
1996 | if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) | 1996 | if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) |
1997 | { | 1997 | { |
1998 | foreach (ScenePresence presence in World.GetAvatars()) | 1998 | foreach (ScenePresence presence in World.GetAvatars()) |
1999 | { | 1999 | { |
2000 | if ((presence.Firstname == FirstName) && | 2000 | if ((presence.Firstname == FirstName) && |
2001 | presence.Lastname == SurName) | 2001 | presence.Lastname == SurName) |
2002 | { | 2002 | { |
2003 | // kick client... | 2003 | // kick client... |
2004 | if (alert != null) | 2004 | if (alert != null) |
2005 | presence.ControllingClient.Kick(alert); | 2005 | presence.ControllingClient.Kick(alert); |
2006 | 2006 | ||
2007 | // ...and close on our side | 2007 | // ...and close on our side |
2008 | presence.Scene.IncomingCloseAgent(presence.UUID); | 2008 | presence.Scene.IncomingCloseAgent(presence.UUID); |
2009 | } | 2009 | } |
2010 | } | 2010 | } |
2011 | } | 2011 | } |
2012 | } | 2012 | } |
2013 | public void osCauseDamage(string avatar, double damage) | 2013 | public void osCauseDamage(string avatar, double damage) |
2014 | { | 2014 | { |
2015 | CheckThreatLevel(ThreatLevel.High, "osCauseDamage"); | 2015 | CheckThreatLevel(ThreatLevel.High, "osCauseDamage"); |
2016 | m_host.AddScriptLPS(1); | 2016 | m_host.AddScriptLPS(1); |
2017 | 2017 | ||
2018 | UUID avatarId = new UUID(avatar); | 2018 | UUID avatarId = new UUID(avatar); |
2019 | Vector3 pos = m_host.GetWorldPosition(); | 2019 | Vector3 pos = m_host.GetWorldPosition(); |
2020 | 2020 | ||
2021 | ScenePresence presence = World.GetScenePresence(avatarId); | 2021 | ScenePresence presence = World.GetScenePresence(avatarId); |
2022 | if (presence != null) | 2022 | if (presence != null) |
2023 | { | 2023 | { |
2024 | LandData land = World.GetLandData((float)pos.X, (float)pos.Y); | 2024 | LandData land = World.GetLandData((float)pos.X, (float)pos.Y); |
2025 | if ((land.Flags & (uint)ParcelFlags.AllowDamage) == (uint)ParcelFlags.AllowDamage) | 2025 | if ((land.Flags & (uint)ParcelFlags.AllowDamage) == (uint)ParcelFlags.AllowDamage) |
2026 | { | 2026 | { |
2027 | float health = presence.Health; | 2027 | float health = presence.Health; |
2028 | health -= (float)damage; | 2028 | health -= (float)damage; |
2029 | presence.setHealthWithUpdate(health); | 2029 | presence.setHealthWithUpdate(health); |
2030 | if (health <= 0) | 2030 | if (health <= 0) |
2031 | { | 2031 | { |
2032 | float healthliveagain = 100; | 2032 | float healthliveagain = 100; |
2033 | presence.ControllingClient.SendAgentAlertMessage("You died!", true); | 2033 | presence.ControllingClient.SendAgentAlertMessage("You died!", true); |
2034 | presence.setHealthWithUpdate(healthliveagain); | 2034 | presence.setHealthWithUpdate(healthliveagain); |
2035 | presence.Scene.TeleportClientHome(presence.UUID, presence.ControllingClient); | 2035 | presence.Scene.TeleportClientHome(presence.UUID, presence.ControllingClient); |
2036 | } | 2036 | } |
2037 | } | 2037 | } |
2038 | } | 2038 | } |
2039 | } | 2039 | } |
2040 | public void osCauseHealing(string avatar, double healing) | 2040 | public void osCauseHealing(string avatar, double healing) |
2041 | { | 2041 | { |
2042 | CheckThreatLevel(ThreatLevel.High, "osCauseHealing"); | 2042 | CheckThreatLevel(ThreatLevel.High, "osCauseHealing"); |
2043 | m_host.AddScriptLPS(1); | 2043 | m_host.AddScriptLPS(1); |
2044 | 2044 | ||
2045 | UUID avatarId = new UUID(avatar); | 2045 | UUID avatarId = new UUID(avatar); |
2046 | ScenePresence presence = World.GetScenePresence(avatarId); | 2046 | ScenePresence presence = World.GetScenePresence(avatarId); |
2047 | Vector3 pos = m_host.GetWorldPosition(); | 2047 | Vector3 pos = m_host.GetWorldPosition(); |
2048 | bool result = World.ScriptDanger(m_host.LocalId, new Vector3((float)pos.X, (float)pos.Y, (float)pos.Z)); | 2048 | bool result = World.ScriptDanger(m_host.LocalId, new Vector3((float)pos.X, (float)pos.Y, (float)pos.Z)); |
2049 | if (result) | 2049 | if (result) |
2050 | { | 2050 | { |
2051 | if (presence != null) | 2051 | if (presence != null) |
2052 | { | 2052 | { |
2053 | float health = presence.Health; | 2053 | float health = presence.Health; |
2054 | health += (float)healing; | 2054 | health += (float)healing; |
2055 | if (health >= 100) | 2055 | if (health >= 100) |
2056 | { | 2056 | { |
2057 | health = 100; | 2057 | health = 100; |
2058 | } | 2058 | } |
2059 | presence.setHealthWithUpdate(health); | 2059 | presence.setHealthWithUpdate(health); |
2060 | } | 2060 | } |
2061 | } | 2061 | } |
2062 | } | 2062 | } |
2063 | } | 2063 | } |
2064 | } | 2064 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index ac9405e..60b8050 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | |||
@@ -162,7 +162,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
162 | 162 | ||
163 | key osGetMapTexture(); | 163 | key osGetMapTexture(); |
164 | key osGetRegionMapTexture(string regionName); | 164 | key osGetRegionMapTexture(string regionName); |
165 | LSL_List osGetRegionStats(); | 165 | LSL_List osGetRegionStats(); |
166 | 166 | ||
167 | int osGetSimulatorMemory(); | 167 | int osGetSimulatorMemory(); |
168 | void osKickAvatar(string FirstName,string SurName,string alert); | 168 | void osKickAvatar(string FirstName,string SurName,string alert); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index acff8fb..13b855f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs | |||
@@ -515,29 +515,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
515 | public const string TEXTURE_PLYWOOD = "89556747-24cb-43ed-920b-47caed15465f"; | 515 | public const string TEXTURE_PLYWOOD = "89556747-24cb-43ed-920b-47caed15465f"; |
516 | public const string TEXTURE_TRANSPARENT = "8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"; | 516 | public const string TEXTURE_TRANSPARENT = "8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"; |
517 | public const string TEXTURE_MEDIA = "8b5fec65-8d8d-9dc5-cda8-8fdf2716e361"; | 517 | public const string TEXTURE_MEDIA = "8b5fec65-8d8d-9dc5-cda8-8fdf2716e361"; |
518 | 518 | ||
519 | // Constants for osGetRegionStats | 519 | // Constants for osGetRegionStats |
520 | public const int STATS_TIME_DILATION = 0; | 520 | public const int STATS_TIME_DILATION = 0; |
521 | public const int STATS_SIM_FPS = 1; | 521 | public const int STATS_SIM_FPS = 1; |
522 | public const int STATS_PHYSICS_FPS = 2; | 522 | public const int STATS_PHYSICS_FPS = 2; |
523 | public const int STATS_AGENT_UPDATES = 3; | 523 | public const int STATS_AGENT_UPDATES = 3; |
524 | public const int STATS_ROOT_AGENTS = 4; | 524 | public const int STATS_ROOT_AGENTS = 4; |
525 | public const int STATS_CHILD_AGENTS = 5; | 525 | public const int STATS_CHILD_AGENTS = 5; |
526 | public const int STATS_TOTAL_PRIMS = 6; | 526 | public const int STATS_TOTAL_PRIMS = 6; |
527 | public const int STATS_ACTIVE_PRIMS = 7; | 527 | public const int STATS_ACTIVE_PRIMS = 7; |
528 | public const int STATS_FRAME_MS = 8; | 528 | public const int STATS_FRAME_MS = 8; |
529 | public const int STATS_NET_MS = 9; | 529 | public const int STATS_NET_MS = 9; |
530 | public const int STATS_PHYSICS_MS = 10; | 530 | public const int STATS_PHYSICS_MS = 10; |
531 | public const int STATS_IMAGE_MS = 11; | 531 | public const int STATS_IMAGE_MS = 11; |
532 | public const int STATS_OTHER_MS = 12; | 532 | public const int STATS_OTHER_MS = 12; |
533 | public const int STATS_IN_PACKETS_PER_SECOND = 13; | 533 | public const int STATS_IN_PACKETS_PER_SECOND = 13; |
534 | public const int STATS_OUT_PACKETS_PER_SECOND = 14; | 534 | public const int STATS_OUT_PACKETS_PER_SECOND = 14; |
535 | public const int STATS_UNACKED_BYTES = 15; | 535 | public const int STATS_UNACKED_BYTES = 15; |
536 | public const int STATS_AGENT_MS = 16; | 536 | public const int STATS_AGENT_MS = 16; |
537 | public const int STATS_PENDING_DOWNLOADS = 17; | 537 | public const int STATS_PENDING_DOWNLOADS = 17; |
538 | public const int STATS_PENDING_UPLOADS = 18; | 538 | public const int STATS_PENDING_UPLOADS = 18; |
539 | public const int STATS_ACTIVE_SCRIPTS = 19; | 539 | public const int STATS_ACTIVE_SCRIPTS = 19; |
540 | public const int STATS_SCRIPT_LPS = 20; | 540 | public const int STATS_SCRIPT_LPS = 20; |
541 | 541 | ||
542 | } | 542 | } |
543 | } | 543 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 2ec6226..3870af3 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -632,11 +632,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
632 | { | 632 | { |
633 | return m_OSSL_Functions.osGetRegionMapTexture(regionName); | 633 | return m_OSSL_Functions.osGetRegionMapTexture(regionName); |
634 | } | 634 | } |
635 | 635 | ||
636 | public LSL_List osGetRegionStats() | 636 | public LSL_List osGetRegionStats() |
637 | { | 637 | { |
638 | return m_OSSL_Functions.osGetRegionStats(); | 638 | return m_OSSL_Functions.osGetRegionStats(); |
639 | } | 639 | } |
640 | 640 | ||
641 | /// <summary> | 641 | /// <summary> |
642 | /// Returns the amount of memory in use by the Simulator Daemon. | 642 | /// Returns the amount of memory in use by the Simulator Daemon. |
@@ -649,7 +649,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
649 | } | 649 | } |
650 | public void osKickAvatar(string FirstName,string SurName,string alert) | 650 | public void osKickAvatar(string FirstName,string SurName,string alert) |
651 | { | 651 | { |
652 | m_OSSL_Functions.osKickAvatar( FirstName, SurName, alert); | 652 | m_OSSL_Functions.osKickAvatar(FirstName, SurName, alert); |
653 | } | 653 | } |
654 | public void osSetSpeed(string UUID, float SpeedModifier) | 654 | public void osSetSpeed(string UUID, float SpeedModifier) |
655 | { | 655 | { |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs index 121159c..edbbc2a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs | |||
@@ -126,6 +126,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
126 | m_InitialValues = GetVars(); | 126 | m_InitialValues = GetVars(); |
127 | } | 127 | } |
128 | 128 | ||
129 | public virtual void StateChange(string newState) | ||
130 | { | ||
131 | } | ||
132 | |||
129 | public void Close() | 133 | public void Close() |
130 | { | 134 | { |
131 | // m_sponser.Close(); | 135 | // m_sponser.Close(); |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 95f7852..6dd94bb 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -591,7 +591,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
591 | 591 | ||
592 | Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap; | 592 | Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> linemap; |
593 | 593 | ||
594 | lock(m_ScriptErrors) | 594 | lock (m_ScriptErrors) |
595 | { | 595 | { |
596 | try | 596 | try |
597 | { | 597 | { |